bot: клиент SourceCraft API с ретраями #10
Notifications
Due Date
No due date set.
Blocks
Depends on
Reference: HSE/tgit#10
Reference in New Issue
Block a user
Описание
Обёртка над REST API для CI-прогонов и логов (ARCHITECTURE §2.3, шпаргалка). API периодически рвёт TLS-соединения.
Желаемый результат
SourceCraftClient:list_runs(repo),get_run(repo, run),get_cube_logs(repo, run, workflow, task, cube),trigger_workflow.Подзадачи
/cicd/runsи логов → фикстуры вtests/fixtures/sourcecraft/app/sourcecraft/client.py,models.pyrespx: ретраи, разбор ответов, ошибкиАнализ
Затрагиваемые файлы
app/sourcecraft/tests/sourcecraft/Ограничения и риски
Токен — только в заголовке, не в логах. Пагинация через
next_page_token.Как проверить
make test; ручной скриптpython -m app.sourcecraft.cli runsвыводит последние прогоны.Лог выполнения
2026-10-14
app/sourcecraft/client.py+models.py:list_runs,get_run,get_cube_logs(постранично:?page=N, покаpage_complete),run_commit_sha,run_url. Ретраи: сетевые ошибки и 5xx, задержка 0.5→1→2→… (≤ 8 с), 4xx —SourceCraftErrorсразу. Статусы и типы событий — из swagger.#-кубов не отдаются → сопоставить пуш и прогон напрямую нельзя. Решение — ADR-014: первый кубcheck/metaвtgit-uploadsпечатаетTGIT_COMMIT_SHA=$SOURCECRAFT_COMMIT_SHA. Шаблон обновлён и залит вtgit-uploads(932f4b1); на прогоне1000002клиент вернул ровно этот sha.1000002ждал старта ~6 мин — учесть в таймаутах наблюдателя (#11).SOURCECRAFT_RUN_URL_TEMPLATE; формат не проверить снаружи (SPA отвечает 200 на всё) — нужно подтверждение в браузере.tests/fixtures/sourcecraft/), ретраи с подменённымsleep. CLIpython -m app.sourcecraft.cli runsпроверен вживую. Порог покрытия 45 → 80 (сейчас 86,6 %).