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:
parent
6191f821eb
commit
bbceb05b31
|
|
@ -96,35 +96,35 @@ jobs:
|
|||
- helm-version: v3.18.6
|
||||
kustomize-version: v5.8.0
|
||||
plugin-secrets-version: 4.7.4
|
||||
plugin-diff-version: 3.15.9
|
||||
plugin-diff-version: 3.15.10
|
||||
extra-helmfile-flags: ''
|
||||
# In case you need to test some optional helmfile features,
|
||||
# enable it via extra-helmfile-flags below.
|
||||
- helm-version: v3.18.6
|
||||
kustomize-version: v5.8.0
|
||||
plugin-secrets-version: 4.7.4
|
||||
plugin-diff-version: 3.15.9
|
||||
plugin-diff-version: 3.15.10
|
||||
extra-helmfile-flags: '--enable-live-output'
|
||||
- helm-version: v3.21.1
|
||||
kustomize-version: v5.8.0
|
||||
plugin-secrets-version: 4.7.4
|
||||
plugin-diff-version: 3.15.9
|
||||
plugin-diff-version: 3.15.10
|
||||
extra-helmfile-flags: ''
|
||||
- helm-version: v3.21.1
|
||||
kustomize-version: v5.8.0
|
||||
plugin-secrets-version: 4.7.4
|
||||
plugin-diff-version: 3.15.9
|
||||
plugin-diff-version: 3.15.10
|
||||
extra-helmfile-flags: '--enable-live-output'
|
||||
# Helmfile now supports both Helm 3.x and Helm 4.x
|
||||
- helm-version: v4.2.1
|
||||
kustomize-version: v5.8.0
|
||||
plugin-secrets-version: 4.7.4
|
||||
plugin-diff-version: 3.15.9
|
||||
plugin-diff-version: 3.15.10
|
||||
extra-helmfile-flags: ''
|
||||
- helm-version: v4.2.1
|
||||
kustomize-version: v5.8.0
|
||||
plugin-secrets-version: 4.7.4
|
||||
plugin-diff-version: 3.15.9
|
||||
plugin-diff-version: 3.15.10
|
||||
extra-helmfile-flags: '--enable-live-output'
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ RUN set -x && \
|
|||
[ "$(age-keygen --version)" = "${AGE_VERSION}" ]
|
||||
|
||||
ARG HELM_SECRETS_VERSION="4.7.4"
|
||||
RUN helm plugin install https://github.com/databus23/helm-diff --version v3.15.9 --verify=false && \
|
||||
RUN helm plugin install https://github.com/databus23/helm-diff --version v3.15.10 --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-getter-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-post-renderer-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ RUN set -x && \
|
|||
[ "$(age-keygen --version)" = "${AGE_VERSION}" ]
|
||||
|
||||
ARG HELM_SECRETS_VERSION="4.7.4"
|
||||
RUN helm plugin install https://github.com/databus23/helm-diff --version v3.15.9 --verify=false && \
|
||||
RUN helm plugin install https://github.com/databus23/helm-diff --version v3.15.10 --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-getter-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-post-renderer-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ RUN set -x && \
|
|||
[ "$(age-keygen --version)" = "${AGE_VERSION}" ]
|
||||
|
||||
ARG HELM_SECRETS_VERSION="4.7.4"
|
||||
RUN helm plugin install https://github.com/databus23/helm-diff --version v3.15.9 --verify=false && \
|
||||
RUN helm plugin install https://github.com/databus23/helm-diff --version v3.15.10 --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-getter-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
helm plugin install https://github.com/jkroepke/helm-secrets/releases/download/v${HELM_SECRETS_VERSION}/secrets-post-renderer-${HELM_SECRETS_VERSION}.tgz --verify=false && \
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export HELM_DATA_HOME="${helm_dir}/data"
|
|||
export HELM_HOME="${HELM_DATA_HOME}"
|
||||
export HELM_PLUGINS="${HELM_DATA_HOME}/plugins"
|
||||
export HELM_CONFIG_HOME="${helm_dir}/config"
|
||||
HELM_DIFF_VERSION="${HELM_DIFF_VERSION:-3.15.9}"
|
||||
HELM_DIFF_VERSION="${HELM_DIFF_VERSION:-3.15.10}"
|
||||
HELM_GIT_VERSION="${HELM_GIT_VERSION:-1.4.1}"
|
||||
HELM_SECRETS_VERSION="${HELM_SECRETS_VERSION:-4.7.4}"
|
||||
export GNUPGHOME="${PWD}/${dir}/.gnupg"
|
||||
|
|
|
|||
Loading…
Reference in New Issue