QM's CI pipeline enforces code quality through four linting checks (Prettier, ESLint, Knip dead-code detection, Oxlint), parallelized core tests across 5 shards, Postgres integration tests, CLI version bumping rules, and per-plugin Docker image verification. Concurrent runs deduplicate smartly—canceling in-progress pull-request builds but preserving all main pushes—while reading the authoritative Node.js version from .node-version across all jobs.
Concurrent CI runs on the same branch are de-duplicated: the concurrency key cancels in-progress runs only for pull requests, never for pushes to main.[1] The CI/CD pipeline reads the Node.js version from a .node-version file (via node-version-file: .node-version) across all jobs, so the authoritative Node version is maintained there, not in the workflow YAML.[1]
The lint job runs four distinct checks in sequence: Prettier formatting (npm run format:check), ESLint for the whole repo including plugins (npm run lint), dead-code detection via Knip (npm run lint:knip), and Oxlint (npm run lint:ox).[1]
Core tests run across 5 parallel shards using the CORE_TEST_SHARD environment variable and the npm run test:root:shard command; shard 1 also verifies the shard plan via npm run test:root:shard:check.[1] The core-postgres CI job spins up a postgres:16 service container and passes DATABASE_URL=postgres://postgres:postgres@localhost:5432/qm to the test runner via npm run test:pg; this is the required Postgres version for durability and cross-process tests.[1]
A cli-version job on pull requests enforces that any change under cli/bin, cli/src, cli/templates, cli/manifest.json, cli/package.json, cli/package-lock.json, cli/README.md, cli/LICENSE, cli/tsconfig.json, or cli/tsconfig.build.json must be accompanied by a semver version bump in cli/package.json.[1] The CLI job also runs deployment-stack contract tests after building the CLI package: npm run typecheck:contract and node --test "deploy/stacks/*/test/*.test.ts".[1]
Each plugin (admin, web-ui, auth, portal) has its own CI job that runs npm ci, npm run typecheck, and npm test, then calls bash scripts/smoke-surface-image.sh <name> to build and boot its production Docker image.[1]
Sources