ci(tradein): тесты браузерного сайдкара наконец бегут в пайплайне (#2722) #2726
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2726
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "ci/2722-browser-job"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Пункт 1 из #2722, после починки красноты в #2724 (смержен) — порядок именно такой, чтобы job не был красным с первого дня.
Каталог
tradein-mvp/browser/(108 тестов) не гонял ни один пайплайн:ci-tradein.ymlгейтитtradein-mvp/backend/**иtradein-mvp/frontend/**;deploy-tradein.yml— то же самое;tradein-mvp/pyproject.toml:members = ["backend", "packages/*"]), поэтому иuv run pytestиз backend его не собирал.Следствие: 4 теста лежали красными с 2026-06-20 и 2026-07-02, а файл
test_server_smoke.pyза это время правился дважды (#2430, #2433) — краснота не остановила ничего.Показательно, что сам PR #2724 получил вакуумно-зелёный чек: он трогал только
browser/**, ни один фильтр не сработал, все job'ы скипнулись, статус — success. Ровно тот сценарий, ради которого этот файл когда-то и заводили (#2208).Что добавлено
Отдельный job
browser-tests+ свой paths-filterbrowser. Не шаг в backend-job, потому что:uv sync --frozenего зависимости не ставит;aiohttp— единственная не-stdlib зависимость сьюта — отсутствует вtradein-mvp/uv.lock, backend-окружение сьют просто не запустит;browser/не должна гонять backend-сьют и наоборот.Окружение job'а — намеренно лёгкое
pip install pytest aiohttp, и всё. Ни playwright, ни camoufox, ни закачки Firefox:camoufoxимпортируется лениво внутри_launch_browser(server.py:346), а тесты мокают_ensure_browser/_do_fetchи грузятserver.pyпо пути черезimportlib;pytest-asyncioне нужен:async def test_в каталоге ноль — каждый тест сам крутитasyncio.run().Делить на юнит/интеграцию не понадобилось: живого браузера не требует ни один тест,
0 skipped— весь сьют идёт целиком, молча пропущенной части нет.timeout-minutes: 10— у каталога нет своего pyproject, а значит иpytest-timeoutbackend'а (timeout=120) на него не распространяется; нативный job-таймаут дешевле плагина ради одного каталога.deploy-tradein.ymlНЕ трогал (его правит открытый #2680).Test plan
pytest+aiohttp, команда буквально как в job (pytest -qизtradein-mvp/browser/) → 108 passed, 0 failed, 0 skippedyaml.safe_load+yamllintнаci-tradein.yml→ чисто; job'ы:changes,backend-tests,browser-tests,frontend-checks.forgejo/workflows/ci-tradein.ymlподпадает под новый фильтрbrowser, значитbrowser-testsобязан РЕАЛЬНО исполниться и быть зелёным в чеках ниже (а не скипнуться, как у #2724)Refs #2722