INNER CODE UNIT · Go
CompareVersionNumbers
kubesphere/kubekey · builtin/core/upgrade_path.go:246
func CompareVersionNumbers(a, b string) int {
return compareVersionNumbers(a, b)
}
// compareVersionNumbers orders two version strings by semver semantics, using the
// same Masterminds/semver library that backs the template pipeline's semverCompare
// function (pkg/converter/tmpl -> sprig.TxtFuncMap -> semverCompare). It accepts
// the heterogeneous per-minor version strings (leading "v", e.g. "v3.5.15";
// single/two-part forms like "3.6"; prerelease suffixes like "2.9.6-alpine") and
// returns -1, 0, or +1. If either side does not parse as semver, it falls back to
// plain string ordering so the monotonically-upgrade guard never silently passes a
// genuinely lower value.
func compareVersionNumbers(a, b string) int {
va, aerr := semver.NewVersion(a)
vb, berr := semver.NewVersion(b)
if aerr == nil && berr == nil {
return va.Compare(vb)
}