From c1b783d2a15360097dc3bd35c2cbf1826239ad7b Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Tue, 21 Apr 2026 22:58:22 -0700 Subject: [PATCH 1/5] ci: add RNTester build with prebuilt xcframework Add a new CI job that builds RNTester using the prebuilt React Core xcframework from the prebuild-macos-core pipeline. This validates the prebuilt artifact works in a real app before we publish it. The job uses RCT_TESTONLY_RNCORE_TARBALL_PATH (already supported by rncore.rb) to pass the xcframework tarball to pod install. Runs a smaller matrix (macOS + iOS, newarch only) to avoid duplicating the full RNTester matrix. Co-Authored-By: Claude Opus 4.6 --- .../microsoft-build-rntester-prebuilt.yml | 67 +++++++++++++++++++ .github/workflows/microsoft-pr.yml | 7 ++ 2 files changed, 74 insertions(+) create mode 100644 .github/workflows/microsoft-build-rntester-prebuilt.yml diff --git a/.github/workflows/microsoft-build-rntester-prebuilt.yml b/.github/workflows/microsoft-build-rntester-prebuilt.yml new file mode 100644 index 000000000000..7eac816858f7 --- /dev/null +++ b/.github/workflows/microsoft-build-rntester-prebuilt.yml @@ -0,0 +1,67 @@ +name: Build RNTester (Prebuilt) + +on: + workflow_call: + +jobs: + build-rntester-prebuilt: + name: "Prebuilt ${{ matrix.platform }}, ${{ matrix.arch }}" + runs-on: macos-26 + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + platform: [macos, ios] + arch: [newarch] + include: + # Platform-specific properties + - platform: macos + sdk: macosx + scheme: RNTester-macOS + packager_platform: macos + - platform: ios + sdk: iphonesimulator + scheme: RNTester + packager_platform: ios + # Architecture-specific properties + - arch: newarch + new_arch_enabled: '1' + + steps: + - uses: actions/checkout@v4 + with: + filter: blob:none + fetch-depth: 0 + + - name: Setup toolchain + uses: ./.github/actions/microsoft-setup-toolchain + with: + node-version: '22' + platform: ${{ matrix.platform }} + project-root: 'packages/rn-tester' + + - name: Install npm dependencies + run: yarn install + + - name: Download prebuilt xcframework + uses: actions/download-artifact@v4 + with: + name: ReactCoreDebug.xcframework.tar.gz + path: /tmp/prebuilt + + - name: Install Pods (with prebuilt) + working-directory: packages/rn-tester + env: + RCT_NEW_ARCH_ENABLED: ${{ matrix.new_arch_enabled }} + RCT_TESTONLY_RNCORE_TARBALL_PATH: /tmp/prebuilt/ReactCoreDebug.xcframework.tar.gz + run: | + set -eox pipefail + bundle install + bundle exec pod install --verbose + + - name: Build ${{ matrix.scheme }} + env: + USE_CCACHE: 0 + run: | + set -eox pipefail + .ado/scripts/xcodebuild.sh packages/rn-tester/RNTesterPods.xcworkspace ${{ matrix.sdk }} Debug ${{ matrix.scheme }} build diff --git a/.github/workflows/microsoft-pr.yml b/.github/workflows/microsoft-pr.yml index ee3a01e5dd01..c07fa6637e05 100644 --- a/.github/workflows/microsoft-pr.yml +++ b/.github/workflows/microsoft-pr.yml @@ -143,6 +143,12 @@ jobs: permissions: {} uses: ./.github/workflows/microsoft-prebuild-macos-core.yml + build-rntester-prebuilt: + name: "Build RNTester (Prebuilt)" + permissions: {} + needs: [prebuild-macos-core] + uses: ./.github/workflows/microsoft-build-rntester-prebuilt.yml + test-react-native-macos-init: name: "Test react-native-macos init" permissions: {} @@ -170,6 +176,7 @@ jobs: - javascript-tests - build-rntester - prebuild-macos-core + - build-rntester-prebuilt - test-react-native-macos-init # - react-native-test-app-integration steps: From e403f957137295d902b4f913925e5811ff7660ec Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Tue, 21 Apr 2026 23:02:41 -0700 Subject: [PATCH 2/5] ci: add visionOS to prebuilt RNTester matrix Co-Authored-By: Claude Opus 4.6 --- .github/workflows/microsoft-build-rntester-prebuilt.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/microsoft-build-rntester-prebuilt.yml b/.github/workflows/microsoft-build-rntester-prebuilt.yml index 7eac816858f7..cde84544f1de 100644 --- a/.github/workflows/microsoft-build-rntester-prebuilt.yml +++ b/.github/workflows/microsoft-build-rntester-prebuilt.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - platform: [macos, ios] + platform: [macos, ios, visionos] arch: [newarch] include: # Platform-specific properties @@ -23,6 +23,10 @@ jobs: sdk: iphonesimulator scheme: RNTester packager_platform: ios + - platform: visionos + sdk: xrsimulator + scheme: RNTester-visionOS + packager_platform: ios # Architecture-specific properties - arch: newarch new_arch_enabled: '1' From 2b55f65505517735ac38f4e70ec33594c42b21dc Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 22 Apr 2026 11:15:51 -0700 Subject: [PATCH 3/5] fix(ci): fix prebuilt macOS build and close upstream CI gaps - Fix UIKit/UIKit.h not found when building prebuilt xcframework on macOS by adding TARGET_OS_OSX platform guard to React-umbrella.h - Add DynamicFrameworks variant to RNTester build matrix (matches upstream test_ios_rntester_dynamic_frameworks, continue-on-error) - Add Node 24 to JavaScript test matrix (matches upstream test_js) Co-Authored-By: Claude Opus 4.6 --- .../workflows/microsoft-build-rntester.yml | 13 +++++++++++- .github/workflows/microsoft-pr.yml | 20 +++++++++++-------- .../scripts/ios-prebuild/React-umbrella.h | 4 ++++ 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/.github/workflows/microsoft-build-rntester.yml b/.github/workflows/microsoft-build-rntester.yml index 20797e8f8d07..76c801aac0a6 100644 --- a/.github/workflows/microsoft-build-rntester.yml +++ b/.github/workflows/microsoft-build-rntester.yml @@ -5,9 +5,11 @@ on: jobs: build-rntester: - name: "${{ matrix.platform }}, ${{ matrix.arch }}" + name: "${{ matrix.platform }}, ${{ matrix.arch }}${{ matrix.use_frameworks && ', DynamicFrameworks' || '' }}" runs-on: macos-26 timeout-minutes: 90 + # DynamicFrameworks is experimental; don't block PRs on it (matches upstream) + continue-on-error: ${{ matrix.use_frameworks == 'dynamic' }} strategy: fail-fast: false matrix: @@ -32,6 +34,14 @@ jobs: new_arch_enabled: '0' - arch: newarch new_arch_enabled: '1' + # DynamicFrameworks variant (matches upstream test_ios_rntester_dynamic_frameworks) + - platform: ios + arch: newarch + sdk: iphonesimulator + scheme: RNTester + packager_platform: ios + new_arch_enabled: '1' + use_frameworks: dynamic steps: - uses: actions/checkout@v4 @@ -53,6 +63,7 @@ jobs: working-directory: packages/rn-tester env: RCT_NEW_ARCH_ENABLED: ${{ matrix.new_arch_enabled }} + USE_FRAMEWORKS: ${{ matrix.use_frameworks }} run: | set -eox pipefail bundle install diff --git a/.github/workflows/microsoft-pr.yml b/.github/workflows/microsoft-pr.yml index c07fa6637e05..67b8435dc81d 100644 --- a/.github/workflows/microsoft-pr.yml +++ b/.github/workflows/microsoft-pr.yml @@ -104,32 +104,36 @@ jobs: run: yarn constraints javascript-tests: - name: "JavaScript Tests" + name: "JavaScript Tests (Node ${{ matrix.node-version }})" permissions: {} runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + node-version: ["24", "22"] steps: - uses: actions/checkout@v4 with: filter: blob:none fetch-depth: 0 - + - name: Setup toolchain uses: ./.github/actions/microsoft-setup-toolchain with: - node-version: '22' - + node-version: ${{ matrix.node-version }} + - name: Install npm dependencies run: yarn install - + - name: Run Jest tests run: yarn test-ci - + - name: Run Flow type checker run: yarn flow-check - + - name: Run ESLint run: yarn lint - + - name: Run Prettier format check run: yarn format-check diff --git a/packages/react-native/scripts/ios-prebuild/React-umbrella.h b/packages/react-native/scripts/ios-prebuild/React-umbrella.h index 45b365b92b9a..7567e809d9ee 100644 --- a/packages/react-native/scripts/ios-prebuild/React-umbrella.h +++ b/packages/react-native/scripts/ios-prebuild/React-umbrella.h @@ -6,7 +6,11 @@ */ #ifdef __OBJC__ +#if !TARGET_OS_OSX // [macOS] #import +#else // [macOS +#import +#endif // macOS] #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) From 05daae89b2f4e9ea719a6232d480c358601b7fa5 Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 22 Apr 2026 11:29:06 -0700 Subject: [PATCH 4/5] fix(ci): fix empty USE_FRAMEWORKS and allow Node 24 failures - Only set USE_FRAMEWORKS env var when matrix value is non-empty, fixing "Invalid linkage option" pod install error for all non- DynamicFrameworks jobs - Mark Node 24 JS tests as continue-on-error since upstream has pre-existing SSL test failures with Node 24's stricter defaults Co-Authored-By: Claude Opus 4.6 --- .github/workflows/microsoft-build-rntester.yml | 4 +++- .github/workflows/microsoft-pr.yml | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/microsoft-build-rntester.yml b/.github/workflows/microsoft-build-rntester.yml index 76c801aac0a6..10ef532cc315 100644 --- a/.github/workflows/microsoft-build-rntester.yml +++ b/.github/workflows/microsoft-build-rntester.yml @@ -63,9 +63,11 @@ jobs: working-directory: packages/rn-tester env: RCT_NEW_ARCH_ENABLED: ${{ matrix.new_arch_enabled }} - USE_FRAMEWORKS: ${{ matrix.use_frameworks }} run: | set -eox pipefail + if [[ -n "${{ matrix.use_frameworks }}" ]]; then + export USE_FRAMEWORKS="${{ matrix.use_frameworks }}" + fi bundle install bundle exec pod install --verbose diff --git a/.github/workflows/microsoft-pr.yml b/.github/workflows/microsoft-pr.yml index 67b8435dc81d..483a80b41b01 100644 --- a/.github/workflows/microsoft-pr.yml +++ b/.github/workflows/microsoft-pr.yml @@ -107,6 +107,8 @@ jobs: name: "JavaScript Tests (Node ${{ matrix.node-version }})" permissions: {} runs-on: ubuntu-latest + # Node 24 may have pre-existing test failures (e.g., stricter SSL); don't block PRs + continue-on-error: ${{ matrix.node-version == '24' }} strategy: fail-fast: false matrix: From d34d118098c3fe526ce4fc51e1cfdc768226ee9d Mon Sep 17 00:00:00 2001 From: Saad Najmi Date: Wed, 22 Apr 2026 13:51:47 -0700 Subject: [PATCH 5/5] fix(ci): revert Node version matrix for JavaScript tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop Node 24 testing — one Node version is sufficient for our CI. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/microsoft-pr.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/microsoft-pr.yml b/.github/workflows/microsoft-pr.yml index 483a80b41b01..94345c5ae6e6 100644 --- a/.github/workflows/microsoft-pr.yml +++ b/.github/workflows/microsoft-pr.yml @@ -104,15 +104,9 @@ jobs: run: yarn constraints javascript-tests: - name: "JavaScript Tests (Node ${{ matrix.node-version }})" + name: "JavaScript Tests" permissions: {} runs-on: ubuntu-latest - # Node 24 may have pre-existing test failures (e.g., stricter SSL); don't block PRs - continue-on-error: ${{ matrix.node-version == '24' }} - strategy: - fail-fast: false - matrix: - node-version: ["24", "22"] steps: - uses: actions/checkout@v4 with: @@ -122,7 +116,7 @@ jobs: - name: Setup toolchain uses: ./.github/actions/microsoft-setup-toolchain with: - node-version: ${{ matrix.node-version }} + node-version: '22' - name: Install npm dependencies run: yarn install