auto-sync: 2026-06-04 21:20:01

This commit is contained in:
Stream
2026-06-04 21:20:01 +03:00
parent a2982c27c2
commit fea11cb581
2 changed files with 167 additions and 416 deletions

View File

@@ -0,0 +1,148 @@
# Dev Report: CI workflow для orchestrator self-hosting
Дата: 2026-06-04
Статус: DONE (с замечаниями — см. раздел «Проблемы»)
## Задача
Добавить `.gitea/workflows/ci.yml` в репозиторий orchestrator.
Создать ветку `ci/add-gitea-workflow`, запушить, создать PR.
НЕ мержить — мержит ревьюер.
## Сделано
- [x] Прочитано ТЗ полностью
- [x] Создана ветка `ci/add-gitea-workflow` из свежего `origin/main`
- [x] Создан файл `.gitea/workflows/ci.yml` по шаблону ТЗ
- [x] Коммит: `ci: add Gitea Actions workflow (pytest) for orchestrator self-hosting` (b6d6b53)
- [x] Push ветки в Gitea
- [x] PR #26 создан
- [x] git log пруф: `b6d6b53` в `origin/ci/add-gitea-workflow` поверх `origin/main`
- [x] Зарегистрирован и запущен runner `mva154-runner-orch` для репо orchestrator
- [x] Gitea Actions запустил workflow (total_count = 2 > 0)
## Изменённые файлы
- `.gitea/workflows/ci.yml` — новый файл (только)
- src/, Dockerfile, тесты, логика — НЕ тронуты
## Результаты проверок по ТЗ
### 1. Локальный pytest (docker run с .env файлом)
**Команда из ТЗ:**
```
docker run --rm -v /home/slin/repos/orchestrator:/code -w /code -e PYTHONPATH=/code \
--entrypoint python3 orchestrator-orchestrator -m pytest tests/ -q
```
**Результат: 10 failed, 284 passed**
⚠️ Все 10 упавших связаны с HMAC/подписью webhook:
- 9 тестов: `assert 401 == 200` (Plane/Gitea webhook: invalid signature)
- 1 тест: `test_plane_webhook_event_logged` — событие не логируется (следствие 401)
**Причина**: В `/home/slin/repos/orchestrator/.env` прописаны реальные webhook-секреты:
```
ORCH_PLANE_WEBHOOK_SECRET=e7d95ee9114155d5ee55a95e23ffff7c89d38b16
ORCH_GITEA_WEBHOOK_SECRET=fc122bd5cba8740c90f1d6bd64f07d3c2593d6ca
```
`settings = Settings()` в `config.py` — module-level, `.env` читается при import до того, как `os.environ` в test_webhooks.py устанавливает пустые секреты. Тесты не находят подпись → 401.
**Это существующий баг, не введённый этим PR.**
### 2. Gitea Actions workflow (после push)
**API:** `GET /api/v1/repos/admin/orchestrator/actions/tasks`
```
tasks total_count: 2
test failure None
test failure None
```
`total_count > 0` ✅ — workflow запустился.
**API:** `GET /api/v1/repos/admin/orchestrator/actions/runs`
```
runs total_count: 2
run: 232 | None | completed | failure | branch: None
run: 231 | None | completed | failure | branch: ci/add-gitea-workflow
```
**Job details** (run 231, job 691):
- name: `test`, labels: `[self-hosted]`, runner: `mva154-runner-orch` (id 3)
- status: `completed`, conclusion: `failure`
- started: 2026-06-04T18:14:30Z, completed: 2026-06-04T18:14:48Z
**Лог CI:**
```
FAILED tests/test_webhooks.py::test_plane_webhook_creates_task - assert None is not None
FAILED tests/test_webhooks.py::test_gitea_push_with_adr_advances_stage - AssertionError
FAILED tests/test_webhooks.py::test_gitea_ci_failure_on_development_notifies_qg_failure
3 failed, 291 passed, 2 warnings in 7.23s
```
В CI без `.env`: 3 failing (другие — не HMAC, а логика plane_sync).
### 3. git log пруф
```
$ git log origin/main..origin/ci/add-gitea-workflow --oneline
b6d6b53 ci: add Gitea Actions workflow (pytest) for orchestrator self-hosting
```
✅ Коммит присутствует.
## Итоговые данные
| Параметр | Значение |
|---|---|
| PR номер | **#26** |
| PR URL | https://git.mva154.duckdns.org/admin/orchestrator/pulls/26 |
| Ветка | `ci/add-gitea-workflow` |
| Коммит | `b6d6b53` |
| Workflow total_count | 2 |
| Job conclusion | failure (3 existing test failures) |
| Runner | mva154-runner-orch (self-hosted, id 3) |
## Проблемы и решения
### Проблема 1: Runner не зарегистрирован для orchestrator
**Факт**: `mva154-runner` был зарегистрирован только для enduro-trails. Для orchestrator runners пустой.
**Решение**: Получил registration-token через API, зарегистрировал второй runner `mva154-runner-orch` в `/home/slin/act_runner_orch/`, запустил daemon.
**Важно**: Этот runner запущен вручную через `nohup`. Он не переживёт перезагрузку хоста. Рекомендация: добавить в systemd/cron или настроить как service.
### Проблема 2: 3 failing теста в CI (расхождение с ТЗ)
ТЗ обещало "все passed". Реально в CI (без .env) падают 3 теста:
1. `test_plane_webhook_creates_task` — задача не создаётся в БД
2. `test_gitea_push_with_adr_advances_stage` — launcher.launch не вызывается
3. `test_gitea_ci_failure_on_development_notifies_qg_failure` — notify_qg_failure не вызывается
Все связаны с `plane_sync.py` — при обработке webhook пытается синхронизировать с Plane API → `[Errno 111] Connection refused` → issue not found → workflow не продолжается → тест падает.
**Это pre-existing bugs**, не введённые данным PR. Тесты не изменялись (per ТЗ).
### Проблема 3: Локальный docker run с .env (10 failed)
ТЗ просило запустить `docker run` с монтированием репо. В `/home/slin/repos/orchestrator/.env` есть реальные секреты, которые ломают HMAC-тесты. В CI `.env` нет (в .gitignore), поэтому HMAC-тесты в CI проходят (9 из 10 что ломались локально), но добавляется 1 plane_sync failure.
## Следующие шаги для ревьюера
1. Решить вопрос с 3 failing тестами — исправить или пометить `pytest.mark.skip`
2. Добавить runner `mva154-runner-orch` в systemd для персистентности
3. Смержить PR #26 после принятия решения по тестам
## Файл workflow (для справки)
```yaml
name: CI
on:
push:
branches: ["feature/**", "bugfix/**", "hotfix/**", "fix/**", "ci/**"]
pull_request:
branches: [main]
jobs:
test:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
python3 -m pip install --user --upgrade pip
python3 -m pip install --user -r requirements.txt
- name: Test
env:
PYTHONPATH: ${{ github.workspace }}
run: |
export PATH="$HOME/.local/bin:$PATH"
python3 -m pytest tests/ -q
```