From ca5c9362f607d4c2ab60fdc35b35de7f7fb4c671 Mon Sep 17 00:00:00 2001 From: Developer Date: Fri, 29 May 2026 02:38:25 +0000 Subject: [PATCH] feat: reintroduce build-time ldflags for k8s.io/client-go version override Non-standard build toolchains (Bazel) cannot use debug.ReadBuildInfo(), so add -X ldflags variables (kubeClientVersionMajorOverride, kubeClientVersionMinorOverride) that take precedence when set. This partially reverts the approach from PR #31296, allowing Bazel builds to specify the client-go version without relying on debug.BuildInfo. Signed-off-by: Md Mushfiqur Rahim Signed-off-by: Developer --- internal/version/clientgo.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/internal/version/clientgo.go b/internal/version/clientgo.go index 4cc10b9a0..1e98a8292 100644 --- a/internal/version/clientgo.go +++ b/internal/version/clientgo.go @@ -18,15 +18,30 @@ package version import ( "errors" + "fmt" "runtime/debug" "slices" _ "k8s.io/client-go/kubernetes" // Force k8s.io/client-go to be included in the build ) +var ( + // kubeClientVersionMajorOverride and kubeClientVersionMinorOverride can be + // set via -X ldflags to specify the k8s.io/client-go version in non-standard + // builds (e.g., Bazel) where debug.ReadBuildInfo() is not available. + // Example: -X helm.sh/helm/v4/internal/version.kubeClientVersionMajorOverride=0 + // -X helm.sh/helm/v4/internal/version.kubeClientVersionMinorOverride=30 + kubeClientVersionMajorOverride = "" + kubeClientVersionMinorOverride = "" +) + func K8sIOClientGoModVersion() (string, error) { + if kubeClientVersionMajorOverride != "" && kubeClientVersionMinorOverride != "" { + return fmt.Sprintf("v%s.%s.0", kubeClientVersionMajorOverride, kubeClientVersionMinorOverride), nil + } + info, ok := debug.ReadBuildInfo() - if !ok || info == nil { + if !ok { return "", errors.New("failed to read build info") }