Commit 1faff16
ci(github-actions): build all 16 images and run the unit groups on every PR
The gap that let a twelve-day outage go unnoticed. Two properties conspired:
`pnpm build` on a laptop passes regardless, because tsconfig.base.json is
sitting right there on disk — the missing COPY only exists inside the image —
and a failed Railway deploy is silent, because the previous container keeps
serving and the health check keeps passing. So the Docker build only ever ran
in production, and production only ever whispered when it broke.
This moves that build to the pull request, where it fails loudly and early.
Sixteen images in one matrix, fail-fast off so a single broken image cannot
hide the state of the other fifteen. The two build shapes are both covered and
they are genuinely different: frontends build from the repo root because they
need the pnpm workspace, packages/ and tsconfig.base.json; services build from
their own directory with a self-contained tsconfig. A per-file audit could not
tell them apart — "does this Dockerfile copy a tsconfig?" answered yes for all
sixteen while six were broken — so only an actual build catches this class.
Nothing is pushed anywhere. The artifact is the exit code.
No submodule checkout: clients/ is gitignored out of the Railway build context
and no Dockerfile COPYs it, so fetching it here would only buy a credentials
problem.
Five unit groups run, mirroring scripts/test-all.sh. Group I (e2e) is
deliberately excluded — it drives a real backend chain over a live WebSocket
and wants NATS plus SurrealDB, so without service containers it would produce a
red badge that means nothing, which is worse than no badge. Follow-up.
design:drift runs non-gating behind `|| true`, because it reports 99 known
F6/F8 failures today. It is there to keep that number visible and to catch the
contrast checks, which do pass 30/30. Drop the `|| true` once the debt burns down.
Verified before committing: all five test commands pass locally, both build
shapes were spot-checked with a real docker build, and the YAML parses to three
jobs with sixteen matrix entries.
Files changed:
- .github/workflows/ci.yml (new — the repo had only pages.yml, so nothing built
and nothing tested)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PZJvZWco3z7SR2dEhFqEjA1 parent 4676e5f commit 1faff16
1 file changed
Lines changed: 126 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
0 commit comments