CI Pipeline
GitLab CI runs on merge requests and push to main. Stages:
- format — No npm lockfiles (pnpm only); Prettier on changed files.
- lint — ESLint and TypeScript on frontend and backend.
- build — Build frontend and backend Docker images; push to GitLab Container Registry with tag
sha-<commit>. - test_unit — Jest (and Vitest) in parallel; backend uses in-container MongoDB,
--runInBandto avoid duplicate-key issues. - test_e2e — Ephemeral burner stack from built images; Puppeteer/Jest E2E; then teardown.
- publish — After tests pass, write image digests to artifacts.
- deploy — deploy:test_prod pulls by digest and runs blue-green rollout for TEST_PROD.
Config: config/.env.ci (ports 9080/9081, no real secrets). Full story: docs/ci-pipeline.md, docs/deployment/docker-stack-isolation-and-ci-testing.md in the repo.
Related: Blue-green deploy, TEST_PROD and blue-green