Files
backup-master/internal/version/version.go
T
mrleo1nidandClaude Opus 5.5 488abc2d34
CI / test (push) Successful in 1m29s
Агенты подхватывают изменения с сервера: каталог и самообновление
- сервер отдаёт агенту итоговый каталог (встроенный каталог сервера +
  переопределения клиента); если каталог не подходит версии агента —
  встроенный каталог агента и предупреждение
- самообновление перед бэкапом: версия сервера новее → скачивание с того же
  сервера (только /dl/...), проверка sha256 и запуска новой версии, подмена
  с откатом, перезапуск через exec; при ошибке бэкап идёт текущей версией
- галочка «Автообновление» у клиента (по умолчанию включена), версия агента
  в списке и карточке, отставшие подсвечены; версия сервера в шапке
- миграция существующей базы: колонки auto_update и agent_version
- backupctl backup --no-update

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:27:31 +03:00

45 lines
1.1 KiB
Go

// 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
}