diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index eef441da..448fecb9 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -147,7 +147,7 @@ jobs: with: name: built-binaries-${{ github.run_id }} - name: install semver - run: go install github.com/ffurrer2/semver/v2/cmd/semver@latest + run: go install github.com/ffurrer2/semver/v2/cmd/semver@v2.12.0 - name: Extract tar to get built binaries run: tar -xvf built-binaries.tar - name: Display built binaries diff --git a/pkg/state/helmx.go b/pkg/state/helmx.go index 779bffd2..988afc08 100644 --- a/pkg/state/helmx.go +++ b/pkg/state/helmx.go @@ -257,6 +257,9 @@ func (st *HelmState) appendCascadeFlags(flags []string, helm helmexec.Interface, // append hide-notes flags to helm flags func (st *HelmState) appendHideNotesFlags(flags []string, helm helmexec.Interface, ops *SyncOpts) []string { + if ops == nil { + return flags + } // see https://github.com/helm/helm/releases/tag/v3.16.0 if !helm.IsVersionAtLeast("3.16.0") { return flags diff --git a/pkg/state/helmx_test.go b/pkg/state/helmx_test.go index 80b8d5fe..d4cab5ff 100644 --- a/pkg/state/helmx_test.go +++ b/pkg/state/helmx_test.go @@ -442,6 +442,15 @@ func TestAppendHideNotesFlags(t *testing.T) { expected: []string{"--hide-notes"}, }, }, + { + name: "no hide-notes when ops is nil", + args: args{ + flags: []string{}, + helm: testutil.NewVersionHelmExec("3.16.0"), + opt: nil, + expected: []string{}, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/pkg/state/state.go b/pkg/state/state.go index 046031e0..431864ea 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -3451,8 +3451,12 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp flags = append(flags, st.timeoutFlags(release, opt)...) - if release.Force != nil && *release.Force || release.Force == nil && st.HelmDefaults.Force { - flags = append(flags, "--force") + if (release.Force != nil && *release.Force) || (release.Force == nil && st.HelmDefaults.Force) { + if helm.IsHelm4() { + flags = append(flags, "--force-replace") + } else { + flags = append(flags, "--force") + } } if release.RecreatePods != nil && *release.RecreatePods || release.RecreatePods == nil && st.HelmDefaults.RecreatePods { diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go index 21e51643..9fc5d893 100644 --- a/pkg/state/state_test.go +++ b/pkg/state/state_test.go @@ -261,10 +261,12 @@ func TestHelmState_flagsForUpgrade(t *testing.T) { }, }, { - name: "force", + name: "force-helm3", defaults: HelmSpec{ - Force: false, + Force: false, + CreateNamespace: &disable, }, + version: semver.MustParse("3.10.0"), release: &ReleaseSpec{ Chart: "test/chart", Version: "0.1", @@ -279,10 +281,32 @@ func TestHelmState_flagsForUpgrade(t *testing.T) { }, }, { - name: "force-from-default", + name: "force-helm4", defaults: HelmSpec{ - Force: true, + Force: false, + CreateNamespace: &disable, }, + version: semver.MustParse("4.0.0"), + release: &ReleaseSpec{ + Chart: "test/chart", + Version: "0.1", + Force: &enable, + Name: "test-charts", + Namespace: "test-namespace", + }, + want: []string{ + "--version", "0.1", + "--force-replace", + "--namespace", "test-namespace", + }, + }, + { + name: "force-from-default-helm3", + defaults: HelmSpec{ + Force: true, + CreateNamespace: &disable, + }, + version: semver.MustParse("3.10.0"), release: &ReleaseSpec{ Chart: "test/chart", Version: "0.1", @@ -295,6 +319,63 @@ func TestHelmState_flagsForUpgrade(t *testing.T) { "--namespace", "test-namespace", }, }, + { + name: "force-from-default-helm4", + defaults: HelmSpec{ + Force: true, + CreateNamespace: &disable, + }, + version: semver.MustParse("4.0.0"), + release: &ReleaseSpec{ + Chart: "test/chart", + Version: "0.1", + Force: &disable, + Name: "test-charts", + Namespace: "test-namespace", + }, + want: []string{ + "--version", "0.1", + "--namespace", "test-namespace", + }, + }, + { + name: "force-from-default-nil-force-helm3", + defaults: HelmSpec{ + Force: true, + CreateNamespace: &disable, + }, + version: semver.MustParse("3.10.0"), + release: &ReleaseSpec{ + Chart: "test/chart", + Version: "0.1", + Name: "test-charts", + Namespace: "test-namespace", + }, + want: []string{ + "--version", "0.1", + "--force", + "--namespace", "test-namespace", + }, + }, + { + name: "force-from-default-nil-force-helm4", + defaults: HelmSpec{ + Force: true, + CreateNamespace: &disable, + }, + version: semver.MustParse("4.0.0"), + release: &ReleaseSpec{ + Chart: "test/chart", + Version: "0.1", + Name: "test-charts", + Namespace: "test-namespace", + }, + want: []string{ + "--version", "0.1", + "--force-replace", + "--namespace", "test-namespace", + }, + }, { name: "recreate-pods", defaults: HelmSpec{