diff --git a/docs/plans/2026-02-23-ci-parallelization-design.md b/docs/plans/2026-02-23-ci-parallelization-design.md new file mode 100644 index 0000000..246857e --- /dev/null +++ b/docs/plans/2026-02-23-ci-parallelization-design.md @@ -0,0 +1,99 @@ +# CI Parallelization Design + +## Overview + +Parallelize GitHub Actions workflows to reduce total CI time by running independent tasks concurrently and sharing build artifacts between jobs. + +## Scope + +- ci.yml +- release.yml +- staging.yml +- nightly.yml + +## Approach + +Use artifact sharing to avoid redundant builds. Frontend build artifacts are uploaded once and downloaded by dependent jobs. + +## Design + +### ci.yml + +1. **Remove lighthouse dependency** - currently waits for frontend unnecessarily +2. **Upload frontend artifact** - `frontend` job uploads `dist/` +3. **Download artifact in test jobs** - `integration`, `e2e`, `regression` download instead of rebuilding +4. **Split quality job** into 3 parallel jobs: + - `coverage` - runs tests with coverage, uploads to Codecov + - `bundle-size` - checks bundle size limits + - `security` - runs npm audit + +Job graph: +``` +commitlint ──────┐ +frontend ────────┼──► integration +backend ─────────┤ + ├──► e2e + ├──► regression + │ +lighthouse ──────┘ (parallel, no deps) + +coverage ──────── (parallel) +bundle-size ───── (parallel) +security ──────── (parallel) +``` + +### release.yml + +Split monolithic job into parallel jobs: + +1. **lint** - runs npm run lint +2. **frontend-test** - runs npm run test:run +3. **backend-test** - runs backend npm test +4. **build** - waits for lint + tests, uploads dist artifact +5. **release** - semantic-release (waits for build) +6. **docker** - unchanged, waits for release + +Job graph: +``` +lint ──────────┐ +frontend-test ─┼──► build ──► release ──► docker +backend-test ──┘ +``` + +### staging.yml + +Split into 2 jobs: + +1. **test** - lint + frontend tests + backend tests in parallel steps +2. **deploy** - waits for test, builds and pushes docker + +Job graph: +``` +test ──► deploy +``` + +### nightly.yml + +Split into 2 jobs: + +1. **build** - builds frontend, uploads artifact +2. **docker** - waits for build, pushes docker image + +Job graph: +``` +build ──► docker +``` + +## Implementation Notes + +- Use `actions/upload-artifact@v4` and `actions/download-artifact@v4` +- Artifact retention: 1 day (sufficient for workflow duration) +- No changes to actual test/build logic, only workflow structure + +## Implementation Complete + +- [x] Task 1: ci.yml lighthouse parallelization and artifact sharing +- [x] Task 2: ci.yml quality job split into parallel jobs +- [x] Task 3: release.yml parallel lint, frontend-test, backend-test, build, release +- [x] Task 4: staging.yml split into test and deploy jobs +- [x] Task 5: nightly.yml split into build and docker jobs