bot: уведомления CI и CD — PipelineWatcher #11
Notifications
Due Date
No due date set.
Blocks
Depends on
Reference: HSE/tgit#11
Reference in New Issue
Block a user
Описание
Требования C-24, C-30…C-34 из SPEC §4.1, ARCHITECTURE §2.5; polling — ADR-003.
Желаемый результат
Подзадачи
app/pipeline/watcher.py— сопоставление по sha; CI — Gitea Actionscheck, CD — бот через tgit-runner (ADR-016)pipeline_runs, переходыpushes.ci_status/cd_statusАнализ
Затрагиваемые файлы
app/pipeline/tests/pipeline/Ограничения и риски
«message is not modified» — не ошибка. Логи куба могут быть большими — файлом, не больше 5 МБ.
Как проверить
Пуш валидного сервиса → четыре обновления статуса и два уведомления; пуш с ошибкой ruff → «❌ CI» + лог.
Лог выполнения
2026-10-13
2026-10-19
head_sha— кубmeta(ADR-014) не нужен. CD остаётся у бота: после зелёногоcheck→tgit-runner(#13).app/pipeline/: протоколCIProvider+gitea.py(runs поhead_sha, джобы → упавший шаг, лог джоба без меток времени, ретраи на сеть/5xx);PipelineWatcher— состояние в БД, сообщение о push рендерится из неё, опрос только пока есть незавершённые push (иначе спит доwake()), бэкофф до 60 с, таймаут 30 мин; после рестарта ждёт CI дальше и повторяет прерванный деплой.CI_PROVIDER=none— прежнее поведение: деплой сразу после push.infra/uploads-template/.gitea/workflows/check.yml(compile · ruff · bandit · pytest, последовательно — первый упавший шаг виден автору);.gitea/защищён от правок из бота (C-16).skipped, иначе первый тик разослал бы авторам «таймаут CI».HSE/tgit-uploads(540eaa4), прогон 5225 ✅ за 28 с, все 7 шагов, тестhelloпрошёл;GiteaCI.find(sha)с живым API видитrunning→success.drain()) и фейковый Telegram, а не БД./srv/tgit/dev/.env—CI_PROVIDER=giteaиCI_TOKEN(чтениеHSE/tgit-uploads); без них бот деплоит как раньше.bot: CIWatcher — статус прогона в сообщении, логи падения, /runsto bot: уведомления CI и CD — PipelineWatcherСмержено в
devчерез PR #50 — закрываю.