build: set kube version via `debug.BuildInfo`

Signed-off-by: Branch Vincent <branchevincent@gmail.com>
pull/13180/head
Branch Vincent 1 year ago
parent cd71a359bf
commit f09a9b92bd
No known key found for this signature in database

@ -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 += -X helm.sh/helm/v3/internal/version.gitTreeState=${GIT_DIRTY}
LDFLAGS += $(EXT_LDFLAGS) 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 .PHONY: all
all: build all: build

@ -80,7 +80,7 @@ func TestLintCmdWithKubeVersionFlag(t *testing.T) {
// which is "20" // which is "20"
name: "lint chart with deprecated api version without kube version", name: "lint chart with deprecated api version without kube version",
cmd: fmt.Sprintf("lint %s", testChart), 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, wantError: false,
}, { }, {
name: "lint chart with deprecated api version with older kube version", name: "lint chart with deprecated api version with older kube version",

@ -72,8 +72,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "foobar-ywjj-baz" app.kubernetes.io/instance: "foobar-ywjj-baz"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -72,8 +72,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -8,8 +8,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -8,8 +8,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -72,8 +72,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -80,8 +80,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -80,8 +80,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -80,8 +80,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -72,8 +72,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -72,8 +72,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
kube-api-version/test: v1 kube-api-version/test: v1
spec: spec:
type: ClusterIP type: ClusterIP

@ -89,8 +89,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -72,8 +72,8 @@ metadata:
helm.sh/chart: "subchart-0.1.0" helm.sh/chart: "subchart-0.1.0"
app.kubernetes.io/instance: "release-name" app.kubernetes.io/instance: "release-name"
kube-version/major: "1" kube-version/major: "1"
kube-version/minor: "20" kube-version/minor: "30"
kube-version/version: "v1.20.0" kube-version/version: "v1.30.0"
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:

@ -17,6 +17,7 @@ package chartutil
import ( import (
"fmt" "fmt"
"runtime/debug"
"strconv" "strconv"
"github.com/Masterminds/semver/v3" "github.com/Masterminds/semver/v3"
@ -38,15 +39,7 @@ var (
DefaultVersionSet = allKnownVersions() DefaultVersionSet = allKnownVersions()
// DefaultCapabilities is the default set of capabilities. // DefaultCapabilities is the default set of capabilities.
DefaultCapabilities = &Capabilities{ DefaultCapabilities *Capabilities
KubeVersion: KubeVersion{
Version: fmt.Sprintf("v%s.%s.0", k8sVersionMajor, k8sVersionMinor),
Major: k8sVersionMajor,
Minor: k8sVersionMinor,
},
APIVersions: DefaultVersionSet,
HelmVersion: helmversion.Get(),
}
) )
// Capabilities describes the capabilities of the Kubernetes cluster. // Capabilities describes the capabilities of the Kubernetes cluster.
@ -124,3 +117,35 @@ func allKnownVersions() VersionSet {
} }
return vs 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(),
}
}

@ -28,14 +28,6 @@ import (
"helm.sh/helm/v3/pkg/chartutil" "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 // deprecatedAPIError indicates than an API is deprecated in Kubernetes
type deprecatedAPIError struct { type deprecatedAPIError struct {
Deprecated string Deprecated string
@ -56,12 +48,8 @@ func validateNoDeprecations(resource *K8sYamlStruct, kubeVersion *chartutil.Kube
return nil return nil
} }
majorVersion := k8sVersionMajor if kubeVersion == nil {
minorVersion := k8sVersionMinor kubeVersion = &chartutil.DefaultCapabilities.KubeVersion
if kubeVersion != nil {
majorVersion = kubeVersion.Major
minorVersion = kubeVersion.Minor
} }
runtimeObject, err := resourceToRuntimeObject(resource) runtimeObject, err := resourceToRuntimeObject(resource)
@ -73,11 +61,11 @@ func validateNoDeprecations(resource *K8sYamlStruct, kubeVersion *chartutil.Kube
return err return err
} }
maj, err := strconv.Atoi(majorVersion) maj, err := strconv.Atoi(kubeVersion.Major)
if err != nil { if err != nil {
return err return err
} }
min, err := strconv.Atoi(minorVersion) min, err := strconv.Atoi(kubeVersion.Minor)
if err != nil { if err != nil {
return err return err
} }

Loading…
Cancel
Save