package release import ( "strconv" "strings" ) // IsNewer возвращает true, если версия remote строго новее local. // Понимает semver вида "MAJOR.MINOR.PATCH" (с опциональным префиксом "v" // и суффиксом "-beta" — суффикс игнорируется при сравнении чисел). // Некорректные/пустые версии считаются «старыми» (0.0.0). func IsNewer(remote, local string) bool { rm := parseVer(remote) lc := parseVer(local) for i := 0; i < 3; i++ { if rm[i] != lc[i] { return rm[i] > lc[i] } } return false } func parseVer(s string) [3]int { s = strings.TrimSpace(s) s = strings.TrimPrefix(s, "v") if i := strings.IndexAny(s, "-+"); i >= 0 { s = s[:i] // отбрасываем -beta, +build } var out [3]int parts := strings.Split(s, ".") for i := 0; i < 3 && i < len(parts); i++ { n, _ := strconv.Atoi(parts[i]) out[i] = n } return out }