feat: множественные репозитории (Repos) и клонирование в воркере
All checks were successful
CI / test (push) Successful in 46s
CI / build-and-package (amd64, darwin) (push) Successful in 36s
CI / build-and-package (amd64, linux) (push) Successful in 37s
CI / build-and-package (amd64, windows) (push) Successful in 44s
CI / build-and-package (arm64, darwin) (push) Successful in 35s
CI / build-and-package (arm64, linux) (push) Successful in 36s

- Task.Repos []string (XML-колонка repos, обратная совместимость с repo)
- config: блок git {base_url, token}
- аналитик: ответ repos[], шаблон показывает список
- core: propose без repos → возврат в сбор (E1)
- worker вариант A: один dev из общего cwd, prepareRepos клонирует
  недостающие репо (git clone), validateRepoName (E3), ErrRepoNotGit (E4)
- ошибки E1-E4 в worker/errors.go
This commit is contained in:
Hermes
2026-08-16 09:18:15 +05:00
parent 7be75fe14f
commit bd3d825738
14 changed files with 346 additions and 71 deletions

View File

@@ -2,7 +2,7 @@ package worker
import "errors"
// Классы ошибок W1W5.
// Классы ошибок W1W5 (планировщик) и E1E4 (репозитории).
var (
// W1 — ошибка опроса БД.
ErrPoll = errors.New("W1: poll error")
@@ -18,4 +18,16 @@ var (
// W5 — превышена параллельность, задача пропущена.
ErrConcurrencyLimit = errors.New("W5: concurrency limit")
// E1 — задача без репозиториев (нечего клонировать/править).
ErrNoRepos = errors.New("E1: no repositories")
// E2 — git clone упал.
ErrClone = errors.New("E2: clone failed")
// E3 — имя репозитория содержит путь-эскейп (../, / и т.п.).
ErrRepoPathHint = errors.New("E3: repo path escape")
// E4 — папка существует, но не является git-репозиторием.
ErrRepoNotGit = errors.New("E4: existing dir is not a git repo")
)