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