ci: Revert CI runners from Cirrus Labs back to GitHub-hosted#6032
ci: Revert CI runners from Cirrus Labs back to GitHub-hosted#6032
Conversation
Cirrus Labs is being discontinued — swap every `ghcr.io/cirruslabs/*` runner label back to the GitHub-hosted equivalent: - ubuntu-runner-amd64:24.04 → ubuntu-latest - macos-tahoe-xcode:26.2.0 → macos-26 (GA since 2026-02-26) - macos-sequoia-xcode:16.4 → macos-15 Only the runner labels change in this commit. The Tart-VM-specific workarounds (simulator warm-up, `wait_for_boot`, MAESTRO_DRIVER_STARTUP_TIMEOUT, TOOLCHAINS env, dual corepack paths, Swiftly block, extra CocoaPods install) are intentionally left in place — they'll be cleaned up in a follow-up once CI is green on GitHub runners. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Android (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 04207c4+dirty | 459.19 ms | 518.54 ms | 59.35 ms |
| a50b33d+dirty | 500.81 ms | 532.11 ms | 31.30 ms |
| 4953e94+dirty | 442.02 ms | 456.52 ms | 14.50 ms |
| 0d9949d+dirty | 403.57 ms | 437.00 ms | 33.43 ms |
| 3d377b5+dirty | 406.18 ms | 453.52 ms | 47.34 ms |
| df5d108+dirty | 527.06 ms | 603.58 ms | 76.52 ms |
| 3ce5254+dirty | 410.57 ms | 448.48 ms | 37.91 ms |
| 2c735cc+dirty | 414.09 ms | 438.47 ms | 24.38 ms |
| 7d6fd3a+dirty | 403.02 ms | 422.56 ms | 19.54 ms |
| 3817909+dirty | 406.67 ms | 416.58 ms | 9.91 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 04207c4+dirty | 43.75 MiB | 48.12 MiB | 4.37 MiB |
| a50b33d+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
| 4953e94+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
| 0d9949d+dirty | 43.75 MiB | 48.13 MiB | 4.37 MiB |
| 3d377b5+dirty | 43.75 MiB | 48.14 MiB | 4.39 MiB |
| df5d108+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
| 3ce5254+dirty | 43.75 MiB | 48.12 MiB | 4.37 MiB |
| 2c735cc+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
| 7d6fd3a+dirty | 43.75 MiB | 48.14 MiB | 4.39 MiB |
| 3817909+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
📲 Install BuildsAndroid
|
iOS (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7ac3378+dirty | 1213.37 ms | 1218.15 ms | 4.78 ms |
| 4b87b12+dirty | 1212.90 ms | 1222.09 ms | 9.19 ms |
| 890d145+dirty | 1223.59 ms | 1231.37 ms | 7.78 ms |
| 0d9949d+dirty | 1211.38 ms | 1219.67 ms | 8.29 ms |
| 04207c4+dirty | 1191.27 ms | 1189.78 ms | -1.48 ms |
| 3ce5254+dirty | 1219.93 ms | 1221.90 ms | 1.96 ms |
| 4953e94+dirty | 1212.06 ms | 1214.83 ms | 2.77 ms |
| 2c735cc+dirty | 1229.67 ms | 1221.50 ms | -8.17 ms |
| a50b33d+dirty | 1197.74 ms | 1197.17 ms | -0.57 ms |
| df5d108+dirty | 1225.90 ms | 1220.14 ms | -5.76 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7ac3378+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 4b87b12+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
| 890d145+dirty | 3.38 MiB | 4.77 MiB | 1.38 MiB |
| 0d9949d+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 04207c4+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 3ce5254+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 4953e94+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 2c735cc+dirty | 3.38 MiB | 4.74 MiB | 1.35 MiB |
| a50b33d+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| df5d108+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
Android (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 04207c4+dirty | 395.40 ms | 456.55 ms | 61.15 ms |
| a50b33d+dirty | 353.21 ms | 398.48 ms | 45.27 ms |
| 4953e94+dirty | 398.80 ms | 431.81 ms | 33.01 ms |
| 0d9949d+dirty | 414.88 ms | 428.68 ms | 13.81 ms |
| 3d377b5+dirty | 425.38 ms | 440.67 ms | 15.30 ms |
| df5d108+dirty | 434.82 ms | 447.39 ms | 12.57 ms |
| 3ce5254+dirty | 373.90 ms | 427.84 ms | 53.94 ms |
| 2c735cc+dirty | 435.20 ms | 459.48 ms | 24.28 ms |
| 7d6fd3a+dirty | 435.06 ms | 458.78 ms | 23.72 ms |
| 3817909+dirty | 357.52 ms | 391.52 ms | 34.00 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 04207c4+dirty | 43.94 MiB | 48.98 MiB | 5.04 MiB |
| a50b33d+dirty | 43.94 MiB | 48.94 MiB | 5.00 MiB |
| 4953e94+dirty | 43.94 MiB | 48.94 MiB | 5.00 MiB |
| 0d9949d+dirty | 43.94 MiB | 48.99 MiB | 5.05 MiB |
| 3d377b5+dirty | 43.94 MiB | 49.00 MiB | 5.06 MiB |
| df5d108+dirty | 43.94 MiB | 48.94 MiB | 5.00 MiB |
| 3ce5254+dirty | 43.94 MiB | 48.98 MiB | 5.04 MiB |
| 2c735cc+dirty | 43.94 MiB | 48.94 MiB | 5.00 MiB |
| 7d6fd3a+dirty | 43.94 MiB | 49.00 MiB | 5.06 MiB |
| 3817909+dirty | 43.94 MiB | 48.94 MiB | 5.00 MiB |
iOS (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7ac3378+dirty | 1202.35 ms | 1198.31 ms | -4.04 ms |
| 4b87b12+dirty | 1199.49 ms | 1199.78 ms | 0.29 ms |
| 890d145+dirty | 1212.98 ms | 1220.10 ms | 7.12 ms |
| 0d9949d+dirty | 1203.94 ms | 1202.27 ms | -1.67 ms |
| 04207c4+dirty | 1228.55 ms | 1226.04 ms | -2.51 ms |
| 3ce5254+dirty | 1217.70 ms | 1224.69 ms | 6.99 ms |
| 4953e94+dirty | 1217.41 ms | 1223.53 ms | 6.12 ms |
| 2c735cc+dirty | 1223.33 ms | 1224.38 ms | 1.04 ms |
| a50b33d+dirty | 1207.11 ms | 1212.10 ms | 5.00 ms |
| df5d108+dirty | 1207.34 ms | 1210.50 ms | 3.16 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 7ac3378+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 4b87b12+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
| 890d145+dirty | 3.38 MiB | 4.77 MiB | 1.38 MiB |
| 0d9949d+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 04207c4+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 3ce5254+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 4953e94+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 2c735cc+dirty | 3.38 MiB | 4.74 MiB | 1.35 MiB |
| a50b33d+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| df5d108+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
GitHub-hosted macos-26 runner only ships iOS 26.x simulator runtimes, so the previous 'iPhone 16 / iOS >=18.0' requirement matched no device. 'iPhone 17' is the default current-gen simulator on macos-26 and still satisfies '>=18.0'. Matches what e2e-v2.yml already uses. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
| ANDROID_APP_ARCHIVE_PATH: sentry-react-native-sample.apk.zip | ||
| REACT_NATIVE_SAMPLE_PATH: samples/react-native | ||
| IOS_DEVICE: 'iPhone 16' | ||
| IOS_DEVICE: 'iPhone 17' |
There was a problem hiding this comment.
IOS_DEVICE bumped to 'iPhone 17' while IOS_VERSION remains '>=18.0'
The default simulator device was changed from 'iPhone 16' to 'iPhone 17' as part of a PR whose stated scope is reverting runner labels only. The 'iPhone 17' simulator is only available with Xcode 26 / iOS 26 runtimes, but IOS_VERSION still allows iOS >=18.0. If the macos-26 runner image does not ship the iPhone 17 simulator (or an iOS 18.x runtime paired with it), simulator selection in downstream e2e/test steps will fail, breaking the sample-application workflow. This also appears to be an unintended side effect outside the PR's documented scope.
Verification
Reviewed the hunk and PR description. The PR explicitly states 'Only runner labels change in this PR', yet line 22 changes IOS_DEVICE from 'iPhone 16' to 'iPhone 17' — a behavioral change unrelated to runner labels. IOS_VERSION on line 23 remains '>=18.0', creating a potential mismatch with the new device which is iOS 26-era hardware.
Identified by Warden code-review, find-bugs · RND-JRU
Semver Impact of This PR⚪ None (no version bump detected) 📋 Changelog PreviewThis is how your changes will appear in the changelog.
🤖 This preview updates automatically when you update the PR. |
📢 Type of change
📜 Description
Swap every
ghcr.io/cirruslabs/*runner label in.github/workflows/back to the GitHub-hosted equivalent.ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04ubuntu-latestghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0macos-26ghcr.io/cirruslabs/macos-sequoia-xcode:16.4macos-15Touched workflows:
buildandtest.yml(all 7 jobs)codegen.ymle2e-v2.yml(metrics / react-native-build / react-native-test)native-tests.ymlsample-application.ymlsample-application-expo.ymlsize-analysis.ymltestflight.ymlOnly runner labels change in this PR. The Tart-VM-specific workarounds layered on top during the migration — simulator warm-up,
wait_for_boot,MAESTRO_DRIVER_STARTUP_TIMEOUT,TOOLCHAINS: XcodeDefaultenv, dualcorepack enable/npm i -g corepackpaths, the Swiftly+Swift 6 lint block, manual CocoaPods/Ninja installs, Maestro retries, and e2e test assertion relaxations — are intentionally left in place. They become unnecessary or simplifiable on GitHub runners, but stripping them in the same PR would obscure what broke. A cleanup PR follows once this one is green.💡 Motivation and Context
Cirrus Labs runners are being discontinued, so we need to move back to GitHub-hosted runners.
macos-26(macOS Tahoe / Xcode 26.2) has been generally available on GitHub since 2026-02-26, which removes the original reason for the Cirrus move.Migration history for context: #5485, #5675, #5696.
💚 How did you test it?
Draft PR with
ready-to-mergelabel so the full suite — E2E, native tests, sample application builds, size analysis — runs on the new runners.📝 Checklist
sendDefaultPIIis enabled🔮 Next steps
Follow-up PR to remove the Cirrus-specific workarounds once CI is green here:
TOOLCHAINS: com.apple.dt.toolchain.XcodeDefaultfrom iOS build steps.wait_for_boot: true/erase_before_boot: false,xcrun simctl bootstatus, Settings.app launch, andMAESTRO_DRIVER_STARTUP_TIMEOUToverride.sample-application.ymltest-ios.Enable Corepack (NPM)/Enable Corepackdual steps to a singlecorepack enable.gem install cocoapods+RBENV_VERSION: systemblock fromnative-tests.ymltest-ios (GH macOS runners ship CocoaPods).dev-packages/e2e-tests/cli.mjsandsamples/react-native/e2e/utils/maestro.ts.>= 1, app-start envelope scanning).🤖 Generated with Claude Code