FLO-161: Harden CI — lint/typecheck/test quality gate on node 22 / yarn 4#3
Conversation
Turn CI from build-only into a real quality gate. New ci.yml runs on push to main and on every PR: yarn install --immutable, yarn lint, yarn typecheck, yarn test — failing the build if any step fails. - Node 22 (LTS) via actions/setup-node@v4 with yarn cache. - Corepack enabled before setup-node so the pinned Yarn 4 resolves and the cache folder is discoverable. - --immutable enforces a single in-sync lockfile (yarn.lock); no npm remains. - Lint fails on errors only; pre-existing warnings stay non-blocking per the eslint config rationale. - README documents the CI gate. Closes FLO-161. Co-Authored-By: Paperclip <noreply@paperclip.ing>
|
Warning Review limit reached
Your plan currently allows 1 review/hour. Refill in 50 minutes and 38 seconds. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more review capacity refills, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
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
Turns CI from build-only into a real quality gate and locks the toolchain to Node 22 (LTS) + Yarn 4 via Corepack.
New workflow
.github/workflows/ci.ymlruns on push tomainand every PR:Acceptance criteria
npminvocation anywhere.package-lock.jsonalready gone (removed in FLO-158), onlyyarn.lockremains;--immutableenforces sync.DISABLE_ESLINT_PLUGINfully absent from the repo (grep clean); lint runs as its own step.Verification (local, on clean branch)
yarn lint→ 0 errors, 6 pre-existing warnings (non-blocking by design) → exit 0yarn typecheck→ exit 0 (skipLibCheckkeeps zod v4 node_modules noise out)yarn test→ 117/117 passyarn install --immutable→ exit 0 (lockfile in sync)GitHub Actions CI run on this PR is the green-on-clean-branch evidence. Failing-case check: each gate is a separate
run:step, so a non-zero exit from eslint (error), tsc, or vitest fails thequality-gatejob — standard GitHub Actions step semantics.Design notes (decision lenses)
cache: yarnstep; no custom cache wiring.--max-warnings 0: the 6 warnings are pre-existing and the eslint config explicitly chose not to gate on them. A future ticket can drive warnings to zero and then tighten.Closes FLO-161.
🤖 Generated with Claude Code