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>
36 lines
2.4 KiB
Markdown
36 lines
2.4 KiB
Markdown
# tgit-uploads
|
|
|
|
Общий репозиторий команды [tgit](https://gitea.24studbank.ru/HSE/tgit): бот коммитит сюда изменения из Telegram
|
|
(раздел «📝 Коммит»), каждый push в `main` запускает CI, а изменённые сервисы разворачиваются на хосте (CD).
|
|
|
|
## Структура
|
|
|
|
```
|
|
services/<name>/ сервис = папка; имя — ^[a-z][a-z0-9-]{1,30}$
|
|
main.py точка входа (python main.py)
|
|
requirements.txt зависимости (необязательно)
|
|
test_*.py тесты pytest (необязательно, запускаются в CI)
|
|
tgit.yaml настройки запуска: health_url, network (необязательно)
|
|
.gitea/workflows/ CI (Gitea Actions) — из Telegram не редактируется
|
|
.sourcecraft/ci.yaml CI для SourceCraft — на будущее возвращение, сейчас не используется
|
|
.tgit/ служебные скрипты CI — из Telegram не редактируются
|
|
ruff.toml мягкий набор правил линтера
|
|
```
|
|
|
|
## CI/CD (push в `main`)
|
|
|
|
CI — workflow `check` в Gitea Actions; CD делает бот, когда `check` зелёный.
|
|
|
|
| Шаг | Что делает | Падает, если |
|
|
|---|---|---|
|
|
| `compile` | `python -m compileall` | синтаксическая ошибка |
|
|
| `lint` | `ruff check` (мягкие правила) | неопределённые имена, неиспользуемые импорты, опасные значения по умолчанию |
|
|
| `security` | `bandit -ll` по `services/` | найдена уязвимость уровня medium+ |
|
|
| `tests` | `pytest` для каждого сервиса с тестами, со своими `requirements.txt` | упал тест |
|
|
| CD (бот) | изменённые сервисы → `tgit-runner` на хосте | сервис не поднялся (healthy) за 60 с — работает прежняя версия |
|
|
|
|
## Развернуть заново
|
|
|
|
Шаблон — в репозитории бота: `infra/uploads-template/`. Новый пустой репозиторий → скопировать содержимое шаблона →
|
|
push в `main` → в настройках добавить deploy key бота с правом записи.
|