diff --git a/pkg/app/app.go b/pkg/app/app.go index aace7da7..9eba6e0a 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -133,7 +133,11 @@ func (a *App) Deps(c DepsConfigProvider) error { } return - }, c.IncludeTransitiveNeeds(), SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: c.SkipRepos(), + IncludeNeeds: c.IncludeTransitiveNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }, SetFilter(true)) } func (a *App) Repos(c ReposConfigProvider) error { @@ -145,7 +149,11 @@ func (a *App) Repos(c ReposConfigProvider) error { } return - }, c.IncludeTransitiveNeeds(), SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: !c.IncludeTransitiveNeeds(), + IncludeNeeds: false, + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }, SetFilter(true)) } // TODO: Remove this function once Helmfile v0.x @@ -164,7 +172,11 @@ func (a *App) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) error { } return - }, c.IncludeTransitiveNeeds(), SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: !c.IncludeTransitiveNeeds(), + IncludeNeeds: false, + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }, SetFilter(true)) } func (a *App) Diff(c DiffConfigProvider) error { @@ -221,7 +233,11 @@ func (a *App) Diff(c DiffConfigProvider) error { } return matched, criticalErrs - }, c.IncludeTransitiveNeeds()) + }, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) if err != nil { return err @@ -268,7 +284,11 @@ func (a *App) Template(c TemplateConfigProvider) error { } return - }, c.IncludeTransitiveNeeds()) + }, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) } func (a *App) WriteValues(c WriteValuesConfigProvider) error { @@ -287,7 +307,11 @@ func (a *App) WriteValues(c WriteValuesConfigProvider) error { } return - }, c.IncludeTransitiveNeeds(), SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: !c.IncludeTransitiveNeeds(), + IncludeNeeds: false, + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }, SetFilter(true)) } type MultiError struct { @@ -344,7 +368,11 @@ func (a *App) Lint(c LintConfigProvider) error { } return - }, c.IncludeTransitiveNeeds()) + }, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) if err != nil { return err @@ -374,7 +402,11 @@ func (a *App) Fetch(c FetchConfigProvider) error { } return - }, false, SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true)) } func (a *App) Sync(c SyncConfigProvider) error { @@ -399,7 +431,11 @@ func (a *App) Sync(c SyncConfigProvider) error { } return - }, c.IncludeTransitiveNeeds()) + }, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) } func (a *App) Apply(c ApplyConfigProvider) error { @@ -440,7 +476,11 @@ func (a *App) Apply(c ApplyConfigProvider) error { } return - }, c.IncludeTransitiveNeeds(), opts...) + }, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }, opts...) if err != nil { return err @@ -470,7 +510,11 @@ func (a *App) Status(c StatusesConfigProvider) error { } return - }, false, SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true)) } // TODO: Remove this function once Helmfile v0.x @@ -492,7 +536,11 @@ func (a *App) Delete(c DeleteConfigProvider) error { ok, errs = a.delete(run, c.Purge(), c) } return - }, false, SetReverse(true)) + }, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetReverse(true)) } func (a *App) Destroy(c DestroyConfigProvider) error { @@ -512,7 +560,11 @@ func (a *App) Destroy(c DestroyConfigProvider) error { ok, errs = a.delete(run, true, c) } return - }, false, SetReverse(true)) + }, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetReverse(true)) } func (a *App) Test(c TestConfigProvider) error { @@ -536,7 +588,11 @@ func (a *App) Test(c TestConfigProvider) error { } return - }, false, SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true)) } func (a *App) PrintState(c StateConfigProvider) error { @@ -589,7 +645,11 @@ func (a *App) PrintState(c StateConfigProvider) error { } return - }, false, SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true)) } func (a *App) ListReleases(c ListConfigProvider) error { @@ -622,7 +682,11 @@ func (a *App) ListReleases(c ListConfigProvider) error { releases = append(releases, stateReleases...) return - }, false, SetFilter(true)) + }, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true)) if err != nil { return err @@ -962,7 +1026,7 @@ var ( } ) -func (a *App) ForEachState(do func(*Run) (bool, []error), includeTransitiveNeeds bool, o ...LoadOption) error { +func (a *App) ForEachState(do func(*Run) (bool, []error), needsOptions state.NeedsOptions, o ...LoadOption) error { ctx := NewContext() err := a.visitStatesWithSelectorsAndRemoteSupport(a.FileOrDir, func(st *state.HelmState) (bool, []error) { helm := a.getHelm(st) @@ -972,7 +1036,7 @@ func (a *App) ForEachState(do func(*Run) (bool, []error), includeTransitiveNeeds return false, []error{err} } return do(run) - }, includeTransitiveNeeds, o...) + }, needsOptions, o...) return err } @@ -1051,7 +1115,7 @@ type Opts struct { DAGEnabled bool } -func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converge func(*state.HelmState) (bool, []error), includeTransitiveNeeds bool, opt ...LoadOption) error { +func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converge func(*state.HelmState) (bool, []error), needsOptions state.NeedsOptions, opt ...LoadOption) error { opts := LoadOpts{ Selectors: a.Selectors, } @@ -1083,7 +1147,7 @@ func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converg _, err := converge(st) return err }, - includeTransitiveNeeds) + needsOptions) } } @@ -1096,9 +1160,9 @@ func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converg return a.visitStates(fileOrDir, opts, fHelmStatsWithOverrides) } -func processFilteredReleases(st *state.HelmState, converge func(st *state.HelmState) []error, includeTransitiveNeeds bool) (bool, []error) { +func processFilteredReleases(st *state.HelmState, converge func(st *state.HelmState) []error, needsOptions state.NeedsOptions) (bool, []error) { if len(st.Selectors) > 0 { - err := st.FilterReleases(includeTransitiveNeeds) + err := st.FilterReleases(needsOptions) if err != nil { return false, []error{err} } @@ -1144,11 +1208,11 @@ func checkDuplicates(releases []state.ReleaseSpec) error { return nil } -func (a *App) Wrap(converge func(*state.HelmState, helmexec.Interface) []error) func(st *state.HelmState, helm helmexec.Interface, includeTransitiveNeeds bool) (bool, []error) { - return func(st *state.HelmState, helm helmexec.Interface, includeTransitiveNeeds bool) (bool, []error) { +func (a *App) Wrap(converge func(*state.HelmState, helmexec.Interface) []error) func(st *state.HelmState, helm helmexec.Interface, needsOptions state.NeedsOptions) (bool, []error) { + return func(st *state.HelmState, helm helmexec.Interface, needsOptions state.NeedsOptions) (bool, []error) { return processFilteredReleases(st, func(st *state.HelmState) []error { return converge(st, helm) - }, includeTransitiveNeeds) + }, needsOptions) } } @@ -1247,8 +1311,8 @@ func (a *App) findDesiredStateFiles(specifiedPath string, opts LoadOpts) ([]stri return files, nil } -func (a *App) getSelectedReleases(r *Run, includeTransitiveNeeds bool) ([]state.ReleaseSpec, []state.ReleaseSpec, error) { - selected, err := r.state.GetSelectedReleases(includeTransitiveNeeds) +func (a *App) getSelectedReleases(r *Run, needsOptions state.NeedsOptions) ([]state.ReleaseSpec, []state.ReleaseSpec, error) { + selected, err := r.state.GetSelectedReleases(needsOptions) if err != nil { return nil, nil, err } @@ -1326,7 +1390,11 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) { helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) - selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, c.IncludeTransitiveNeeds()) + selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) if err != nil { return false, false, []error{err} } @@ -1517,7 +1585,11 @@ func (a *App) delete(r *Run, purge bool, c DestroyConfigProvider) (bool, []error affectedReleases := state.AffectedReleases{} - toSync, _, err := a.getSelectedReleases(r, false) + toSync, _, err := a.getSelectedReleases(r, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }) if err != nil { return false, []error{err} } @@ -1670,7 +1742,11 @@ func (a *App) status(r *Run, c StatusesConfigProvider) (bool, []error) { allReleases := st.Releases - selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, false) + selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }) if err != nil { return false, []error{err} } @@ -1720,7 +1796,11 @@ func (a *App) sync(r *Run, c SyncConfigProvider) (bool, []error) { st := r.state helm := r.helm - selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, c.IncludeTransitiveNeeds()) + selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) if err != nil { return false, []error{err} } @@ -1918,7 +1998,11 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) { func (a *App) withNeeds(r *Run, c DAGConfig, includeDisabled bool, f func(*state.HelmState) []error) (bool, []error) { st := r.state - selectedReleases, deduplicated, err := a.getSelectedReleases(r, c.IncludeTransitiveNeeds()) + selectedReleases, deduplicated, err := a.getSelectedReleases(r, state.NeedsOptions{ + SkipNeeds: c.SkipNeeds(), + IncludeNeeds: c.IncludeNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) if err != nil { return false, []error{err} } @@ -2001,7 +2085,7 @@ func (a *App) test(r *Run, c TestConfigProvider) []error { st := r.state - toTest, _, err := a.getSelectedReleases(r, false) + toTest, _, err := a.getSelectedReleases(r, state.NeedsOptions{}) if err != nil { return []error{err} } @@ -2023,7 +2107,7 @@ func (a *App) writeValues(r *Run, c WriteValuesConfigProvider) (bool, []error) { st := r.state helm := r.helm - toRender, _, err := a.getSelectedReleases(r, false) + toRender, _, err := a.getSelectedReleases(r, state.NeedsOptions{}) if err != nil { return false, []error{err} } diff --git a/pkg/app/app_test.go b/pkg/app/app_test.go index 09f56826..426300e8 100644 --- a/pkg/app/app_test.go +++ b/pkg/app/app_test.go @@ -110,7 +110,11 @@ releases: err := app.ForEachState( noop, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err != nil { @@ -162,7 +166,11 @@ BAZ: 4 err := app.ForEachState( Noop, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err != nil { @@ -204,7 +212,11 @@ releases: err := app.ForEachState( Noop, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err == nil { @@ -249,7 +261,11 @@ releases: err := app.ForEachState( Noop, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err != nil { @@ -301,7 +317,11 @@ releases: err := app.ForEachState( Noop, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if testcase.expectErr && err == nil { @@ -368,7 +388,11 @@ releases: err := app.ForEachState( Noop, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if testcase.expectErr && err == nil { @@ -423,7 +447,11 @@ releases: err := app.ForEachState( Noop, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if testcase.expectErr && err == nil { @@ -537,7 +565,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if testcase.expectErr { @@ -778,7 +810,11 @@ func runFilterSubHelmFilesTests(testcases []struct { err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if testcase.expectErr { @@ -864,7 +900,11 @@ ns: INLINE_NS err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) @@ -961,7 +1001,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetReverse(testcase.reverse), SetFilter(true), ) @@ -1027,7 +1071,11 @@ bar: "bar1" err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err != nil { @@ -1148,7 +1196,11 @@ x: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err != nil { @@ -1199,7 +1251,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err != nil { @@ -1255,7 +1311,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) if err != nil { @@ -1304,7 +1364,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) @@ -1346,7 +1410,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) @@ -1392,7 +1460,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }, SetFilter(true), ) @@ -4234,7 +4306,11 @@ releases: err := app.ForEachState( collectReleases, - false, + state.NeedsOptions{ + IncludeTransitiveNeeds: false, + IncludeNeeds: false, + SkipNeeds: true, + }, SetFilter(true), ) if err != nil { diff --git a/pkg/app/run.go b/pkg/app/run.go index e9c277ca..46ab4d32 100644 --- a/pkg/app/run.go +++ b/pkg/app/run.go @@ -107,7 +107,11 @@ func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepare func (r *Run) Deps(c DepsConfigProvider) []error { r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) - return r.state.UpdateDeps(r.helm, c.IncludeTransitiveNeeds()) + return r.state.UpdateDeps(r.helm, state.NeedsOptions{ + SkipNeeds: c.SkipRepos(), + IncludeNeeds: c.IncludeTransitiveNeeds(), + IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), + }) } func (r *Run) Repos(c ReposConfigProvider) error { diff --git a/pkg/state/selector_test.go b/pkg/state/selector_test.go index 2f749ded..737f098d 100644 --- a/pkg/state/selector_test.go +++ b/pkg/state/selector_test.go @@ -112,7 +112,11 @@ func TestSelectReleasesWithOverrides(t *testing.T) { state.Releases = state.GetReleasesWithOverrides() - rs, err := state.GetSelectedReleases(false) + rs, err := state.GetSelectedReleases(NeedsOptions{ + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + SkipNeeds: true, + }) if err != nil { t.Fatalf("%s %s: %v", tc.selector, tc.subject, err) } @@ -182,7 +186,11 @@ func TestSelectReleasesWithOverridesWithIncludedTransitives(t *testing.T) { state.Selectors = tc.selector state.Releases = state.GetReleasesWithOverrides() - rs, err := state.GetSelectedReleases(tc.includeTransitiveNeeds) + rs, err := state.GetSelectedReleases(NeedsOptions{ + IncludeNeeds: false, + IncludeTransitiveNeeds: tc.includeTransitiveNeeds, + SkipNeeds: !tc.includeTransitiveNeeds, + }) if err != nil { t.Fatalf("%s %s: %v", tc.selector, tc.subject, err) } diff --git a/pkg/state/state.go b/pkg/state/state.go index f65d29db..6042e095 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -1046,6 +1046,7 @@ type ChartPrepareOptions struct { OutputDirTemplate string IncludeTransitiveNeeds bool IncludeNeeds bool + SkipNeeds bool Concurrency int KubeVersion string Set []string @@ -1103,7 +1104,11 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre // This and releasesNeedCharts ensures that we run operations like helm-dep-build and prepare-hook calls only on // releases that are (1) selected by the selectors and (2) to be installed. - selected, err = st.GetSelectedReleases(opts.IncludeTransitiveNeeds) + selected, err = st.GetSelectedReleases(NeedsOptions{ + IncludeTransitiveNeeds: opts.IncludeTransitiveNeeds, + IncludeNeeds: opts.IncludeNeeds, + SkipNeeds: true, + }) if err != nil { return nil, []error{err} } @@ -2155,16 +2160,16 @@ func (st *HelmState) GetReleasesWithOverrides() []ReleaseSpec { return rs } -func (st *HelmState) SelectReleases(includeTransitiveNeeds bool) ([]Release, error) { +func (st *HelmState) SelectReleases(needsOptions NeedsOptions) ([]Release, error) { values := st.Values() - rs, err := markExcludedReleases(st.Releases, st.Selectors, st.CommonLabels, values, includeTransitiveNeeds) + rs, err := markExcludedReleases(st.Releases, st.Selectors, st.CommonLabels, values, needsOptions) if err != nil { return nil, err } return rs, nil } -func markExcludedReleases(releases []ReleaseSpec, selectors []string, commonLabels map[string]string, values map[string]any, includeTransitiveNeeds bool) ([]Release, error) { +func markExcludedReleases(releases []ReleaseSpec, selectors []string, commonLabels map[string]string, values map[string]any, needsOptions NeedsOptions) ([]Release, error) { var filteredReleases []Release filters := []ReleaseFilter{} for _, label := range selectors { @@ -2209,7 +2214,12 @@ func markExcludedReleases(releases []ReleaseSpec, selectors []string, commonLabe } filteredReleases = append(filteredReleases, res) } - unmarkNeeds(filteredReleases, releases, includeTransitiveNeeds) + if needsOptions.SkipNeeds { + return filteredReleases, nil + } + if needsOptions.IncludeTransitiveNeeds || needsOptions.IncludeNeeds { + unmarkNeeds(filteredReleases, releases, needsOptions.IncludeTransitiveNeeds) + } return filteredReleases, nil } @@ -2279,8 +2289,8 @@ func collectNeeds(release ReleaseSpec, allReleases []ReleaseSpec, needs map[stri } } -func (st *HelmState) GetSelectedReleases(includeTransitiveNeeds bool) ([]ReleaseSpec, error) { - filteredReleases, err := st.SelectReleases(includeTransitiveNeeds) +func (st *HelmState) GetSelectedReleases(needsOptions NeedsOptions) ([]ReleaseSpec, error) { + filteredReleases, err := st.SelectReleases(needsOptions) if err != nil { return nil, err } @@ -2295,8 +2305,8 @@ func (st *HelmState) GetSelectedReleases(includeTransitiveNeeds bool) ([]Release } // FilterReleases allows for the execution of helm commands against a subset of the releases in the helmfile. -func (st *HelmState) FilterReleases(includeTransitiveNeeds bool) error { - releases, err := st.GetSelectedReleases(includeTransitiveNeeds) +func (st *HelmState) FilterReleases(needsOptions NeedsOptions) error { + releases, err := st.GetSelectedReleases(needsOptions) if err != nil { return err } @@ -2376,7 +2386,7 @@ func (st *HelmState) ResolveDeps() (*HelmState, error) { } // UpdateDeps wrapper for updating dependencies on the releases -func (st *HelmState) UpdateDeps(helm helmexec.Interface, includeTransitiveNeeds bool) []error { +func (st *HelmState) UpdateDeps(helm helmexec.Interface, needsOptions NeedsOptions) []error { var selected []ReleaseSpec if len(st.Selectors) > 0 { @@ -2384,7 +2394,7 @@ func (st *HelmState) UpdateDeps(helm helmexec.Interface, includeTransitiveNeeds // This and releasesNeedCharts ensures that we run operations like helm-dep-build and prepare-hook calls only on // releases that are (1) selected by the selectors and (2) to be installed. - selected, err = st.GetSelectedReleases(includeTransitiveNeeds) + selected, err = st.GetSelectedReleases(needsOptions) if err != nil { return []error{err} } diff --git a/pkg/state/state_run.go b/pkg/state/state_run.go index 369d502d..ceb88b74 100644 --- a/pkg/state/state_run.go +++ b/pkg/state/state_run.go @@ -89,6 +89,12 @@ func (st *HelmState) iterateOnReleases(helm helmexec.Interface, concurrency int, return nil } +type NeedsOptions struct { + IncludeNeeds bool + IncludeTransitiveNeeds bool + SkipNeeds bool +} + type PlanOptions struct { Purpose string Reverse bool @@ -99,7 +105,11 @@ type PlanOptions struct { } func (st *HelmState) PlanReleases(opts PlanOptions) ([][]ReleaseSpec, error) { - marked, err := st.GetSelectedReleases(opts.IncludeTransitiveNeeds) + marked, err := st.GetSelectedReleases(NeedsOptions{ + IncludeNeeds: opts.IncludeNeeds, + IncludeTransitiveNeeds: opts.IncludeTransitiveNeeds, + SkipNeeds: opts.SkipNeeds, + }) if err != nil { return nil, err } diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go index 7404f5ec..847ad6a2 100644 --- a/pkg/state/state_test.go +++ b/pkg/state/state_test.go @@ -2143,7 +2143,11 @@ generated: 2019-05-16T15:42:45.50486+09:00 }) fs.Cwd = basePath state = injectFs(state, fs) - errs := state.UpdateDeps(helm, false) + errs := state.UpdateDeps(helm, NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }) want := []string{"/example", "./example", generatedDir} if !reflect.DeepEqual(helm.Charts, want) { @@ -2567,7 +2571,11 @@ func TestHelmState_NoReleaseMatched(t *testing.T) { RenderedValues: map[string]any{}, } state.Selectors = []string{tt.labels} - errs := state.FilterReleases(false) + errs := state.FilterReleases(NeedsOptions{ + SkipNeeds: true, + IncludeNeeds: false, + IncludeTransitiveNeeds: false, + }) if (errs != nil) != tt.wantErr { t.Errorf("ReleaseStatuses() for %s error = %v, wantErr %v", tt.name, errs, tt.wantErr) return