Pipeline Phases
Phases are declared in the PHASES array inside ci/scripts/run-ci.mjs. If one
phase turns red the remaining phases still run, so the report stays complete.
| # | Phase | Command | Location | Blocks CI |
|---|---|---|---|---|
| 1 | Environment / dependencies | npm ci |
both packages | Yes |
| 2 | Backend Typecheck | npm run typecheck |
backend | Yes |
| 3 | Backend Unit Tests | npx tsx tests/run.ts unit |
backend | Yes |
| 4 | Backend Integration Tests | npx tsx tests/run.ts integration |
backend | Yes |
| 5 | Node-RED Migrated API Regression | npm run nodered:test |
backend | Yes |
| 6 | Swagger / OpenAPI | npm run swagger:test |
backend | Yes |
| 7 | Audit / Platform Logs | npm run logs:test |
backend | Yes |
| 8 | Reminder Mail | tests/run-file.ts .../reminder-mail.test.ts |
backend | Yes |
| 9 | API Middleware (Backend) | tests/run-file.ts .../api-doc.test.ts |
backend | Yes |
| 10a | Frontend Typecheck | npm run typecheck |
dashboard | Yes |
| 10b | Frontend Test Typecheck | npm run typecheck:test |
dashboard | Yes |
| 11 | Frontend Unit/Component/Service | jest --ci --maxWorkers=2 |
dashboard | Yes |
| 12 | Frontend ESLint | npm run lint |
dashboard | No (warning) |
| 13 | Backend Production Build | npm run build |
backend | Yes |
| 14 | Frontend Production Build | npm run build |
dashboard | Yes |
| 15 | Security Scan | internal (no external tool) | repo | Yes |
| 16 | Quality Report Generation | generate-ci-report.mjs |
repo | — |
Why are phases 8 and 9 separate?
Reminder Mail and API Middleware also run inside phase 4. They are executed again as single files so they are independently countable in the report — these are the newest and most fragile parts of the product. The duplicate run costs a few seconds; in return a regression is attributed to the right module.
Output parsing
| Source | Expected line |
|---|---|
tests/run.ts, scripts/*.ts |
SONUC: <n> basarili, <n> basarisiz[, <n> atlandi] |
tests/run-file.ts |
__IQV_SUMMARY__{"passed":..,"failed":..,"skipped":..} |
| Jest | Tests: <n> failed, <n> passed, <n> total |
| ESLint | ✖ <n> problems (<n> errors, <n> warnings) |
If the parser cannot find the line, counts is not produced and the phase is
judged by exit code only — no invented numbers are reported.
Timeouts
The default per-phase limit is 30 minutes (IQV_CI_PHASE_TIMEOUT_MS). An
exceeding phase receives SIGKILL and is recorded with exit code 124; the
pipeline does not stop and remaining phases still run.