auto-sync: 2026-06-04 21:20:01
This commit is contained in:
148
tasks/orchestrator/reports/dev-2026-06-04-orch-ci-workflow.md
Normal file
148
tasks/orchestrator/reports/dev-2026-06-04-orch-ci-workflow.md
Normal 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
|
||||
```
|
||||
Reference in New Issue
Block a user