v0.9.1 introduced kubeVersion: ">=1.29.0" in Chart.yaml for the first time. This causes helm upgrade to fail on managed Kubernetes clusters (EKS, GKE, AKS) that append a provider-specific pre-release suffix to their reported version (e.g. v1.34.6-eks-bbe087e).
Root cause
Helm uses the Masterminds/semver v3 library for constraint evaluation. In that library, any version with a pre-release tag is automatically excluded from constraints that don't themselves include a pre-release tag — regardless of whether the numeric part satisfies the range. The function constraintGreaterThanEqual short-circuits on v.Prerelease() != "" && !includePre before even doing the numeric comparison. So 1.34.6-eks-bbe087e fails >=1.29.0 despite 1.34 > 1.29.
Error message:
Helm upgrade failed: chart requires kubeVersion: >=1.29.0
which is incompatible with Kubernetes v1.34.6-eks-bbe087
Fix
Change the constraint to include a pre-release anchor, which sets includePre = true for the constraint group:
# Chart.yaml
kubeVersion: ">=1.29.0-0"
The -0 is the standard semver convention for "this range includes pre-releases." This is the same pattern used by many other charts (e.g. cert-manager, ingress-nginx).
v0.9.1 introduced kubeVersion: ">=1.29.0" in Chart.yaml for the first time. This causes helm upgrade to fail on managed Kubernetes clusters (EKS, GKE, AKS) that append a provider-specific pre-release suffix to their reported version (e.g. v1.34.6-eks-bbe087e).
Root cause
Helm uses the Masterminds/semver v3 library for constraint evaluation. In that library, any version with a pre-release tag is automatically excluded from constraints that don't themselves include a pre-release tag — regardless of whether the numeric part satisfies the range. The function constraintGreaterThanEqual short-circuits on
v.Prerelease() != "" && !includePrebefore even doing the numeric comparison. So1.34.6-eks-bbe087efails>=1.29.0despite1.34 > 1.29.Error message:
Fix
Change the constraint to include a pre-release anchor, which sets includePre = true for the constraint group:
The -0 is the standard semver convention for "this range includes pre-releases." This is the same pattern used by many other charts (e.g. cert-manager, ingress-nginx).