feat(pipeline): уведомления CI/CD — PipelineWatcher, CI загрузок на Gitea Actions
CI / ruff · mypy · pytest (pull_request) Failing after 3m40s
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:
@@ -0,0 +1,39 @@
|
||||
# CI репозитория загрузок tgit на Gitea Actions (ADR-016). Шаблон живёт в HSE/tgit: infra/uploads-template/ — правки делать там.
|
||||
# Бот находит этот прогон по sha своего push и разворачивает изменённые сервисы только после зелёного check (#11).
|
||||
# Имя файла — CI_WORKFLOW бота. Из Telegram не редактируется (SPEC C-16).
|
||||
name: check
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
# Без cancel-in-progress: каждый push ждёт свой вердикт — иначе бот не дождётся отменённого прогона.
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 25
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Python 3.12
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Install uv
|
||||
# pip, а не astral-sh/setup-uv: на self-hosted Gitea экшен ходит в GitHub API и падает (опыт Vobot)
|
||||
run: pip install uv
|
||||
|
||||
# Шаги последовательно: имя первого упавшего бот покажет автору push вместе с логом.
|
||||
- name: compile
|
||||
run: python -m compileall -q -x '(^|/)\.' .
|
||||
|
||||
- name: lint
|
||||
run: uvx ruff@0.13 check .
|
||||
|
||||
- name: security
|
||||
run: uvx bandit@1.8 -q -r services -ll
|
||||
|
||||
- name: tests
|
||||
run: python .tgit/run_tests.py
|
||||
@@ -47,6 +47,6 @@ workflows:
|
||||
script:
|
||||
- python .tgit/changed_services.py > changed.txt
|
||||
- cat changed.txt
|
||||
# Разворачивает бот сразу после push (tgit-runner, #13); здесь — только список для лога.
|
||||
# Когда CI переедет сюда целиком (#11), бот будет ждать зелёного check перед деплоем.
|
||||
# Разворачивает бот после зелёного check (tgit-runner, #13); здесь — только список для лога.
|
||||
# Сейчас CI загрузок — Gitea Actions (.gitea/workflows/check.yml, ADR-016); этот файл — для возврата.
|
||||
- 'echo "$(wc -l < changed.txt) service(s) changed — deployed by the bot via tgit-runner"'
|
||||
|
||||
@@ -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 с — работает прежняя версия |
|
||||
|
||||
## Развернуть заново
|
||||
|
||||
|
||||
Reference in New Issue
Block a user