diff --git a/Makefile b/Makefile index fe3984125..fb457dd3e 100644 --- a/Makefile +++ b/Makefile @@ -58,16 +58,6 @@ LDFLAGS += -X helm.sh/helm/v3/internal/version.gitCommit=${GIT_COMMIT} LDFLAGS += -X helm.sh/helm/v3/internal/version.gitTreeState=${GIT_DIRTY} LDFLAGS += $(EXT_LDFLAGS) -# Define constants based on the client-go version -K8S_MODULES_VER=$(subst ., ,$(subst v,,$(shell go list -f '{{.Version}}' -m k8s.io/client-go))) -K8S_MODULES_MAJOR_VER=$(shell echo $$(($(firstword $(K8S_MODULES_VER)) + 1))) -K8S_MODULES_MINOR_VER=$(word 2,$(K8S_MODULES_VER)) - -LDFLAGS += -X helm.sh/helm/v3/pkg/lint/rules.k8sVersionMajor=$(K8S_MODULES_MAJOR_VER) -LDFLAGS += -X helm.sh/helm/v3/pkg/lint/rules.k8sVersionMinor=$(K8S_MODULES_MINOR_VER) -LDFLAGS += -X helm.sh/helm/v3/pkg/chartutil.k8sVersionMajor=$(K8S_MODULES_MAJOR_VER) -LDFLAGS += -X helm.sh/helm/v3/pkg/chartutil.k8sVersionMinor=$(K8S_MODULES_MINOR_VER) - .PHONY: all all: build diff --git a/cmd/helm/lint_test.go b/cmd/helm/lint_test.go index 166b69ba0..fb36f14c0 100644 --- a/cmd/helm/lint_test.go +++ b/cmd/helm/lint_test.go @@ -80,7 +80,7 @@ func TestLintCmdWithKubeVersionFlag(t *testing.T) { // which is "20" name: "lint chart with deprecated api version without kube version", cmd: fmt.Sprintf("lint %s", testChart), - golden: "output/lint-chart-with-deprecated-api-old-k8s.txt", + golden: "output/lint-chart-with-deprecated-api.txt", wantError: false, }, { name: "lint chart with deprecated api version with older kube version", diff --git a/cmd/helm/testdata/output/template-name-template.txt b/cmd/helm/testdata/output/template-name-template.txt index 9406048dd..d51755e03 100644 --- a/cmd/helm/testdata/output/template-name-template.txt +++ b/cmd/helm/testdata/output/template-name-template.txt @@ -72,8 +72,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "foobar-ywjj-baz" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-set.txt b/cmd/helm/testdata/output/template-set.txt index 4040991cf..d7a754e59 100644 --- a/cmd/helm/testdata/output/template-set.txt +++ b/cmd/helm/testdata/output/template-set.txt @@ -72,8 +72,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-show-only-multiple.txt b/cmd/helm/testdata/output/template-show-only-multiple.txt index 1aac3081a..f95f41f1c 100644 --- a/cmd/helm/testdata/output/template-show-only-multiple.txt +++ b/cmd/helm/testdata/output/template-show-only-multiple.txt @@ -8,8 +8,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-show-only-one.txt b/cmd/helm/testdata/output/template-show-only-one.txt index 9cc34f515..ee04a2f8e 100644 --- a/cmd/helm/testdata/output/template-show-only-one.txt +++ b/cmd/helm/testdata/output/template-show-only-one.txt @@ -8,8 +8,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-skip-tests.txt b/cmd/helm/testdata/output/template-skip-tests.txt index 5c907b563..ef2405086 100644 --- a/cmd/helm/testdata/output/template-skip-tests.txt +++ b/cmd/helm/testdata/output/template-skip-tests.txt @@ -72,8 +72,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-subchart-cm-set-file.txt b/cmd/helm/testdata/output/template-subchart-cm-set-file.txt index 56844e292..2c559dee5 100644 --- a/cmd/helm/testdata/output/template-subchart-cm-set-file.txt +++ b/cmd/helm/testdata/output/template-subchart-cm-set-file.txt @@ -80,8 +80,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-subchart-cm-set.txt b/cmd/helm/testdata/output/template-subchart-cm-set.txt index e52f7c234..b90592266 100644 --- a/cmd/helm/testdata/output/template-subchart-cm-set.txt +++ b/cmd/helm/testdata/output/template-subchart-cm-set.txt @@ -80,8 +80,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-subchart-cm.txt b/cmd/helm/testdata/output/template-subchart-cm.txt index 9cc9e2296..1c039de14 100644 --- a/cmd/helm/testdata/output/template-subchart-cm.txt +++ b/cmd/helm/testdata/output/template-subchart-cm.txt @@ -80,8 +80,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-values-files.txt b/cmd/helm/testdata/output/template-values-files.txt index 4040991cf..d7a754e59 100644 --- a/cmd/helm/testdata/output/template-values-files.txt +++ b/cmd/helm/testdata/output/template-values-files.txt @@ -72,8 +72,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template-with-api-version.txt b/cmd/helm/testdata/output/template-with-api-version.txt index 7e1c35001..dbbdc2667 100644 --- a/cmd/helm/testdata/output/template-with-api-version.txt +++ b/cmd/helm/testdata/output/template-with-api-version.txt @@ -72,8 +72,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" kube-api-version/test: v1 spec: type: ClusterIP diff --git a/cmd/helm/testdata/output/template-with-crds.txt b/cmd/helm/testdata/output/template-with-crds.txt index 256fc7c3b..26c616237 100644 --- a/cmd/helm/testdata/output/template-with-crds.txt +++ b/cmd/helm/testdata/output/template-with-crds.txt @@ -89,8 +89,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/cmd/helm/testdata/output/template.txt b/cmd/helm/testdata/output/template.txt index 58c480b47..0fff81d3e 100644 --- a/cmd/helm/testdata/output/template.txt +++ b/cmd/helm/testdata/output/template.txt @@ -72,8 +72,8 @@ metadata: helm.sh/chart: "subchart-0.1.0" app.kubernetes.io/instance: "release-name" kube-version/major: "1" - kube-version/minor: "20" - kube-version/version: "v1.20.0" + kube-version/minor: "30" + kube-version/version: "v1.30.0" spec: type: ClusterIP ports: diff --git a/pkg/chartutil/capabilities.go b/pkg/chartutil/capabilities.go index 48fab0ea4..b6c5592f7 100644 --- a/pkg/chartutil/capabilities.go +++ b/pkg/chartutil/capabilities.go @@ -17,6 +17,7 @@ package chartutil import ( "fmt" + "runtime/debug" "strconv" "github.com/Masterminds/semver/v3" @@ -38,15 +39,7 @@ var ( DefaultVersionSet = allKnownVersions() // DefaultCapabilities is the default set of capabilities. - DefaultCapabilities = &Capabilities{ - KubeVersion: KubeVersion{ - Version: fmt.Sprintf("v%s.%s.0", k8sVersionMajor, k8sVersionMinor), - Major: k8sVersionMajor, - Minor: k8sVersionMinor, - }, - APIVersions: DefaultVersionSet, - HelmVersion: helmversion.Get(), - } + DefaultCapabilities *Capabilities ) // Capabilities describes the capabilities of the Kubernetes cluster. @@ -124,3 +117,35 @@ func allKnownVersions() VersionSet { } return vs } + +func k8sClientVersion() (*semver.Version, bool) { + info, ok := debug.ReadBuildInfo() + if !ok { + return nil, false + } + for _, m := range info.Deps { + if m.Path != "k8s.io/client-go" { + continue + } + v, err := semver.NewVersion(m.Version) + return v, err == nil + } + return nil, false +} + +func init() { + if v, ok := k8sClientVersion(); ok { + k8sVersionMajor = fmt.Sprintf("%d", v.Major()+1) + k8sVersionMinor = fmt.Sprintf("%d", v.Minor()) + } + + DefaultCapabilities = &Capabilities{ + KubeVersion: KubeVersion{ + Version: fmt.Sprintf("v%s.%s.0", k8sVersionMajor, k8sVersionMinor), + Major: k8sVersionMajor, + Minor: k8sVersionMinor, + }, + APIVersions: DefaultVersionSet, + HelmVersion: helmversion.Get(), + } +} diff --git a/pkg/lint/rules/deprecations.go b/pkg/lint/rules/deprecations.go index 90e7748a4..32c72bff9 100644 --- a/pkg/lint/rules/deprecations.go +++ b/pkg/lint/rules/deprecations.go @@ -28,14 +28,6 @@ import ( "helm.sh/helm/v3/pkg/chartutil" ) -var ( - // This should be set in the Makefile based on the version of client-go being imported. - // These constants will be overwritten with LDFLAGS. The version components must be - // strings in order for LDFLAGS to set them. - k8sVersionMajor = "1" - k8sVersionMinor = "20" -) - // deprecatedAPIError indicates than an API is deprecated in Kubernetes type deprecatedAPIError struct { Deprecated string @@ -56,12 +48,8 @@ func validateNoDeprecations(resource *K8sYamlStruct, kubeVersion *chartutil.Kube return nil } - majorVersion := k8sVersionMajor - minorVersion := k8sVersionMinor - - if kubeVersion != nil { - majorVersion = kubeVersion.Major - minorVersion = kubeVersion.Minor + if kubeVersion == nil { + kubeVersion = &chartutil.DefaultCapabilities.KubeVersion } runtimeObject, err := resourceToRuntimeObject(resource) @@ -73,11 +61,11 @@ func validateNoDeprecations(resource *K8sYamlStruct, kubeVersion *chartutil.Kube return err } - maj, err := strconv.Atoi(majorVersion) + maj, err := strconv.Atoi(kubeVersion.Major) if err != nil { return err } - min, err := strconv.Atoi(minorVersion) + min, err := strconv.Atoi(kubeVersion.Minor) if err != nil { return err }