ci: test on macOS and Node 24 - #6096
Conversation
The matrix covered ubuntu with Node 20 and 22, which leaves two gaps. Node 24 is the active LTS; 20 reached end of life in April 2026 and 22 is in maintenance. So the versions being tested were a dead one and a maintenance one, with the release itself published from 22. 24 is added rather than dropping 20, since engines still allows it. More significantly, seven test files contain darwin-gated paths that have never run in CI - ios-project-service, ios-device-debug-service, debug-controller, xcode-select-service, ios-simulator-discovery, host-info and devices-service. On a CLI whose main job is building iOS apps, that was the untested part, and it is the source of the 13-test gap between the local and CI counts. One macOS leg on the LTS covers those without a full cross-product; runners are free on a public repo but the queue time is not. harden-runner only supports the Ubuntu runners, so it is now conditional.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe GitHub Actions test matrix now covers Ubuntu with Node.js 20.x, 22.x, and 24.x, plus macOS with Node.js 24.x. Job names include the operating system, and runner hardening remains Linux-only. ChangesCI test matrix
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
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 |
PR Checklist
What is the current behavior?
ubuntu-latestwith Node 20.x and 22.x — four gaps in one line.No macOS. Seven test files contain darwin-gated paths that have therefore never executed in CI:
ios-project-service,ios-device-debug-service,debug-controller,xcode-select-service,ios-simulator-discovery,host-info,devices-service. On a CLI whose primary job is building iOS apps, the iOS-specific logic is the part with no coverage. This is also the source of the count difference between local (1514) and CI (1501) — 13 tests that simply never run.No Node 24. Node 24 is the active LTS. Node 20 reached end of life in April 2026 and Node 22 is in maintenance — so the matrix tests a dead runtime and the maintenance one, while the release publishes from 22 and most users are on 24.
What is the new behavior?
ubuntu-latestmacos-latestFour jobs rather than a 3×2 cross-product. macOS runners are free on a public repo, but queue time is not, and one darwin leg is enough to cover platform-gated code — a second Node version there would re-run the same suite for very little.
Node 24 is added rather than 20 dropped, since
enginesstill declares>=20.0.0. Worth noting separately that permitting an end-of-life runtime is its own decision; this PR only makes the matrix match what is declared.harden-runneris now conditional onrunner.os == 'Linux'— it only supports the Ubuntu runners.Verification
Node 24 was validated locally before proposing it, rather than pushing and hoping:
npm run build.releasesucceeds on Node 24, and the built CLI reports its version and renders helpThe macOS leg is the one that cannot be pre-validated from a single machine — the point of adding it is to execute code no CI job has run before, so it is possible those 13 tests surface problems. That is the intent, and worth watching on the first run.
Summary by CodeRabbit