| 09-testing-qa |
03 |
infra |
| gitea-actions |
| ci |
| playwright |
| lighthouse |
| pytest |
| ruff |
| e2e |
| pipeline |
|
| phase |
provides |
| 09-testing-qa/09-01 |
Playwright E2E infrastructure, playwright.config.ts, 7 flow specs, fixtures, auth setup |
|
| phase |
provides |
| 09-testing-qa/09-02 |
visual regression specs, a11y scans, lighthouserc.json config |
|
|
| Gitea Actions CI pipeline (2-job fail-fast |
| backend → portal) |
|
| Automated backend linting (ruff check + ruff format --check) and pytest in CI |
| Automated portal build (Next.js standalone) + Playwright E2E + Lighthouse CI in CI |
| JUnit XML, HTML report, and Lighthouse artifacts uploaded per run |
| Credentials managed via Gitea secrets (never hardcoded) |
|
| CI/CD |
| beta launch readiness |
| quality gates |
|
| added |
patterns |
| Gitea Actions (.gitea/workflows/ci.yml) — CI pipeline runner |
| pgvector/pgvector:pg16 service container — CI DB with vector extension |
| redis:7-alpine service container — CI cache/pubsub |
| @lhci/cli — Lighthouse CI score assertions (already in portal devDeps) |
|
| Fail-fast pipeline: portal job needs backend — backend failures block E2E before spinning up portal |
| Service containers with health checks — postgres pg_isready + redis-cli ping before job starts |
| Standalone Next.js build in CI — cp -r .next/static + public into .next/standalone for self-hosted start |
| Secrets pattern — all credentials via ${{ secrets.* }}, never hardcoded in YAML |
| always() artifact uploads — test reports uploaded even on failure for debugging |
|
|
|
| No mypy --strict step in CI — existing codebase may not be fully strict-typed; ruff lint is sufficient gate for now |
| seed_admin call uses || true — may not exist in all environments; E2E auth setup handles user creation via login form |
| LLM_POOL_URL set to http://localhost:8004 in portal job — consistent with shared/config.py default |
| Browser install uses --with-deps chromium firefox webkit — installs OS dependencies for headful/headless rendering |
|
| Pattern 1: Backend job runs first, portal job depends on it — fail-fast prevents E2E overhead when backend is broken |
| Pattern 2: Service health checks with pg_isready and redis-cli ping — job steps only start when services are healthy |
| Pattern 3: Artifacts uploaded with always() condition — reports available for debugging even on test failure |
|
|
3min |
2026-03-26 |