diff --git a/pkg/chart/v2/util/capabilities.go b/pkg/chart/v2/util/capabilities.go index 23b6d46fa..19d62c5e3 100644 --- a/pkg/chart/v2/util/capabilities.go +++ b/pkg/chart/v2/util/capabilities.go @@ -20,11 +20,11 @@ import ( "slices" "strconv" - "github.com/Masterminds/semver/v3" "k8s.io/client-go/kubernetes/scheme" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + k8sversion "k8s.io/apimachinery/pkg/util/version" helmversion "helm.sh/helm/v4/internal/version" ) @@ -85,14 +85,16 @@ func (kv *KubeVersion) GitVersion() string { return kv.Version } // ParseKubeVersion parses kubernetes version from string func ParseKubeVersion(version string) (*KubeVersion, error) { - sv, err := semver.NewVersion(version) + // Based on the original k8s version parser. + // https://github.com/kubernetes/kubernetes/blob/b266ac2c3e42c2c4843f81e20213d2b2f43e450a/staging/src/k8s.io/apimachinery/pkg/util/version/version.go#L137 + sv, err := k8sversion.ParseGeneric(version) if err != nil { return nil, err } return &KubeVersion{ Version: "v" + sv.String(), - Major: strconv.FormatUint(sv.Major(), 10), - Minor: strconv.FormatUint(sv.Minor(), 10), + Major: strconv.FormatUint(uint64(sv.Major()), 10), + Minor: strconv.FormatUint(uint64(sv.Minor()), 10), }, nil } diff --git a/pkg/chart/v2/util/capabilities_test.go b/pkg/chart/v2/util/capabilities_test.go index aa9be9db8..e5513b3fd 100644 --- a/pkg/chart/v2/util/capabilities_test.go +++ b/pkg/chart/v2/util/capabilities_test.go @@ -82,3 +82,19 @@ func TestParseKubeVersion(t *testing.T) { t.Errorf("Expected parsed KubeVersion.Minor to be 16, got %q", kv.Minor) } } + +func TestParseKubeVersionSuffix(t *testing.T) { + kv, err := ParseKubeVersion("v1.28+") + if err != nil { + t.Errorf("Expected v1.28+ to parse successfully") + } + if kv.Version != "v1.28" { + t.Errorf("Expected parsed KubeVersion.Version to be v1.28, got %q", kv.String()) + } + if kv.Major != "1" { + t.Errorf("Expected parsed KubeVersion.Major to be 1, got %q", kv.Major) + } + if kv.Minor != "28" { + t.Errorf("Expected parsed KubeVersion.Minor to be 28, got %q", kv.Minor) + } +}