// Package version сравнивает версии backupctl вида v1.2.3. package version import ( "strconv" "strings" ) // Parse разбирает "v1.2.3" или "1.2.3". ok=false для dev-сборок ("dev", "main-abc123"). func Parse(v string) (parts [3]int, ok bool) { v = strings.TrimPrefix(strings.TrimSpace(v), "v") v, _, _ = strings.Cut(v, "-") // v1.2.3-rc1 → 1.2.3 f := strings.Split(v, ".") if len(f) != 3 { return parts, false } for i, s := range f { n, err := strconv.Atoi(s) if err != nil || n < 0 { return parts, false } parts[i] = n } return parts, true } // ShouldUpdate решает, обновлять ли агента до версии сервера. Сервер dev-сборки // обновления не раздаёт; агент dev-сборки обновляется до релиза; откат вниз не делается. func ShouldUpdate(server, agent string) bool { s, ok := Parse(server) if !ok { return false } a, ok := Parse(agent) if !ok { return true } for i := range s { if s[i] != a[i] { return s[i] > a[i] } } return false }