feat(pipeline): уведомления CI/CD — PipelineWatcher, CI загрузок на Gitea Actions
CI / ruff · mypy · pytest (pull_request) Failing after 3m40s

- app/pipeline: протокол CIProvider, клиент Gitea Actions (прогон по head_sha, упавший
  шаг, лог джоба, ретраи), PipelineWatcher — опрос только при незавершённых push,
  сообщение о push обновляется CI ⏳ → ✅/❌ → CD 🚀/⛔, автору — отдельные уведомления
- деплой сервисов — только после зелёного CI; старый push не откатывает сервис,
  который развернёт более новый; после рестарта бот продолжает с того же места
- CI_PROVIDER=none — прежнее поведение (деплой сразу после push)
- шаблон tgit-uploads: .gitea/workflows/check.yml; .gitea/ защищён от правок из бота
- миграция 0002: старые push помечены skipped, чтобы не слать им «таймаут CI»
- ADR-016, ARCHITECTURE §2.5/§5.2, README, DEPLOY, .env.example

Refs #11

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-19 00:24:08 +03:00
co-authored by Claude Opus 5.5
parent eda5694270
commit 95a72437ec
29 changed files with 1293 additions and 117 deletions
+6 -3
View File
@@ -11,12 +11,15 @@ services/<name>/ сервис = папка; имя — ^[a-z][a-z0-9-]{1,
requirements.txt зависимости (необязательно)
test_*.py тесты pytest (необязательно, запускаются в CI)
tgit.yaml настройки запуска: health_url, network (необязательно)
.sourcecraft/ci.yaml CI/CD — из Telegram не редактируется
.gitea/workflows/ CI (Gitea Actions) — из Telegram не редактируется
.sourcecraft/ci.yaml CI для SourceCraft — на будущее возвращение, сейчас не используется
.tgit/ служебные скрипты CI — из Telegram не редактируются
ruff.toml мягкий набор правил линтера
```
## CI/CD (`check-and-deploy`, push в `main`)
## CI/CD (push в `main`)
CI — workflow `check` в Gitea Actions; CD делает бот, когда `check` зелёный.
| Шаг | Что делает | Падает, если |
|---|---|---|
@@ -24,7 +27,7 @@ ruff.toml мягкий набор правил линтера
| `lint` | `ruff check` (мягкие правила) | неопределённые имена, неиспользуемые импорты, опасные значения по умолчанию |
| `security` | `bandit -ll` по `services/` | найдена уязвимость уровня medium+ |
| `tests` | `pytest` для каждого сервиса с тестами, со своими `requirements.txt` | упал тест |
| `deploy` | список изменённых сервисов → `tgit-runner` на хосте | сервис не поднялся (healthy) за 60 с |
| CD (бот) | изменённые сервисы → `tgit-runner` на хосте | сервис не поднялся (healthy) за 60 с — работает прежняя версия |
## Развернуть заново