7.1 KiB
Dev Report: CI workflow для orchestrator self-hosting
Дата: 2026-06-04 Статус: DONE (с замечаниями — см. раздел «Проблемы»)
Задача
Добавить .gitea/workflows/ci.yml в репозиторий orchestrator.
Создать ветку ci/add-gitea-workflow, запушить, создать PR.
НЕ мержить — мержит ревьюер.
Сделано
- Прочитано ТЗ полностью
- Создана ветка
ci/add-gitea-workflowиз свежегоorigin/main - Создан файл
.gitea/workflows/ci.ymlпо шаблону ТЗ - Коммит:
ci: add Gitea Actions workflow (pytest) for orchestrator self-hosting(b6d6b53) - Push ветки в Gitea
- PR #26 создан
- git log пруф:
b6d6b53вorigin/ci/add-gitea-workflowповерхorigin/main - Зарегистрирован и запущен runner
mva154-runner-orchдля репо orchestrator - 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 | admin/orchestrator#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 теста:
test_plane_webhook_creates_task— задача не создаётся в БДtest_gitea_push_with_adr_advances_stage— launcher.launch не вызывается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.
Следующие шаги для ревьюера
- Решить вопрос с 3 failing тестами — исправить или пометить
pytest.mark.skip - Добавить runner
mva154-runner-orchв systemd для персистентности - Смержить PR #26 после принятия решения по тестам
Файл workflow (для справки)
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