mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-17 15:23:17 +02:00
feat: add helm 4 --server-side flag support for diff and bump helm-diff to v3.15.10 (#2645)
Add appendServerSideFlagsForDiff to validate helm-diff plugin version (v3.15.10+) before passing the --server-side flag to helm diff upgrade. Extract resolveServerSideValue helper to share precedence logic between upgrade and diff paths. Bump helm-diff recommended version to v3.15.10 across Dockerfiles, CI, and integration scripts. Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
+1
-1
@@ -19,7 +19,7 @@ import (
|
||||
|
||||
const (
|
||||
HelmRequiredVersion = "v3.18.6" // Minimum required version (supports Helm 3.x and 4.x)
|
||||
HelmDiffRecommendedVersion = "v3.15.9"
|
||||
HelmDiffRecommendedVersion = "v3.15.10"
|
||||
HelmRecommendedVersion = "v4.2.1" // Recommended Helm 4 version
|
||||
HelmSecretsRecommendedVersion = "v4.7.4" // v4.7.0+ works with both Helm 3 (single plugin) and Helm 4 (split plugin architecture)
|
||||
HelmGitRecommendedVersion = "v1.3.0"
|
||||
|
||||
+17
-9
@@ -357,6 +357,21 @@ func (st *HelmState) appendTakeOwnershipFlagsForUpgrade(flags []string, helm hel
|
||||
// validServerSideValues are the allowed values for the helm 4 --server-side flag.
|
||||
var validServerSideValues = map[string]struct{}{"true": {}, "false": {}, "auto": {}}
|
||||
|
||||
// resolveServerSideValue resolves the server-side value following precedence:
|
||||
// release-level > CLI flag > helmDefaults. Returns empty string if no value is configured.
|
||||
func (st *HelmState) resolveServerSideValue(release *ReleaseSpec, serverSide string) string {
|
||||
switch {
|
||||
case release.ServerSide != nil && *release.ServerSide != "":
|
||||
return *release.ServerSide
|
||||
case serverSide != "":
|
||||
return serverSide
|
||||
case st.HelmDefaults.ServerSide != nil && *st.HelmDefaults.ServerSide != "":
|
||||
return *st.HelmDefaults.ServerSide
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
// appendServerSideFlagsForUpgrade appends the helm 4 --server-side flag when appropriate.
|
||||
// Precedence: release-level > CLI flag > helmDefaults.
|
||||
func (st *HelmState) appendServerSideFlagsForUpgrade(flags []string, helm helmexec.Interface, release *ReleaseSpec, serverSide string) ([]string, error) {
|
||||
@@ -372,15 +387,8 @@ func (st *HelmState) appendServerSideFlagsForUpgrade(flags []string, helm helmex
|
||||
return flags, nil
|
||||
}
|
||||
|
||||
var value string
|
||||
switch {
|
||||
case release.ServerSide != nil && *release.ServerSide != "":
|
||||
value = *release.ServerSide
|
||||
case serverSide != "":
|
||||
value = serverSide
|
||||
case st.HelmDefaults.ServerSide != nil && *st.HelmDefaults.ServerSide != "":
|
||||
value = *st.HelmDefaults.ServerSide
|
||||
default:
|
||||
value := st.resolveServerSideValue(release, serverSide)
|
||||
if value == "" {
|
||||
return flags, nil
|
||||
}
|
||||
|
||||
|
||||
+22
-1
@@ -4019,7 +4019,7 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec,
|
||||
}
|
||||
|
||||
// append server-side flag
|
||||
flags, err = st.appendServerSideFlagsForUpgrade(flags, helm, release, serverSide)
|
||||
flags, err = st.appendServerSideFlagsForDiff(flags, helm, release, serverSide, pluginsDir)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@@ -4058,6 +4058,27 @@ func (st *HelmState) appendTakeOwnershipFlagsForDiff(flags []string, release *Re
|
||||
return flags, nil
|
||||
}
|
||||
|
||||
// appendServerSideFlagsForDiff appends the helm 4 --server-side flag for helm-diff.
|
||||
// It requires helm-diff plugin version v3.15.10 or later.
|
||||
func (st *HelmState) appendServerSideFlagsForDiff(flags []string, helm helmexec.Interface, release *ReleaseSpec, serverSide string, pluginsDir string) ([]string, error) {
|
||||
if helm.IsHelm4() {
|
||||
value := st.resolveServerSideValue(release, serverSide)
|
||||
if value != "" {
|
||||
diffVersion, err := helmexec.GetPluginVersion("diff", pluginsDir)
|
||||
if err != nil {
|
||||
return flags, err
|
||||
}
|
||||
minVersion, _ := semver.NewVersion("v3.15.10")
|
||||
|
||||
if diffVersion.LessThan(minVersion) {
|
||||
return flags, fmt.Errorf("server-side is not supported by helm-diff plugin version %s, please use at least v3.15.10", diffVersion)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return st.appendServerSideFlagsForUpgrade(flags, helm, release, serverSide)
|
||||
}
|
||||
|
||||
func (st *HelmState) appendChartVersionFlags(flags []string, release *ReleaseSpec) []string {
|
||||
version := release.Version
|
||||
// Strip OCI digest from version (digest is handled in chart URL, not --version flag)
|
||||
|
||||
Reference in New Issue
Block a user