Skip to content
Beskid The Beskid Book

Beskid

Jump to a Beskid service

Beskid

Jump to a Beskid service

06.4 CI and monorepos

Frozen lock validation, matrix builds per member, and reproducible workspace CI."

CI and monorepos

CI for monorepos is where “works on my machine” goes to die publicly. Good.

Run lock / fetch in CI with --frozen (or project-equivalent flags) so manifest drift fails the pipeline instead of production.

Commit per-project Project.lock files (and workspace-level lock artifacts if your layout uses them—follow lockfile guide).

ApproachProsCons
One job per memberClear failuresMore CI minutes
Single job builds allCheaperHarder to see who broke
Affected detectionFast at scaleNeeds tooling investment

Start simple: build App + run Test target for each member you ship.

flowchart TD
  CI[CI pipeline] --> L[lock/fetch --frozen]
  L --> B1[build member A]
  L --> B2[build member B]
  B1 --> T1[test member A]

Checkout must include all member folders referenced by relative paths. Shallow clones that omit libs/ are a classic self-own.

The Beskid superrepo itself is an aggregate of submodules—your application monorepo is a smaller cousin. Same lesson: pin tool versions (beskid --version in logs).

07. The compiler is not your therapist