Files
wiki/tasks/orchestrator/reports/dev-2026-06-04-orch-ci-workflow.md
2026-06-04 21:20:01 +03:00

7.1 KiB
Raw Blame History

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 теста:

  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 (для справки)

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