ci: skip device smoke lanes when a PR changes no lane input
Merged
TH
2d ago+357+357+012345678901234567890123456789-88-88-01234567890123456789
Summary
A PR that only changes unit tests (*.test.ts / __tests__/ under src/ or packages/*/src/) no longer runs the device smoke lanes. iOS smoke already worked this way. Android, Linux, the macOS phase of Apple, and the web smoke steps in CI now use the same affected-check rule: a lane runs only when selectChecks picks one of its checks. Pushes to main, empty or unknown diffs, and fail-open plans (scripts/, .github/, package.json, …) still run every lane.
scripts/device-lane-impact.ts <check-id>...holds the shared rule.apple-ci-impact.tsnow uses it for iOS smoke, XCTest, and the new macOS selection.- The macOS phase also runs when the darwin-only bridge-proof inputs change.
- Apple skips the build when neither phase is selected. The final status guard expects
skippedfor every unselected phase. - Scope: the lanes also route by platform family, as iOS already did. For example, an Android-only change skips Linux, web, and macOS.
- 9 files changed.
Example: #3898, which only changed a test file, now skips Android and Linux.
Validation
At d0c85f95b7c6be5ce7f63713e95e6045e9e85949:
pnpm typecheck,pnpm check:fallow,check:gate-manifest, and theagent-guidance,docs-prose,production-exports,affected-selector, anddepgraphgates pass.vitest run scripts/__tests__/{device-lane,apple-ci}-impact.test.ts: 59 passed.check:affected --run --headfailed open to the full set.vitest-relatedran 17,008 tests with 11 timeouts under host load around 950. All 8 failing files pass when rerun alone (65 tests). The gates after it did not run locally, so CI is authoritative for them.- Risk: family routing for Android, Linux, and web has not had the 90-day replay that iOS got. Pushes to main still run every lane as the backstop.
🤖 Generated with Claude Code