Files
pack/core/resolver/version.go
T
2025-03-06 18:04:02 -05:00

45 lines
1.1 KiB
Go

package resolver
import "strings"
func resolveToFuzzyVersion(version string) string {
// Remove any whitespace
version = strings.TrimSpace(version)
// Handle empty string and "*" cases
if version == "" || version == "*" {
return "latest"
}
// Handle range notation (e.g. ">=22 <23")
if strings.Contains(version, ">=") || strings.Contains(version, "<") {
parts := strings.Fields(version)
// Take the first version number we find
for _, part := range parts {
if v := strings.TrimPrefix(strings.TrimPrefix(part, ">="), "<"); v != part {
version = v
break
}
}
}
// Handle caret notation by only keeping major version
if strings.HasPrefix(version, "^") {
version = strings.TrimPrefix(version, "^")
parts := strings.Split(version, ".")
return parts[0]
}
// Remove any prefix characters (~, v)
version = strings.TrimPrefix(version, "~")
version = strings.TrimPrefix(version, "v")
// Replace .x with empty string (e.g. "14.x" -> "14")
version = strings.ReplaceAll(version, ".x", "")
// Remove any trailing dots
version = strings.TrimRight(version, ".")
return version
}