fix: honor release-level syncReleaseLabels false (#2839)

* fix: honor release-level syncReleaseLabels false

An explicit release syncReleaseLabels false now prevents helmDefaults from
adding --labels. Unset releases still inherit the default, and the
command-line flag still takes precedence.

Signed-off-by: spicysharkco <321699413+spicysharkco@users.noreply.github.com>

* test: set HelmDefaults through the promoted field

Applies the go fix modernizer rewrite the lint job checks for.

Signed-off-by: spicysharkco <321699413+spicysharkco@users.noreply.github.com>

---------

Signed-off-by: spicysharkco <321699413+spicysharkco@users.noreply.github.com>
This commit is contained in:
Spicy Shark
2026-10-21 18:04:32 +08:00
committed by GitHub
parent 0d5311ba4d
commit dfce9cf570
2 changed files with 52 additions and 1 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ func (st *HelmState) appendLabelsFlags(flags []string, helm helmexec.Interface,
case syncReleaseLabels:
isSyncReleaseLabels = true
// Check if SyncReleaseLabels is true in HelmDefaults.
case st.HelmDefaults.SyncReleaseLabels != nil && *st.HelmDefaults.SyncReleaseLabels:
case release.SyncReleaseLabels == nil && st.HelmDefaults.SyncReleaseLabels != nil && *st.HelmDefaults.SyncReleaseLabels:
isSyncReleaseLabels = true
}
if isSyncReleaseLabels {
+51
View File
@@ -14,6 +14,57 @@ import (
"github.com/helmfile/helmfile/pkg/yaml"
)
func TestAppendLabelsFlags(t *testing.T) {
enabled := true
disabled := false
tests := []struct {
name string
defaults *bool
release *bool
fromCLI bool
expected []string
}{
{
name: "release false overrides helm defaults",
defaults: &enabled,
release: &disabled,
expected: []string{},
},
{
name: "helm defaults applies when release is unset",
defaults: &enabled,
expected: []string{"--labels", "app=test"},
},
{
name: "release true overrides helm defaults",
defaults: &disabled,
release: &enabled,
expected: []string{"--labels", "app=test"},
},
{
name: "does not append labels when unset",
expected: []string{},
},
{
name: "cli flag overrides release false",
release: &disabled,
fromCLI: true,
expected: []string{"--labels", "app=test"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
st := &HelmState{HelmDefaults: HelmSpec{SyncReleaseLabels: tt.defaults}}
release := &ReleaseSpec{SyncReleaseLabels: tt.release, Labels: map[string]string{"app": "test"}}
got := st.appendLabelsFlags([]string{}, testutil.NewVersionHelmExec("3.13.0"), release, tt.fromCLI)
require.Equal(t, tt.expected, got)
})
}
}
func TestAppendWaitForJobsFlags(t *testing.T) {
tests := []struct {
name string