ci(tradein): тесты браузерного сайдкара наконец бегут в пайплайне (#2722) #2726
1 changed files with 55 additions and 0 deletions
|
|
@ -30,6 +30,7 @@ jobs:
|
|||
outputs:
|
||||
backend: ${{ steps.filter.outputs.backend }}
|
||||
frontend: ${{ steps.filter.outputs.frontend }}
|
||||
browser: ${{ steps.filter.outputs.browser }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: dorny/paths-filter@v3
|
||||
|
|
@ -54,6 +55,12 @@ jobs:
|
|||
frontend:
|
||||
- 'tradein-mvp/frontend/**'
|
||||
- '.forgejo/workflows/ci-tradein.yml'
|
||||
browser:
|
||||
# Сайдкар — сервис ВНЕ uv-воркспейса (tradein-mvp/pyproject.toml
|
||||
# members = backend + packages/*), со своим Dockerfile и без pyproject,
|
||||
# поэтому и фильтр отдельный: backend-гейт его тестов не видел вовсе.
|
||||
- 'tradein-mvp/browser/**'
|
||||
- '.forgejo/workflows/ci-tradein.yml'
|
||||
|
||||
backend-tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
@ -106,6 +113,54 @@ jobs:
|
|||
uv run pytest -q \
|
||||
--deselect "tests/test_search_api.py::test_search_cache_hit"
|
||||
|
||||
# Тесты браузерного сайдкара (#2722). До этого job'а они не бежали НИГДЕ:
|
||||
# ci-tradein гейтил только backend/frontend, deploy-tradein — тоже, а каталог
|
||||
# вне uv-воркспейса, так что и `uv run pytest` из backend их не собирал. Итог:
|
||||
# 4 теста лежали красными на main (с 2026-06-20 и 2026-07-02), файл при этом
|
||||
# правился, и никто не узнал. Починка — PR #2724, этот job закрывает причину.
|
||||
#
|
||||
# Почему НЕ переиспользуем backend-job:
|
||||
# 1. сайдкар не член воркспейса → `uv sync --frozen` его не ставит;
|
||||
# 2. aiohttp (единственная не-stdlib зависимость сьюта) нет в tradein-mvp/uv.lock;
|
||||
# 3. разный scope paths-filter: правка browser/ не должна гонять backend-сьют.
|
||||
browser-tests:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
if: needs.changes.outputs.browser == 'true'
|
||||
# Сьют идёт ~15с. Лимит — страховка от зависшего теста: у сайдкара нет своего
|
||||
# pyproject, а значит и pytest-timeout'а backend'а (timeout=120). Дешевле
|
||||
# взять нативный job-таймаут, чем тащить плагин ради одного каталога.
|
||||
timeout-minutes: 10
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./tradein-mvp/browser
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
# 3.12 — как в browser/Dockerfile (FROM python:3.12-slim).
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Install test deps
|
||||
# ВЕСЬ список: pytest + aiohttp. Ни playwright, ни camoufox, ни закачки
|
||||
# Firefox — camoufox импортируется ЛЕНИВО внутри _launch_browser
|
||||
# (server.py, `from camoufox.async_api import AsyncCamoufox`), а сами тесты
|
||||
# мокают _ensure_browser/_do_fetch и грузят server.py по пути через importlib.
|
||||
# pytest-asyncio тоже НЕ нужен: ни одного `async def test_` — каждый тест сам
|
||||
# крутит asyncio.run(). Проверено локально на venv ровно из этих двух пакетов.
|
||||
#
|
||||
# aiohttp без пина — ровно как в browser/Dockerfile (`pip install ... aiohttp`),
|
||||
# то есть гейт видит ту же версию, что уедет в образ. Пин здесь означал бы
|
||||
# проверку версии, которой в проде нет.
|
||||
run: pip install pytest aiohttp
|
||||
|
||||
- name: Run pytest (tradein-mvp/browser)
|
||||
# Каталог без pyproject/pytest.ini → дефолтная конфигурация, ничего
|
||||
# не deselect'ится. Ожидание: 108 passed, 0 failed, 0 skipped.
|
||||
run: pytest -q
|
||||
|
||||
frontend-checks:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue