{"record":{"id":"efdf9e6432822499","repo":"kubernetes/kops","slug":"error-parsing-version-q-w","errorCode":null,"errorMessage":"error parsing version %q: %w","messagePattern":"error parsing version %q: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/apis/kops/util/versions.go","lineNumber":72,"sourceCode":"\t}\n\n\t// Ignore Pre & Build fields\n\tk8sVersion.Pre = nil\n\tk8sVersion.Build = nil\n\n\treturn k8sVersion.GTE(*parsedVersion)\n}\n\n// Version is our helper type for semver versions.\ntype Version struct {\n\tv semver.Version\n}\n\n// ParseVersion parses the semver version string into a Version.\nfunc ParseVersion(s string) (*Version, error) {\n\tv, err := semver.Parse(s)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing version %q: %w\", s, err)\n\t}\n\treturn &Version{v: v}, nil\n}\n\n// String returns a string representation of the object\nfunc (v *Version) String() string {\n\treturn v.v.String()\n}\n\n// IsInRange checks if we are in the provided semver range\nfunc (v *Version) IsInRange(semverRange semver.Range) bool {\n\treturn semverRange(v.v)\n}\n","sourceCodeStart":54,"sourceCodeEnd":86,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/apis/kops/util/versions.go#L54-L86","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nv, err := ParseVersion(\"1.23\")\n// after\nv, err := ParseVersion(\"1.23.0\")","handlingStrategy":"validation","validationCode":"if !strings.Contains(version, \".\") || len(strings.Split(version, \".\")) < 3 {\n    version += \".0\" // normalize '1.23' -> '1.23.0'\n}\nif _, err := semver.Parse(version); err != nil {\n    return fmt.Errorf(\"not strict semver: %q\", version)\n}","typeGuard":"func isStrictSemver(s string) bool {\n    _, err := semver.Parse(strings.TrimSpace(s))\n    return err == nil\n}","tryCatchPattern":"v, err := util.ParseVersion(raw)\nif err != nil {\n    if strings.Contains(err.Error(), \"error parsing version\") {\n        return fmt.Errorf(\"package version %q must be full MAJOR.MINOR.PATCH\", raw)\n    }\n    return err\n}","preventionTips":["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"],"tags":["kops","version-parsing","semver"],"backgroundTag":"version-string-parse-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}