diff --git a/pkg/app/app.go b/pkg/app/app.go index f2d89e28..a5411a8c 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -142,7 +142,9 @@ func (a *App) Repos(c ReposConfigProvider) error { // TODO: Remove this function once Helmfile v0.x func (a *App) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) error { return a.ForEachState(func(run *Run) (_ bool, errs []error) { - err := run.withPreparedCharts("charts", state.ChartPrepareOptions{ + err := run.withPreparedCharts(state.RunInfo{ + SubCommand: "charts", + }, state.ChartPrepareOptions{ SkipRepos: true, SkipDeps: true, Concurrency: 2, @@ -174,7 +176,7 @@ func (a *App) Diff(c DiffConfigProvider) error { includeCRDs := !c.SkipCRDs() - prepErr := run.withPreparedCharts("diff", state.ChartPrepareOptions{ + prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "diff"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), IncludeCRDs: &includeCRDs, @@ -239,7 +241,7 @@ func (a *App) Template(c TemplateConfigProvider) error { // Live output should never be enabled for the "template" subcommand to avoid breaking `helmfile template | kubectl apply -f -` run.helm.SetEnableLiveOutput(false) - prepErr := run.withPreparedCharts("template", state.ChartPrepareOptions{ + prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "template"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), IncludeCRDs: &includeCRDs, @@ -262,7 +264,7 @@ func (a *App) Template(c TemplateConfigProvider) error { func (a *App) WriteValues(c WriteValuesConfigProvider) error { return a.ForEachState(func(run *Run) (ok bool, errs []error) { - prepErr := run.withPreparedCharts("write-values", state.ChartPrepareOptions{ + prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "write-values"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), SkipCleanup: c.SkipCleanup(), @@ -312,7 +314,7 @@ func (a *App) Lint(c LintConfigProvider) error { var lintErrs []error // `helm lint` on helm v2 and v3 does not support remote charts, that we need to set `forceDownload=true` here - prepErr := run.withPreparedCharts("lint", state.ChartPrepareOptions{ + prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "lint"}, state.ChartPrepareOptions{ ForceDownload: true, SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), @@ -347,7 +349,7 @@ func (a *App) Lint(c LintConfigProvider) error { func (a *App) Fetch(c FetchConfigProvider) error { return a.ForEachState(func(run *Run) (ok bool, errs []error) { - prepErr := run.withPreparedCharts("pull", state.ChartPrepareOptions{ + prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "pull"}, state.ChartPrepareOptions{ ForceDownload: true, SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), @@ -369,7 +371,7 @@ func (a *App) Sync(c SyncConfigProvider) error { return a.ForEachState(func(run *Run) (ok bool, errs []error) { includeCRDs := !c.SkipCRDs() - prepErr := run.withPreparedCharts("sync", state.ChartPrepareOptions{ + prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "sync"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), Wait: c.Wait(), @@ -402,7 +404,7 @@ func (a *App) Apply(c ApplyConfigProvider) error { err := a.ForEachState(func(run *Run) (ok bool, errs []error) { includeCRDs := !c.SkipCRDs() - prepErr := run.withPreparedCharts("apply", state.ChartPrepareOptions{ + prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "apply"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), Wait: c.Wait(), @@ -444,7 +446,7 @@ func (a *App) Apply(c ApplyConfigProvider) error { func (a *App) Status(c StatusesConfigProvider) error { return a.ForEachState(func(run *Run) (ok bool, errs []error) { - err := run.withPreparedCharts("status", state.ChartPrepareOptions{ + err := run.withPreparedCharts(state.RunInfo{SubCommand: "status"}, state.ChartPrepareOptions{ SkipRepos: true, SkipDeps: true, Concurrency: c.Concurrency(), @@ -464,7 +466,7 @@ func (a *App) Status(c StatusesConfigProvider) error { func (a *App) Delete(c DeleteConfigProvider) error { return a.ForEachState(func(run *Run) (ok bool, errs []error) { if !c.SkipCharts() { - err := run.withPreparedCharts("delete", state.ChartPrepareOptions{ + err := run.withPreparedCharts(state.RunInfo{SubCommand: "delete"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), Concurrency: c.Concurrency(), @@ -487,7 +489,7 @@ func (a *App) Delete(c DeleteConfigProvider) error { func (a *App) Destroy(c DestroyConfigProvider) error { return a.ForEachState(func(run *Run) (ok bool, errs []error) { if !c.SkipCharts() { - err := run.withPreparedCharts("destroy", state.ChartPrepareOptions{ + err := run.withPreparedCharts(state.RunInfo{SubCommand: "destroy"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), Concurrency: c.Concurrency(), @@ -514,7 +516,7 @@ func (a *App) Test(c TestConfigProvider) error { "or set helm.sh/hook-delete-policy\n") } - err := run.withPreparedCharts("test", state.ChartPrepareOptions{ + err := run.withPreparedCharts(state.RunInfo{SubCommand: "test"}, state.ChartPrepareOptions{ SkipRepos: c.SkipDeps(), SkipDeps: c.SkipDeps(), Concurrency: c.Concurrency(), @@ -533,7 +535,7 @@ func (a *App) Test(c TestConfigProvider) error { func (a *App) PrintDAGState(c DAGConfigProvider) error { var err error return a.ForEachState(func(run *Run) (ok bool, errs []error) { - err = run.withPreparedCharts("show-dag", state.ChartPrepareOptions{ + err = run.withPreparedCharts(state.RunInfo{SubCommand: "show-dag"}, state.ChartPrepareOptions{ SkipRepos: true, SkipDeps: true, Concurrency: 2, @@ -549,7 +551,7 @@ func (a *App) PrintDAGState(c DAGConfigProvider) error { func (a *App) PrintState(c StateConfigProvider) error { return a.ForEachState(func(run *Run) (_ bool, errs []error) { - err := run.withPreparedCharts("build", state.ChartPrepareOptions{ + err := run.withPreparedCharts(state.RunInfo{SubCommand: "build"}, state.ChartPrepareOptions{ SkipRepos: true, SkipDeps: true, Concurrency: 2, @@ -621,7 +623,7 @@ func (a *App) ListReleases(c ListConfigProvider) error { var err error if !c.SkipCharts() { - err = run.withPreparedCharts("list", state.ChartPrepareOptions{ + err = run.withPreparedCharts(state.RunInfo{SubCommand: "list"}, state.ChartPrepareOptions{ SkipRepos: true, SkipDeps: true, Concurrency: 2, @@ -1480,7 +1482,7 @@ Do you really want to apply? if _, preapplyErrors := withDAG(st, helm, a.Logger, state.PlanOptions{Purpose: "invoking preapply hooks for", Reverse: true, SelectedReleases: toApplyWithNeeds, SkipNeeds: true}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error { for _, r := range subst.Releases { release := r - if _, err := st.TriggerPreapplyEvent(&release, "apply"); err != nil { + if _, err := st.TriggerPreapplyEvent(&release, state.RunInfo{SubCommand: "apply"}); err != nil { return []error{err} } } @@ -1552,7 +1554,7 @@ Do you really want to apply? for id := range releasesWithNoChange { r := releasesWithNoChange[id] - if _, err := st.TriggerCleanupEvent(&r, "apply"); err != nil { + if _, err := st.TriggerCleanupEvent(&r, state.RunInfo{SubCommand: "apply"}); err != nil { a.Logger.Warnf("warn: %v\n", err) } } @@ -1601,7 +1603,7 @@ func (a *App) delete(r *Run, purge bool, c DestroyConfigProvider) (bool, []error for id := range releasesWithNoChange { r := releasesWithNoChange[id] - if _, err := st.TriggerCleanupEvent(&r, "delete"); err != nil { + if _, err := st.TriggerCleanupEvent(&r, state.RunInfo{SubCommand: "delete"}); err != nil { a.Logger.Warnf("warn: %v\n", err) } } @@ -1848,7 +1850,7 @@ func (a *App) sync(r *Run, c SyncConfigProvider) (bool, []error) { for id := range releasesWithNoChange { r := releasesWithNoChange[id] - if _, err := st.TriggerCleanupEvent(&r, "sync"); err != nil { + if _, err := st.TriggerCleanupEvent(&r, state.RunInfo{SubCommand: "sync"}); err != nil { a.Logger.Warnf("warn: %v\n", err) } } diff --git a/pkg/app/run.go b/pkg/app/run.go index d3eb1d6f..8608f1da 100644 --- a/pkg/app/run.go +++ b/pkg/app/run.go @@ -39,7 +39,7 @@ func (r *Run) askForConfirmation(msg string) bool { return AskForConfirmation(msg) } -func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepareOptions, f func()) error { +func (r *Run) withPreparedCharts(helmfileRunInfo state.RunInfo, opts state.ChartPrepareOptions, f func()) error { if r.ReleaseToChart != nil { panic("Run.PrepareCharts can be called only once") } @@ -67,13 +67,13 @@ func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepare fmt.Printf("Charts will be downloaded to: %s\n", dir) } - if _, err := r.state.TriggerGlobalPrepareEvent(helmfileCommand); err != nil { + if _, err := r.state.TriggerGlobalPrepareEvent(helmfileRunInfo); err != nil { return err } concurrency := opts.Concurrency - releaseToChart, errs := r.state.PrepareCharts(r.helm, dir, concurrency, helmfileCommand, opts) + releaseToChart, errs := r.state.PrepareCharts(r.helm, dir, concurrency, helmfileRunInfo, opts) if len(errs) > 0 { return fmt.Errorf("%v", errs) @@ -98,7 +98,7 @@ func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepare f() - _, err := r.state.TriggerGlobalCleanupEvent(helmfileCommand) + _, err := r.state.TriggerGlobalCleanupEvent(helmfileRunInfo) return err } diff --git a/pkg/state/state.go b/pkg/state/state.go index f503665d..35e09ec5 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -838,7 +838,7 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h var relErr *ReleaseError context := st.createHelmContext(release, workerIndex) - if _, err := st.triggerPresyncEvent(release, "sync"); err != nil { + if _, err := st.triggerPresyncEvent(release, RunInfo{SubCommand: "sync"}); err != nil { relErr = newReleaseFailedError(release, err) } else { var args []string @@ -851,13 +851,13 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h m.Lock() start := time.Now() - if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { + if _, err := st.triggerReleaseEvent("preuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) - } else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { + } else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else { @@ -867,11 +867,11 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h m.Unlock() } - if _, err := st.triggerPostsyncEvent(release, relErr, "sync"); err != nil { + if _, err := st.triggerPostsyncEvent(release, relErr, RunInfo{SubCommand: "sync"}); err != nil { st.logger.Warnf("warn: %v\n", err) } - if _, err := st.TriggerCleanupEvent(release, "sync"); err != nil { + if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "sync"}); err != nil { st.logger.Warnf("warn: %v\n", err) } @@ -948,7 +948,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme context := st.createHelmContext(release, workerIndex) start := time.Now() - if _, err := st.triggerPresyncEvent(release, "sync"); err != nil { + if _, err := st.triggerPresyncEvent(release, RunInfo{SubCommand: "sync"}); err != nil { relErr = newReleaseFailedError(release, err) } else if !release.Desired() { installed, err := st.isReleaseInstalled(context, helm, *release) @@ -958,13 +958,13 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme var args []string deletionFlags := st.appendConnectionFlags(args, release) m.Lock() - if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { + if _, err := st.triggerReleaseEvent("preuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) - } else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { + } else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else { @@ -989,7 +989,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme } } - if _, err := st.triggerPostsyncEvent(release, relErr, "sync"); err != nil { + if _, err := st.triggerPostsyncEvent(release, relErr, RunInfo{SubCommand: "sync"}); err != nil { if relErr == nil { relErr = newReleaseFailedError(release, err) } else { @@ -997,7 +997,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme } } - if _, err := st.TriggerCleanupEvent(release, "sync"); err != nil { + if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "sync"}); err != nil { if relErr == nil { relErr = newReleaseFailedError(release, err) } else { @@ -1074,6 +1074,12 @@ func releasesNeedCharts(releases []ReleaseSpec) []ReleaseSpec { return result } +// RunInfo contains helmfile run info +type RunInfo struct { + SubCommand string + DryRun string +} + type ChartPrepareOptions struct { ForceDownload bool SkipRepos bool @@ -1141,7 +1147,7 @@ type PrepareChartKey struct { // Otheriwse, if a chart is not a helm chart, it will call "chartify" to turn it into a chart. // // If exists, it will also patch resources by json patches, strategic-merge patches, and injectors. -func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { +func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileRuninfo RunInfo, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { if !opts.SkipResolve { updated, err := st.ResolveDeps() if err != nil { @@ -1186,7 +1192,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre // // If it wasn't called here, Helmfile can end up an issue like // https://github.com/roboll/helmfile/issues/1328 - if _, err := st.triggerPrepareEvent(release, helmfileCommand); err != nil { + if _, err := st.triggerPrepareEvent(release, helmfileRuninfo); err != nil { results <- &chartPrepareResult{err: err} return } @@ -1234,7 +1240,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre skipDepsDefault := release.SkipDeps == nil && st.HelmDefaults.SkipDeps skipDeps := (!isLocal && !chartFetchedByGoGetter) || skipDepsGlobal || skipDepsRelease || skipDepsDefault - if chartification != nil && helmfileCommand != "pull" { + if chartification != nil && helmfileRuninfo.SubCommand != "pull" { c := chartify.New( chartify.HelmBin(st.DefaultHelmBinary), chartify.KustomizeBin(st.DefaultKustomizeBinary), @@ -1526,7 +1532,7 @@ func (st *HelmState) TemplateReleases(helm helmexec.Interface, outputDir string, } } - if _, err := st.TriggerCleanupEvent(release, "template"); err != nil { + if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "template"}); err != nil { st.logger.Warnf("warn: %v\n", err) } } @@ -1627,7 +1633,7 @@ func (st *HelmState) WriteReleasesValues(helm helmexec.Interface, additionalValu return []error{fmt.Errorf("writing values file %s: %w", outputValuesFile, err)} } - if _, err := st.TriggerCleanupEvent(release, "write-values"); err != nil { + if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "write-values"}); err != nil { st.logger.Warnf("warn: %v\n", err) } } @@ -1702,7 +1708,7 @@ func (st *HelmState) LintReleases(helm helmexec.Interface, additionalValues []st } } - if _, err := st.TriggerCleanupEvent(&release, "lint"); err != nil { + if _, err := st.TriggerCleanupEvent(&release, RunInfo{SubCommand: "lint"}); err != nil { st.logger.Warnf("warn: %v\n", err) } } @@ -2050,7 +2056,7 @@ func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []st } if triggerCleanupEvents { - if _, err := st.TriggerCleanupEvent(prep.release, "diff"); err != nil { + if _, err := st.TriggerCleanupEvent(prep.release, RunInfo{SubCommand: "diff"}); err != nil { st.logger.Warnf("warn: %v\n", err) } } @@ -2116,7 +2122,7 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel context := st.createHelmContext(&release, workerIndex) start := time.Now() - if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, "delete"); err != nil { + if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, RunInfo{SubCommand: "delete"}); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, &release) return err @@ -2127,7 +2133,7 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel return err } - if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, "delete"); err != nil { + if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, RunInfo{SubCommand: "delete"}); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, &release) return err } @@ -2375,15 +2381,15 @@ func (st *HelmState) FilterReleases(includeTransitiveNeeds bool) error { return nil } -func (st *HelmState) TriggerGlobalPrepareEvent(helmfileCommand string) (bool, error) { - return st.triggerGlobalReleaseEvent("prepare", nil, helmfileCommand) +func (st *HelmState) TriggerGlobalPrepareEvent(runInfo RunInfo) (bool, error) { + return st.triggerGlobalReleaseEvent("prepare", nil, runInfo) } -func (st *HelmState) TriggerGlobalCleanupEvent(helmfileCommand string) (bool, error) { - return st.triggerGlobalReleaseEvent("cleanup", nil, helmfileCommand) +func (st *HelmState) TriggerGlobalCleanupEvent(runInfo RunInfo) (bool, error) { + return st.triggerGlobalReleaseEvent("cleanup", nil, runInfo) } -func (st *HelmState) triggerGlobalReleaseEvent(evt string, evtErr error, helmfileCmd string) (bool, error) { +func (st *HelmState) triggerGlobalReleaseEvent(evt string, evtErr error, runInfo RunInfo) (bool, error) { bus := &event.Bus{ Hooks: st.Hooks, StateFilePath: st.FilePath, @@ -2395,32 +2401,32 @@ func (st *HelmState) triggerGlobalReleaseEvent(evt string, evtErr error, helmfil Fs: st.fs, } data := map[string]any{ - "HelmfileCommand": helmfileCmd, + "HelmfileCommand": runInfo.SubCommand, } return bus.Trigger(evt, evtErr, data) } -func (st *HelmState) triggerPrepareEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { - return st.triggerReleaseEvent("prepare", nil, r, helmfileCommand) +func (st *HelmState) triggerPrepareEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { + return st.triggerReleaseEvent("prepare", nil, r, helmfileRunInfo) } -func (st *HelmState) TriggerCleanupEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { - return st.triggerReleaseEvent("cleanup", nil, r, helmfileCommand) +func (st *HelmState) TriggerCleanupEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { + return st.triggerReleaseEvent("cleanup", nil, r, helmfileRunInfo) } -func (st *HelmState) triggerPresyncEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { - return st.triggerReleaseEvent("presync", nil, r, helmfileCommand) +func (st *HelmState) triggerPresyncEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { + return st.triggerReleaseEvent("presync", nil, r, helmfileRunInfo) } -func (st *HelmState) triggerPostsyncEvent(r *ReleaseSpec, evtErr error, helmfileCommand string) (bool, error) { - return st.triggerReleaseEvent("postsync", evtErr, r, helmfileCommand) +func (st *HelmState) triggerPostsyncEvent(r *ReleaseSpec, evtErr error, helmfileRunInfo RunInfo) (bool, error) { + return st.triggerReleaseEvent("postsync", evtErr, r, helmfileRunInfo) } -func (st *HelmState) TriggerPreapplyEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { - return st.triggerReleaseEvent("preapply", nil, r, helmfileCommand) +func (st *HelmState) TriggerPreapplyEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { + return st.triggerReleaseEvent("preapply", nil, r, helmfileRunInfo) } -func (st *HelmState) triggerReleaseEvent(evt string, evtErr error, r *ReleaseSpec, helmfileCmd string) (bool, error) { +func (st *HelmState) triggerReleaseEvent(evt string, evtErr error, r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { bus := &event.Bus{ Hooks: r.Hooks, StateFilePath: st.FilePath, @@ -2435,7 +2441,7 @@ func (st *HelmState) triggerReleaseEvent(evt string, evtErr error, r *ReleaseSpe data := map[string]any{ "Values": vals, "Release": r, - "HelmfileCommand": helmfileCmd, + "HelmfileCommand": helmfileRunInfo.SubCommand, } return bus.Trigger(evt, evtErr, data)