ci: cut a duplicate check job and de-flake the frontend suite - #554
Conversation
Two real problems, not just noise: checks weren't just numerous, one category of check (Detect changed areas) ran twice on every single push/PR since ci.yml and codeql.yml each computed the identical backend/frontend path split on their own separate runner, and the frontend test suite has genuinely flaked (RamFitBadge.test.tsx, repeatedly, requiring manual reruns) under CI's default vitest per-file parallelism. codeql.yml: moved path filtering from a runtime dorny/paths-filter job to the workflow trigger itself (on.push.paths/on.pull_request.paths). An irrelevant PR (workflow-only, docs-only) now never queues a runner for this workflow at all, instead of queuing one just to decide to skip. Tradeoff, stated plainly: a path-scoped trigger can't tell which language changed, only that something relevant did, so both the Go and JS/TS CodeQL scans now run together whenever this workflow runs, instead of each being independently skippable. Acceptable since CodeQL was never a required, merge-blocking check to begin with, only a security-scan signal. web/vitest.config.ts: fileParallelism: false. Every test file getting its own jsdom environment (vitest's default) contends for CPU on a resource-constrained runner badly enough that a React Query-driven async assertion (findByText) has repeatedly missed its default timeout, a resource-contention flake with nothing to do with the component or test logic, the exact class of issue this repo's own local dev workflow already works around case by case with a --no-file-parallelism flag. Making it the actual default here means every invocation (CI's plain npm test, anyone's local npm test) gets the reliable behavior without needing to remember a flag. Full local suite: 234/234 passing, every run, in ~50-65s (up from flaking a meaningful fraction of runs).
|
Warning Review limit reachedNext included review available in 56 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
|



Summary
Two real problems, not just check-list noise:
Detect changed areasran twice on every single push/PR (ci.ymlandcodeql.ymleach independently computed the same backend/frontend path split on a separate runner), and the frontend test suite has genuinely flaked (RamFitBadge.test.tsx, repeatedly, requiring manual reruns this session) under CI's default vitest per-file parallelism.codeql.yml: moved path filtering from a runtimedorny/paths-filterjob to the workflow trigger itself (on.push.paths/on.pull_request.paths). An irrelevant PR (workflow-only, docs-only) now never even queues a runner for this workflow, instead of queuing one just to decide to skip it. Tradeoff, stated plainly: a path-scoped trigger can't tell which language changed, only that something relevant did, so both the Go and JS/TS CodeQL scans now run together whenever this workflow runs, instead of each being independently skippable. Acceptable since CodeQL was never a required, merge-blocking check, only a security-scan signal.web/vitest.config.ts:fileParallelism: false. Every test file getting its own jsdom environment (vitest's default) contends for CPU on a resource-constrained runner badly enough that a React Query-driven async assertion (findByText) has repeatedly missed its default timeout — a resource-contention flake with nothing to do with the component or test logic, the exact class of issue this repo's own local dev workflow already works around case by case with a--no-file-parallelismflag. Making it the actual config default means every invocation (CI's plainnpm test, anyone's localnpm test) gets the reliable behavior without needing to remember a flag.What this does not do
ci.ymlitself; its ownchangesjob stays as the single source of truth for the backend/frontend split used by the required build/test/lint jobs.Test plan
npx tsc --noEmit: cleancodeql.ymlYAML syntax validated