ci: no workflow runs any test suite, on any trigger #73
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by
Reviewer67r4while ruling on whether PR #67 should ship a regression guard. It was the decisive argument, and it generalises far past that PR.The gap
No workflow in this repository runs any test suite, on any trigger.
Those two matches are
runs-on: ubuntu-la**test**. There is nopnpm test, notsc --noEmit, nobiome check, anywhere in automation.deploy-store.ymlis: checkout → pnpm install →wait-for-catalog→build→wrangler pages deploy.build-publish.ymlbuilds and publishes the management container. Both fire only onpush: branches:[main]plusworkflow_dispatch.So:
The suites are real and substantial — around 91 tests in
apps/store, 238 inapps/management, pluspackages/catalog— and they execute nowhere except on a developer's or agent's machine.Why this is filed as its own issue rather than mentioned in passing
It changes what a green tick means, and several PRs in recent waves came close to leaning on that.
The repo's own
package.jsonandturbo.jsondefinetest,lintandbuildtasks, so the affordance exists and looks wired. TheREADMEand PR templates talk about verification. It is easy to assume, as at least two agents did, that merging runs something. The distinction matters most exactly when someone is deciding whether to trust automation instead of running commands locally.It also killed a real piece of work. PR #67 built a 623-line regression guard for a cascade defect that has recurred four times. Two independent arguments showed the guard graded the wrong artefact — but the decisive one was simpler: it would never have run. A test that executes on no trigger cannot defend anything, and its presence in the tree tells the next author the class is covered. The guard was deleted; #72 replaces it with a rendered-output check, and #72 explicitly depends on this issue, because a browser guard added today would not run either.
Scope
Add a workflow that runs the checks on pull requests and on pushes to
main:pnpm --filter <each package> test— per-package, not the root aggregate, so a failure names the packagetsc --noEmitper appbiome checkon the repositoryThree specifics that are not obvious and have each cost this repo real time:
biomeis not innode_modules. The only binary is the nix one onPATH. Sonpx biomefetches an unrelated registry package namedbiome(version 0.3.3), checks nothing, prints nothing, and exits 0. A CI step written withnpxwould produce a permanently green lint. Usepnpm exec biomeor the pinned nix binary, and assert the output containsChecked N files.biomeexits 0 on lint warnings. Its exit code tracks formatting and fixability, not findings. So an exit-code-only gate passes over real warnings. If warnings should fail CI, match onFound N warningsexplicitly — and noteglobals.csscurrently carries two pre-existing warnings (noImportantStylesat506:24,noDescendingSpecificityat764:1), so a strict gate must either fix or baseline those first.pnpm exec tsc --noEmitfrom the repo root fails withCommand "tsc" not found— a workspace artefact, not a type error. Run it from each app directory.Also decide whether the deploy workflows should depend on the check workflow. Today
push: maindeploys unconditionally, so a merge that breaks the build or the tests still ships. Given merging is a production release for two apps, gating the deploy on a green check is probably the point of this issue rather than a follow-up — but it is a deliberate decision, because it makes a flaky check block releases.Explicitly out of scope
Branch protection and required approvals. Related, and worth its own decision, but a check workflow is useful immediately without them.
Verification
npx biome, biome's exit code on warnings, a pipeline masking$?, andgit log --followtruncating at a rename).tscand a deliberately failingbiomeeach fail the job.Acceptance
Tests, typecheck and lint run automatically on pull requests and on pushes to
main; each has been observed failing on purpose at least once; the lint step uses a binary that actually checks and asserts on output rather than exit code alone; and whether a red check blocks the production deploy is a recorded decision.yuris referenced this issue2026-08-29 06:25:36 +00:00