Skip to content

ci: fast PR gate + nightly full verify — Verify job off PRs (CIX-1) - #380

Merged
eliotlim merged 4 commits into
mainfrom
ci/fast-gate-nightly-verify
Oct 8, 2026
Merged

eliotlim merged 4 commits into
mainfrom
ci/fast-gate-nightly-verify

Conversation

@eliotlim

@eliotlim eliotlim commented Oct 7, 2026

Copy link
Copy Markdown
Collaborator

Problem

PR CI's Verify job takes ~36 min, ~32 of which is the serial-PGlite server vitest suite — it dwarfs every other job (shards run 3–6 min) and gates nothing the shards don't already exercise at merge-relevant speed. Board: OB CIX-1.

Solution

Split Verify: a fast Gate (typecheck · lint · unit) job runs on PRs (secrets guard, eslint-rules tests, check:gen, all-package typecheck, all-package lint, sdk/ui/app/mcp unit suites via an explicit --filter allowlist, reusing the byte-identical libs cache), and a new nightly-verify workflow (06:30 UTC cron + workflow_dispatch) runs the full pnpm run verify including the server suite, maintaining a pinned "Nightly verify failing" issue (create/pin on failure, comment/unpin/close on recovery; pin mutations non-fatal). All other CI jobs are byte-identical. Alternative considered: sharding the server vitest suite on PRs — deferred; nightly + on-demand dispatch covers it without PR cost. New deps: none.

Before / After

Behavior Before After
PR CI wall-clock critical path ~36 min (Verify) ~6 min (Gate; shards unchanged at 3–6 min) — no visual change
Server vitest + server/mcp e2e coverage every PR nightly + workflow_dispatch (alert issue on failure)
typecheck/lint/unit (sdk·ui·app·mcp)/secrets guard/check:gen every PR (inside Verify) every PR (inside Gate) — unchanged coverage
push-to-main Verify ran removed (owner directive; nightly + dispatch cover main)

Test procedure

  • pnpm run test:eslint-rules && pnpm run typecheck && pnpm run lint — pass (worktree, foreground)
  • bash scripts/check-no-private-keys.sh && pnpm run check:gen && pnpm --filter @book.dev/sdk --filter @book.dev/ui --filter @book.dev/app --filter @book.dev/mcp --if-present run test — pass
  • YAML parse of all 4 workflows + bash -n of the embedded alert script + 9 mocked issue-lifecycle cases — pass
  • Live proof after merge: trigger gh workflow run nightly-verify.yml and confirm the full run + (on a forced failure branch, optional) the alert issue path.

Operational notes

  • Server-suite breakage on main now surfaces at the nightly run (or on-demand dispatch), not at merge — accepted trade-off (owner-approved 2026-10-07).
  • Known gap (review-accepted): the shared libs-cache key doesn't hash packages/sdk/tsconfig.build.json, packages/ui/vite.viewer.config.js, packages/ui/scripts/**; a PR breaking only those passes the Gate and is caught nightly. Fixing requires changing the key in all 6 jobs at once — separate PR if wanted.
  • Optional owner action: add "Gate (typecheck · lint · unit)" + shard names as required checks in ruleset 17633066 (nothing requires the old Verify name today).
  • Reverting = restoring the old verify job; no state/migration involved.

Verify status: gate-equivalent commands green locally (full 36-min verify unchanged, runs nightly) · Reviews cleared: code (Quinn — FINDINGS F1–F3+N3 applied via pre-endorsed fixes @ 125cbe6)

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
app.book.pub Ready Ready Preview Oct 8, 2026 11:50am UTC

Request Review

@eliotlim
eliotlim merged commit 97f3b62 into main Oct 8, 2026
13 checks passed

This branch was successfully deployed

1 active deployment
Preview — bcb437a7 Deployed Oct 8, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant