kubernetes/kops · error
error parsing version %q: %w
Error message
error parsing version %q: %w
What it means
ParseVersion parses a package/app version string with strict semver.Parse and wraps any failure with the input string quoted. It is stricter than ParseKubernetesVersion (no tolerant mode, no URL fallback), so values like '1.23' (missing patch) fail. Called by GetPackageVersion when resolving nodeup package versions.
Source
Thrown at pkg/apis/kops/util/versions.go:72
}
// Ignore Pre & Build fields
k8sVersion.Pre = nil
k8sVersion.Build = nil
return k8sVersion.GTE(*parsedVersion)
}
// Version is our helper type for semver versions.
type Version struct {
v semver.Version
}
// ParseVersion parses the semver version string into a Version.
func ParseVersion(s string) (*Version, error) {
v, err := semver.Parse(s)
if err != nil {
return nil, fmt.Errorf("error parsing version %q: %w", s, err)
}
return &Version{v: v}, nil
}
// String returns a string representation of the object
func (v *Version) String() string {
return v.v.String()
}
// IsInRange checks if we are in the provided semver range
func (v *Version) IsInRange(semverRange semver.Range) bool {
return semverRange(v.v)
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Provide a complete three-part semver string (e.g. 1.23.0 instead of 1.23)
- Trim whitespace/newlines from the version string before parsing
- If the version may be abbreviated, append '.0' to fill the patch segment first
- Use semver.ParseTolerant-equivalent preprocessing or kops' tolerant parsers when available
Example fix
// before
v, err := ParseVersion("1.23")
// after
v, err := ParseVersion("1.23.0") Defensive patterns
Strategy: validation
Validate before calling
if !strings.Contains(version, ".") || len(strings.Split(version, ".")) < 3 {
version += ".0" // normalize '1.23' -> '1.23.0'
}
if _, err := semver.Parse(version); err != nil {
return fmt.Errorf("not strict semver: %q", version)
} Type guard
func isStrictSemver(s string) bool {
_, err := semver.Parse(strings.TrimSpace(s))
return err == nil
} Try / catch
v, err := util.ParseVersion(raw)
if err != nil {
if strings.Contains(err.Error(), "error parsing version") {
return fmt.Errorf("package version %q must be full MAJOR.MINOR.PATCH", raw)
}
return err
} Prevention
- Always use full three-part versions for package/asset inputs
- Trim whitespace and newlines from values read from files or env vars
- Test prerelease/build suffixes against strict semver rules before use
- Prefer the tolerant parsers in pkg/apis/kops/util for user-supplied versions
When it happens
Trigger: Calling ParseVersion or GetPackageVersion with a string that is not a full MAJOR.MINOR.PATCH semver, e.g. '1.23', 'v1.23.0-beta+x' with invalid prerelease/build syntax, or an empty string.
Common situations: Asset/package configuration using abbreviated versions ('1.23'); version read from a file or env var containing whitespace or a newline; pre-release/build metadata strings that violate strict semver grammar.
Related errors
- error parsing version %q for package %q
- error parsing version %q: %v
- failed to parse kubernetes version (%s): %w
- unable to parse kubernetes version %q
- cannot parse kubernetes version %q
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/efdf9e6432822499.
Report an issue: GitHub.