From 8ca7841eac9e8421cf0f5ac2c8dff84d7966f3f9 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Wed, 22 Apr 2026 17:34:40 +0200 Subject: [PATCH 1/3] ci: Revert CI runners from Cirrus Labs back to GitHub-hosted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .github/workflows/buildandtest.yml | 14 +++++++------- .github/workflows/codegen.yml | 2 +- .github/workflows/e2e-v2.yml | 14 +++++++------- .github/workflows/native-tests.yml | 4 ++-- .github/workflows/sample-application-expo.yml | 2 +- .github/workflows/sample-application.yml | 6 +++--- .github/workflows/size-analysis.yml | 2 +- .github/workflows/testflight.yml | 2 +- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index bebfd989c0..d698383f94 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -17,7 +17,7 @@ jobs: job_test: name: Test - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: @@ -36,7 +36,7 @@ jobs: job_lint: name: Lint - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: @@ -103,7 +103,7 @@ jobs: job_check_integrity: name: Check package integrity - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: @@ -127,7 +127,7 @@ jobs: job_build: name: Build - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: @@ -169,7 +169,7 @@ jobs: job_type_check: name: Type Check Typescript 3.8 - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [job_build, diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} env: @@ -202,7 +202,7 @@ jobs: run: yarn type-check job_circular_dep_check: name: Circular Dependency Check - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [job_build, diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: @@ -231,7 +231,7 @@ jobs: job_bundle: name: Bundle - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [job_test, job_build, diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} strategy: diff --git a/.github/workflows/codegen.yml b/.github/workflows/codegen.yml index 9eecb2ad99..827351b298 100644 --- a/.github/workflows/codegen.yml +++ b/.github/workflows/codegen.yml @@ -16,7 +16,7 @@ jobs: uses: ./.github/workflows/skip-ci.yml codegen: - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} strategy: diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index db38b2d51c..fbcd7c2ce6 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -54,11 +54,11 @@ jobs: platform: ["ios", "android"] include: - platform: ios - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 name: iOS appPlain: performance-tests/test-app-plain.ipa - platform: android - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest name: Android appPlain: performance-tests/TestAppPlain/android/app/build/outputs/apk/release/app-release.apk steps: @@ -237,13 +237,13 @@ jobs: # Use Xcode 16 for older RN versions - platform: ios rn-version: '0.71.19' - runs-on: ["ghcr.io/cirruslabs/macos-sequoia-xcode:16.4", "runner_group_id:10"] + runs-on: macos-15 # Use Xcode 26 for newer RN versions (0.83.0) - platform: ios rn-version: '0.85.1' - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 - platform: android - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest exclude: # exclude all rn versions lower than 0.80.0 for new architecture - rn-version: '0.71.19' @@ -392,9 +392,9 @@ jobs: include: - platform: ios rn-version: '0.85.1' - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 - platform: android - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest steps: - name: Check if platform is needed diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 9bc9f69931..5109577452 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -33,7 +33,7 @@ jobs: test-ios: name: ios - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 needs: [diff_check, detect-changes] if: ${{ needs.diff_check.outputs.skip_ci != 'true' && needs.detect-changes.outputs.needs_ios == 'true' }} steps: @@ -104,7 +104,7 @@ jobs: test-android: name: android - runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + runs-on: ubuntu-latest needs: [diff_check, detect-changes] if: ${{ needs.diff_check.outputs.skip_ci != 'true' && needs.detect-changes.outputs.needs_android == 'true' }} steps: diff --git a/.github/workflows/sample-application-expo.yml b/.github/workflows/sample-application-expo.yml index c8a2b3dc3e..80085a0a76 100644 --- a/.github/workflows/sample-application-expo.yml +++ b/.github/workflows/sample-application-expo.yml @@ -36,7 +36,7 @@ jobs: build-ios: name: Build ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 needs: [diff_check, detect-changes] if: >- ${{ diff --git a/.github/workflows/sample-application.yml b/.github/workflows/sample-application.yml index 50512ada4f..587dafb7e0 100644 --- a/.github/workflows/sample-application.yml +++ b/.github/workflows/sample-application.yml @@ -44,7 +44,7 @@ jobs: build-ios: name: Build ${{ matrix.rn-architecture }} ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 needs: [diff_check, detect-changes] if: >- ${{ @@ -212,7 +212,7 @@ jobs: build-macos: name: Build legacy macos ${{ matrix.build-type }} - runs-on: ["ghcr.io/cirruslabs/macos-sequoia-xcode:16.4", "runner_group_id:10"] + runs-on: macos-15 needs: [diff_check, detect-changes] if: >- ${{ @@ -290,7 +290,7 @@ jobs: test-ios: name: Test ios production REV2 - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 needs: [diff_check, detect-changes, build-ios] if: >- ${{ diff --git a/.github/workflows/size-analysis.yml b/.github/workflows/size-analysis.yml index 11af329915..bc69cc4e9b 100644 --- a/.github/workflows/size-analysis.yml +++ b/.github/workflows/size-analysis.yml @@ -92,7 +92,7 @@ jobs: ios: needs: [ready-to-merge-gate] name: iOS Size Analysis - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 timeout-minutes: 45 steps: diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index b348f3d645..04312d1543 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -14,7 +14,7 @@ jobs: upload_to_testflight: name: Build and Upload React Native Sample to Testflight - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + runs-on: macos-26 needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: From f8149948fef2b0e05c15b29d4d13b7f9e24bc5e4 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Wed, 22 Apr 2026 18:09:59 +0200 Subject: [PATCH 2/3] Also remove comment mentions --- .github/workflows/e2e-v2.yml | 2 +- dev-packages/e2e-tests/cli.mjs | 5 ++--- dev-packages/e2e-tests/maestro/utils/warmup.yml | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index fbcd7c2ce6..605827b683 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -518,7 +518,7 @@ jobs: xcrun simctl bootstatus booted -b # Launch and dismiss Settings.app to ensure SpringBoard and system services # are fully initialized — this avoids Maestro connecting to a half-booted - # simulator on Cirrus Labs Tart VMs. + # simulator. xcrun simctl launch booted com.apple.Preferences sleep 5 xcrun simctl terminate booted com.apple.Preferences diff --git a/dev-packages/e2e-tests/cli.mjs b/dev-packages/e2e-tests/cli.mjs index fa111b001f..9a09e8d5c3 100755 --- a/dev-packages/e2e-tests/cli.mjs +++ b/dev-packages/e2e-tests/cli.mjs @@ -295,7 +295,7 @@ if (actions.includes('test')) { .filter(f => f.endsWith('.yml') && !f.startsWith('utils')) .sort((a, b) => { // Run crash.yml last — it kills the app via nativeCrash(), and - // post-crash simulator state can be flaky on Cirrus Labs Tart VMs. + // post-crash simulator state can be flaky. if (a === 'crash.yml') return 1; if (b === 'crash.yml') return -1; return a.localeCompare(b); @@ -304,8 +304,7 @@ if (actions.includes('test')) { console.log(`Discovered ${flowFiles.length} Maestro flows: ${flowFiles.join(', ')}`); // Warm up Maestro's driver connection before running test flows. - // The first Maestro launchApp after simulator boot can fail on Cirrus - // Labs Tart VMs because the IDB/XCUITest driver isn't fully connected. + // The first Maestro launchApp after simulator boot can fail if thedriver isn't fully connected. // Running a lightweight warmup flow ensures the driver is ready. const warmupFlow = path.join('maestro', 'utils', 'warmup.yml'); console.log('Warming up Maestro driver...'); diff --git a/dev-packages/e2e-tests/maestro/utils/warmup.yml b/dev-packages/e2e-tests/maestro/utils/warmup.yml index c41b35e39b..487d6ed020 100644 --- a/dev-packages/e2e-tests/maestro/utils/warmup.yml +++ b/dev-packages/e2e-tests/maestro/utils/warmup.yml @@ -2,8 +2,8 @@ appId: ${APP_ID} jsEngine: graaljs --- # Warm up Maestro's IDB/XCUITest driver connection on the simulator. -# The very first Maestro launchApp after simulator boot can fail on Cirrus -# Labs Tart VMs — running a lightweight flow first ensures the driver is +# The very first Maestro launchApp after simulator boot can fail, +# running a lightweight flow first ensures the driver is # fully connected before real test flows start. - launchApp: clearState: true From 83a1f6e7e0c5847cf0f8d5209d44b93192819d3f Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Wed, 22 Apr 2026 18:15:16 +0200 Subject: [PATCH 3/3] ci: Use iPhone 17 for sample app iOS tests on macos-26 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) --- .github/workflows/sample-application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sample-application.yml b/.github/workflows/sample-application.yml index 587dafb7e0..b6f24d76b8 100644 --- a/.github/workflows/sample-application.yml +++ b/.github/workflows/sample-application.yml @@ -19,7 +19,7 @@ env: IOS_APP_ARCHIVE_PATH: sentry-react-native-sample.app.zip 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' IOS_VERSION: '>=18.0' ANDROID_API_LEVEL: '30'