From 01428848d885fe739ab8c28e967b143eee371ece Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 11 Jun 2026 15:19:12 -0300 Subject: [PATCH] chore(ci): Prepare macOS workflows for dual Cirrus/Bitrise runners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add runner_provider matrix dimension to all macOS CI jobs so they can run on both Cirrus and Bitrise. Bitrise jobs use continue-on-error so they won't block CI. Jobs won't actually run on Bitrise yet until the pool is provisioned — this prepares the ground to enable it. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/e2e-v2.yml | 70 ++++++++++++++++--- .github/workflows/native-tests.yml | 24 ++++++- .github/workflows/sample-application-expo.yml | 25 ++++++- .github/workflows/sample-application.yml | 63 ++++++++++++++--- .github/workflows/size-analysis.yml | 28 +++++++- .github/workflows/testflight.yml | 29 +++++++- 6 files changed, 207 insertions(+), 32 deletions(-) diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 51168125f8..5f7ff91f97 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -39,7 +39,8 @@ jobs: uses: ./.github/workflows/skip-ci-noauth.yml secrets: inherit metrics: - runs-on: ${{ matrix.runs-on }} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || matrix.runs-on }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check, detect-changes, auth_token_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' && needs.auth_token_check.outputs.skip_ci != 'true' && !startsWith(github.ref, 'refs/heads/release/') }} env: @@ -52,6 +53,7 @@ jobs: matrix: rn-architecture: ['legacy', 'new'] platform: ["ios", "android"] + runner_provider: ["cirrus", "bitrise"] include: - platform: ios runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] @@ -61,6 +63,9 @@ jobs: runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] name: Android appPlain: performance-tests/TestAppPlain/android/app/build/outputs/apk/release/app-release.apk + exclude: + - platform: android + runner_provider: bitrise steps: - name: Check if platform is needed id: platform-check @@ -113,8 +118,23 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6 - - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + - uses: actions/cache@v4 + name: Cache Ruby if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'ios' }} + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'ios' && matrix.runner_provider == 'bitrise' }} + run: | + brew upgrade ruby-build + rbenv install -s + + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'ios' && matrix.runner_provider != 'bitrise' }} with: ruby-version: '3.3.0' @@ -215,8 +235,9 @@ jobs: sauce-key: ${{ secrets.SAUCE_ACCESS_KEY }} react-native-build: - name: Build RN ${{ matrix.rn-version }} ${{ matrix.rn-architecture }} ${{ matrix.engine }} ${{ matrix.platform }} ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} - runs-on: ${{ matrix.runs-on }} + name: Build RN ${{ matrix.rn-version }} ${{ matrix.rn-architecture }} ${{ matrix.engine }} ${{ matrix.platform }} ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON(format('["bitrise_pool_name:{0}"]', matrix.macos_version)) || matrix.runs-on }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check, detect-changes, auth_token_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' && needs.auth_token_check.outputs.skip_ci != 'true' && !startsWith(github.ref, 'refs/heads/release/') }} env: @@ -235,17 +256,21 @@ jobs: build-type: ['production'] ios-use-frameworks: ['no', 'static', 'dynamic'] engine: ['hermes'] + runner_provider: ['cirrus', 'bitrise'] include: # 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"] + macos_version: sequoia # 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"] + macos_version: tahoe - platform: android runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + macos_version: none exclude: # exclude all rn versions lower than 0.80.0 for new architecture - rn-version: '0.71.19' @@ -270,6 +295,9 @@ jobs: - rn-version: '0.82.1' platform: 'ios' ios-use-frameworks: 'dynamic' + # only run bitrise for macOS (iOS) jobs + - platform: 'android' + runner_provider: 'bitrise' steps: - name: Check if platform is needed @@ -348,8 +376,23 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} run: yarn install - - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + - uses: actions/cache@v4 + name: Cache Ruby if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'ios' }} + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'ios' && matrix.runner_provider == 'bitrise' }} + run: | + brew upgrade ruby-build + rbenv install -s + + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'ios' && matrix.runner_provider != 'bitrise' }} with: ruby-version: '3.3.0' @@ -365,7 +408,7 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.build-type == 'production' }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: ${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }}-app-package + name: ${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }}-${{ matrix.runner_provider }}-app-package path: dev-packages/e2e-tests/RnDiffApp.ap* retention-days: 1 @@ -373,17 +416,18 @@ jobs: if: ${{ always() && steps.platform-check.outputs.skip != 'true' }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: rn-build-logs-${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }} + name: rn-build-logs-${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }}-${{ matrix.runner_provider }} path: dev-packages/e2e-tests/react-native-versions/${{ matrix.rn-version }}/RnDiffApp/ios/*.log react-native-test: name: Test RN ${{ matrix.rn-version }} ${{ matrix.rn-architecture }} ${{ matrix.engine }} ${{ matrix.platform }} ${{ - matrix.build-type }} ${{ matrix.ios-use-frameworks }} + matrix.build-type }} ${{ matrix.ios-use-frameworks }} on ${{matrix.runner_provider}} needs: [react-native-build, diff_check, detect-changes] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} - runs-on: ${{ matrix.runs-on }} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || matrix.runs-on }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} strategy: fail-fast: false # keeps matrix running if one fails matrix: @@ -393,12 +437,16 @@ jobs: build-type: ['production'] ios-use-frameworks: ['no'] # test only no frameworks engine: ['hermes'] + runner_provider: ['cirrus', 'bitrise'] include: - platform: ios rn-version: '0.85.1' runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] - platform: android runs-on: ["ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04", "runner_group_id:10"] + exclude: + - platform: android + runner_provider: bitrise steps: - name: Check if platform is needed @@ -438,7 +486,7 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.build-type == 'production' }} uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: - name: ${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }}-app-package + name: ${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }}-${{ matrix.runner_provider }}-app-package path: dev-packages/e2e-tests - name: Enable Corepack @@ -538,6 +586,6 @@ jobs: if: ${{ always() && steps.platform-check.outputs.skip != 'true' }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: ${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }}-logs + name: ${{ matrix.rn-version }}-${{ matrix.rn-architecture }}-${{ matrix.engine }}-${{ matrix.platform }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks }}-${{ matrix.runner_provider }}-logs path: | ./dev-packages/e2e-tests/maestro-logs diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 39c9fcc7e0..613f609ee0 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -32,10 +32,15 @@ jobs: caller_ref: ${{ github.ref }} test-ios: - name: ios - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + name: ios on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || fromJSON('["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"]') }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check, detect-changes] if: ${{ needs.diff_check.outputs.skip_ci != 'true' && needs.detect-changes.outputs.needs_ios == 'true' }} + strategy: + fail-fast: false + matrix: + runner_provider: ["cirrus", "bitrise"] steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -51,7 +56,22 @@ jobs: - name: Install SDK JS Dependencies run: yarn install + - uses: actions/cache@v4 + name: Cache Ruby + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: matrix.runner_provider == 'bitrise' + run: | + brew upgrade ruby-build + rbenv install -s + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: matrix.runner_provider != 'bitrise' with: ruby-version: '3.3.0' env: diff --git a/.github/workflows/sample-application-expo.yml b/.github/workflows/sample-application-expo.yml index 2b17eedf3e..a4ec4f3e28 100644 --- a/.github/workflows/sample-application-expo.yml +++ b/.github/workflows/sample-application-expo.yml @@ -35,8 +35,9 @@ jobs: caller_ref: ${{ github.ref }} 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"] + name: Build ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || fromJSON('["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"]') }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check, detect-changes] if: >- ${{ @@ -51,6 +52,7 @@ jobs: matrix: ios-use-frameworks: ['no-frameworks', 'dynamic-frameworks'] build-type: ['dev', 'production'] + runner_provider: ['cirrus', 'bitrise'] steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -64,7 +66,24 @@ jobs: cache: 'yarn' cache-dependency-path: yarn.lock + - uses: actions/cache@v4 + name: Cache Ruby + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: matrix.runner_provider == 'bitrise' + working-directory: samples/expo + run: | + brew upgrade ruby-build + rbenv install -s + bundle install + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: matrix.runner_provider != 'bitrise' with: working-directory: samples/expo ruby-version: '3.3.0' # based on what is used in the sample @@ -129,7 +148,7 @@ jobs: if: ${{ always() }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: build-sample-expo-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-logs + name: build-sample-expo-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-${{ matrix.runner_provider }}-logs path: samples/expo/ios/*.log build-android: diff --git a/.github/workflows/sample-application.yml b/.github/workflows/sample-application.yml index 1b32c5b277..81e3c40d01 100644 --- a/.github/workflows/sample-application.yml +++ b/.github/workflows/sample-application.yml @@ -43,8 +43,9 @@ jobs: caller_ref: ${{ github.ref }} 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"] + name: Build ${{ matrix.rn-architecture }} ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || fromJSON('["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"]') }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check, detect-changes] if: >- ${{ @@ -60,6 +61,7 @@ jobs: rn-architecture: ['new'] ios-use-frameworks: ['no-frameworks'] build-type: ['dev', 'production'] + runner_provider: ['cirrus', 'bitrise'] steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -73,7 +75,24 @@ jobs: cache: 'yarn' cache-dependency-path: yarn.lock + - uses: actions/cache@v4 + name: Cache Ruby + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: matrix.runner_provider == 'bitrise' + working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }} + run: | + brew upgrade ruby-build + rbenv install -s + bundle install + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: matrix.runner_provider != 'bitrise' with: working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }} ruby-version: '3.3.0' # based on what is used in the sample @@ -123,7 +142,7 @@ jobs: if: ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: sample-rn-${{ matrix.rn-architecture }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-ios + name: sample-rn-${{ matrix.rn-architecture }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-ios-${{ matrix.runner_provider }} path: ${{ env.IOS_APP_ARCHIVE_PATH }} retention-days: 1 @@ -131,7 +150,7 @@ jobs: if: ${{ always() }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: build-sample-${{ matrix.rn-architecture }}-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-logs + name: build-sample-${{ matrix.rn-architecture }}-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-${{ matrix.runner_provider }}-logs path: ${{ env.REACT_NATIVE_SAMPLE_PATH }}/ios/*.log build-android: @@ -211,8 +230,9 @@ jobs: path: ${{ env.REACT_NATIVE_SAMPLE_PATH }}/android/*.log build-macos: - name: Build legacy macos ${{ matrix.build-type }} - runs-on: ["ghcr.io/cirruslabs/macos-sequoia-xcode:16.4", "runner_group_id:10"] + name: Build legacy macos ${{ matrix.build-type }} on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:sequoia"]') || fromJSON('["ghcr.io/cirruslabs/macos-sequoia-xcode:16.4", "runner_group_id:10"]') }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check, detect-changes] if: >- ${{ @@ -226,6 +246,7 @@ jobs: fail-fast: false matrix: build-type: ['dev', 'production'] + runner_provider: ['cirrus', 'bitrise'] steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -239,7 +260,24 @@ jobs: cache: 'yarn' cache-dependency-path: yarn.lock + - uses: actions/cache@v4 + name: Cache Ruby + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: matrix.runner_provider == 'bitrise' + working-directory: samples/react-native-macos + run: | + brew upgrade ruby-build + rbenv install -s + bundle install + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: matrix.runner_provider != 'bitrise' with: working-directory: samples/react-native-macos ruby-version: '3.3.0' # based on what is used in the sample @@ -285,12 +323,13 @@ jobs: if: ${{ always() }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: build-sample-legacy-macos-${{ matrix.build-type }}-no-frameworks-logs + name: build-sample-legacy-macos-${{ matrix.build-type }}-no-frameworks-${{ matrix.runner_provider }}-logs path: samples/react-native-macos/macos/*.log test-ios: - name: Test ios production REV2 - runs-on: ["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"] + name: Test ios production REV2 on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || fromJSON('["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"]') }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check, detect-changes, build-ios] if: >- ${{ @@ -298,6 +337,10 @@ jobs: && needs.detect-changes.outputs.needs_sample_react_native == 'true' && (needs.detect-changes.outputs.sample_react_native == 'true' || needs.detect-changes.outputs.needs_ios == 'true') }} + strategy: + fail-fast: false + matrix: + runner_provider: ['cirrus', 'bitrise'] steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -309,7 +352,7 @@ jobs: - name: Download iOS App Archive uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: - name: sample-rn-new-production-no-frameworks-ios + name: sample-rn-new-production-no-frameworks-ios-${{ matrix.runner_provider }} path: ${{ env.REACT_NATIVE_SAMPLE_PATH }} - name: Unzip iOS App Archive diff --git a/.github/workflows/size-analysis.yml b/.github/workflows/size-analysis.yml index c5b2a5144b..9ab90a9a18 100644 --- a/.github/workflows/size-analysis.yml +++ b/.github/workflows/size-analysis.yml @@ -91,9 +91,14 @@ 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"] + name: iOS Size Analysis on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || fromJSON('["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"]') }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} timeout-minutes: 45 + strategy: + fail-fast: false + matrix: + runner_provider: ['cirrus', 'bitrise'] steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -108,7 +113,24 @@ jobs: cache: 'yarn' cache-dependency-path: yarn.lock + - uses: actions/cache@v4 + name: Cache Ruby + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: matrix.runner_provider == 'bitrise' + working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }} + run: | + brew upgrade ruby-build + rbenv install -s + bundle install + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: matrix.runner_provider != 'bitrise' with: working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }} ruby-version: '3.3.0' @@ -171,5 +193,5 @@ jobs: if: ${{ always() }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: size-analysis-ios-logs + name: size-analysis-ios-${{ matrix.runner_provider }}-logs path: ${{ env.REACT_NATIVE_SAMPLE_PATH }}/ios/xcodebuild-size-analysis.log diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index 9acb9817e0..83df223488 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -13,13 +13,36 @@ jobs: uses: ./.github/workflows/skip-ci.yml 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"] + name: Build and Upload React Native Sample to Testflight on ${{matrix.runner_provider}} + runs-on: ${{ matrix.runner_provider == 'bitrise' && fromJSON('["bitrise_pool_name:tahoe"]') || fromJSON('["ghcr.io/cirruslabs/macos-tahoe-xcode:26.2.0", "runner_group_id:10"]') }} + continue-on-error: ${{ matrix.runner_provider == 'bitrise' }} needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} + strategy: + fail-fast: false + matrix: + runner_provider: ['cirrus', 'bitrise'] steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + + - uses: actions/cache@v4 + name: Cache Ruby + with: + path: | + ~/.rbenv/versions + ~/.rbenv/cache + key: ruby-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.ruby-version') }} + + - name: Install Ruby (Bitrise) + if: matrix.runner_provider == 'bitrise' + working-directory: samples/react-native + run: | + brew upgrade ruby-build + rbenv install -s + bundle install + - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1 + if: matrix.runner_provider != 'bitrise' with: working-directory: samples/react-native ruby-version: '3.3.0' # based on what is used in the sample @@ -73,6 +96,6 @@ jobs: - name: Upload Xcode Archive uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: sentry-react-native-sample-xcode-archive-for-testflight + name: sentry-react-native-sample-xcode-archive-for-testflight-${{ matrix.runner_provider }} path: samples/react-native/sentryreactnativesample.xcarchive retention-days: 1