From b480a8e1bdccc8840fbd6d5f551dd2def51db3ed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:34:32 +0000 Subject: [PATCH 1/8] Initial plan From f6b4396cda7632880e0452a2ca2ede4dd279ab80 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:38:57 +0000 Subject: [PATCH 2/8] feat: add GitHub Actions PR workflow mirroring Azure Pipelines PR checks Co-authored-by: Saadnajmi <6722175+Saadnajmi@users.noreply.github.com> --- .github/workflows/pr.yml | 301 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 .github/workflows/pr.yml diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000000..17da938d4d --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,301 @@ +name: PR +on: pull_request + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + js: + name: JS PR + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup the toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + with: + node-version: 22 + + - name: Install dependencies + run: yarn + + - name: Check change files + run: yarn checkchange + + - name: Check prettier + run: yarn prettier + + - name: Run lint-lockfile + run: yarn lint-lockfile + + - name: Build CI + run: yarn buildci + + - name: Verify API and ensure changed files + run: yarn check-for-changed-files + + android: + name: Android PR + runs-on: macos-latest + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup the toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + with: + platform: android + node-version: 22 + + - name: Install dependencies + run: yarn + + - name: Build packages + run: yarn build + + - name: Bundle Android + run: yarn bundle:android + working-directory: apps/fluent-tester + + # Android E2E tests are currently disabled + # - name: Build Android APK + # ... + # - name: Run E2E Android tests + # ... + + macos: + name: macOS PR + runs-on: macos-15 + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup the toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + with: + platform: macos + node-version: 22 + xcode-developer-dir: /Applications/Xcode_16.4.app + + - name: Install dependencies + run: yarn + + - name: Build packages + run: yarn build + + - name: Bundle macOS + run: | + set -eox pipefail + yarn bundle:macos + working-directory: apps/fluent-tester + + - name: Pod install + run: | + set -eox pipefail + pod install --verbose + working-directory: apps/fluent-tester/macos + + - name: Build macOS app + run: | + set -eox pipefail + ./.ado/scripts/xcodebuild.sh apps/fluent-tester/macos/FluentTester.xcworkspace macosx ReactTestApp build + env: + CCACHE_DISABLE: 1 + + - name: Prepare E2E macOS tests + run: yarn e2eprep:macos + working-directory: apps/E2E + + - name: Run E2E macOS tests + run: yarn e2etest:macos + working-directory: apps/E2E + + - name: Upload E2E macOS artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: E2E_macos_Dump + path: | + apps/E2E/reports + apps/E2E/errorShots + + ios: + name: iOS PR + runs-on: macos-15 + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup the toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + with: + platform: ios + node-version: 22 + xcode-developer-dir: /Applications/Xcode_16.4.app + + - name: Install dependencies + run: yarn + + - name: Build packages + run: yarn build + + - name: Bundle iOS + run: | + set -eox pipefail + yarn bundle:ios + working-directory: apps/fluent-tester + + - name: Pod install + run: | + set -eox pipefail + pod install --verbose + working-directory: apps/fluent-tester/ios + + - name: Build iOS app + run: | + set -eox pipefail + ./.ado/scripts/xcodebuild.sh apps/fluent-tester/ios/FluentTester.xcworkspace iphonesimulator ReactTestApp build + env: + CCACHE_DISABLE: 1 + + # iOS E2E tests are currently disabled + # - name: Prepare E2E iOS tests + # run: yarn e2eprep:ios + # working-directory: apps/E2E + # - name: Run E2E iOS tests + # run: yarn e2etest:ios + # working-directory: apps/E2E + + windows: + name: Windows PR + runs-on: windows-latest + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 5 + + - name: Setup the toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + with: + platform: windows + node-version: 22 + + - name: Install dependencies + run: yarn + + - name: Build packages + run: yarn build + + - name: Bundle Windows + run: yarn bundle:windows + working-directory: apps/fluent-tester + + - name: Install WinAppDriver 1.1 + run: | + Invoke-WebRequest https://github.com/microsoft/WinAppDriver/releases/download/v1.1/WindowsApplicationDriver.msi -OutFile $env:RUNNER_TEMP\WinAppDriver.msi + Start-Process msiexec -ArgumentList "/quiet","/x","{087BBF93-D9E3-4D27-BDBE-9C702E0066FC}" -Verb runAs -Wait + Start-Process msiexec -ArgumentList "/quiet","/i","$env:RUNNER_TEMP\WinAppDriver.msi" -Verb runAs -Wait + shell: powershell + + - name: Generate UWP app + run: yarn install-windows-test-app + working-directory: apps/fluent-tester + + - name: Build UWP app + run: yarn windows --arch x64 --logging --no-packager --no-launch + working-directory: apps/fluent-tester + + - name: Prepare E2E Windows tests + run: yarn e2eprep:windows + working-directory: apps/E2E + + - name: Run E2E UWP tests + run: yarn e2etest:windows + working-directory: apps/E2E + + - name: Upload E2E Windows artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: E2E_UWP_Dump + path: | + apps/E2E/reports + apps/E2E/errorShots + + win32: + name: Win32 PR + runs-on: windows-latest + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup the toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + with: + platform: windows + node-version: 22 + + - name: Install dependencies + run: yarn + + - name: Build packages + run: yarn build + + - name: Bundle Win32 + run: yarn bundle + working-directory: apps/win32 + + - name: Install WinAppDriver 1.1 + run: | + Invoke-WebRequest https://github.com/microsoft/WinAppDriver/releases/download/v1.1/WindowsApplicationDriver.msi -OutFile $env:RUNNER_TEMP\WinAppDriver.msi + Start-Process msiexec -ArgumentList "/quiet","/x","{087BBF93-D9E3-4D27-BDBE-9C702E0066FC}" -Verb runAs -Wait + Start-Process msiexec -ArgumentList "/quiet","/i","$env:RUNNER_TEMP\WinAppDriver.msi" -Verb runAs -Wait + shell: powershell + + - name: Prepare E2E Win32 tests + run: yarn e2eprep:win32 + working-directory: apps/E2E + + - name: Run E2E Win32 tests + run: yarn e2etest:win32 + working-directory: apps/E2E + + - name: Upload E2E Win32 artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: E2E_win32_Dump + path: | + apps/E2E/reports + apps/E2E/errorShots + + test-links: + name: Test repo links + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup the toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + with: + node-version: 22 + + - name: Install dependencies + run: yarn + + - name: Test markdown links + run: | + find . -name \*.md -not -name CHANGELOG.md -not -path '*/node_modules/*' -print0 | xargs -0 -n1 yarn test-links -c $(pwd)/.ado/markdown-link-check-config.json From de87f11c19e10f3c5695544d9dd095bc162d6f5a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:40:24 +0000 Subject: [PATCH 3/8] fix: add explicit permissions to PR workflow to limit GITHUB_TOKEN scope Co-authored-by: Saadnajmi <6722175+Saadnajmi@users.noreply.github.com> --- .github/workflows/pr.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 17da938d4d..6e14a7bae0 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,6 +1,9 @@ name: PR on: pull_request +permissions: + contents: read + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true From 672a85cad4256345fa6e20fed559b6a0f2360af5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 19:13:08 +0000 Subject: [PATCH 4/8] feat: add catch-all PR job that depends on all other checks Co-authored-by: Saadnajmi <6722175+Saadnajmi@users.noreply.github.com> --- .github/workflows/pr.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 6e14a7bae0..f762e21a30 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -302,3 +302,18 @@ jobs: - name: Test markdown links run: | find . -name \*.md -not -name CHANGELOG.md -not -path '*/node_modules/*' -print0 | xargs -0 -n1 yarn test-links -c $(pwd)/.ado/markdown-link-check-config.json + + pr: + name: PR + runs-on: ubuntu-latest + needs: + - js + - android + - macos + - ios + - windows + - win32 + - test-links + steps: + - name: All required jobs passed + run: echo "All required jobs completed." From f2d89cd6cdd7c34c7e29efa991875bc4899a212b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 01:12:38 +0000 Subject: [PATCH 5/8] fix: resolve Windows SDK version mismatch on windows-latest runner Co-authored-by: Saadnajmi <6722175+Saadnajmi@users.noreply.github.com> --- .github/workflows/pr.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f762e21a30..c8bcf89160 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -211,11 +211,11 @@ jobs: shell: powershell - name: Generate UWP app - run: yarn install-windows-test-app + run: yarn install-windows-test-app --use-nuget working-directory: apps/fluent-tester - name: Build UWP app - run: yarn windows --arch x64 --logging --no-packager --no-launch + run: yarn windows --arch x64 --logging --no-packager --no-launch --msbuildprops WindowsTargetPlatformVersion=10.0.22621.0 working-directory: apps/fluent-tester - name: Prepare E2E Windows tests From 30cf1d4020e1097fead5cfceebd475090cd40cf9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 02:05:25 +0000 Subject: [PATCH 6/8] chore: update setup-toolchain to 5.0.14 Co-authored-by: Saadnajmi <6722175+Saadnajmi@users.noreply.github.com> --- .github/workflows/pr.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c8bcf89160..3954e12e50 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -19,8 +19,8 @@ jobs: with: fetch-depth: 0 - - name: Setup the toolchain - uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + - name: Set up toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@5.0.14 with: node-version: 22 @@ -50,8 +50,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup the toolchain - uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + - name: Set up toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@5.0.14 with: platform: android node-version: 22 @@ -80,8 +80,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup the toolchain - uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + - name: Set up toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@5.0.14 with: platform: macos node-version: 22 @@ -137,8 +137,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup the toolchain - uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + - name: Set up toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@5.0.14 with: platform: ios node-version: 22 @@ -187,8 +187,8 @@ jobs: with: fetch-depth: 5 - - name: Setup the toolchain - uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + - name: Set up toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@5.0.14 with: platform: windows node-version: 22 @@ -243,8 +243,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup the toolchain - uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + - name: Set up toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@5.0.14 with: platform: windows node-version: 22 @@ -291,8 +291,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup the toolchain - uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@4.4.5 + - name: Set up toolchain + uses: microsoft/react-native-test-app/.github/actions/setup-toolchain@5.0.14 with: node-version: 22 From 3e2a40c557b712edd3839290810351ed648bc46b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 02:32:36 +0000 Subject: [PATCH 7/8] fix: use Windows SDK 10.0.26100.0 (the only SDK available on windows-latest) Co-authored-by: Saadnajmi <6722175+Saadnajmi@users.noreply.github.com> --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3954e12e50..dd8cbe8226 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -215,7 +215,7 @@ jobs: working-directory: apps/fluent-tester - name: Build UWP app - run: yarn windows --arch x64 --logging --no-packager --no-launch --msbuildprops WindowsTargetPlatformVersion=10.0.22621.0 + run: yarn windows --arch x64 --logging --no-packager --no-launch --msbuildprops WindowsTargetPlatformVersion=10.0.26100.0 working-directory: apps/fluent-tester - name: Prepare E2E Windows tests From 3f4049572c4e068904ad56c7e57b37ccec0512a5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 04:33:55 +0000 Subject: [PATCH 8/8] chore: delete old Azure Pipelines PR checks Co-authored-by: Saadnajmi <6722175+Saadnajmi@users.noreply.github.com> --- .ado/azure-pipelines.yml | 204 --------------------------------------- 1 file changed, 204 deletions(-) delete mode 100644 .ado/azure-pipelines.yml diff --git a/.ado/azure-pipelines.yml b/.ado/azure-pipelines.yml deleted file mode 100644 index d7bc027547..0000000000 --- a/.ado/azure-pipelines.yml +++ /dev/null @@ -1,204 +0,0 @@ -pr: - - main - -variables: - - template: variables/vars.yml - -jobs: - # Dedicated task to build JS code, including jest tests, snapshot testing, and linting, because these things can be super - # time consuming they don't need to run on every CI pass, instead do a dedicated JS loop to make the platform specific tests start quicker - - job: JSPR - displayName: JS PR - pool: - vmImage: 'ubuntu-latest' - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - - steps: - - checkout: self - persistCredentials: true - - - template: templates/setup-repo.yml - - - script: | - yarn checkchange - displayName: 'check change' - - - script: | - yarn prettier - displayName: 'check prettier' - - - script: | - yarn lint-lockfile - displayName: 'run lint-lockfile' - - - script: | - yarn buildci - displayName: 'yarn buildci [test]' - - - script: | - yarn check-for-changed-files - displayName: 'verify API and Ensure Changed Files' - - - job: AndroidPR - displayName: Android PR - pool: - vmImage: 'macos-latest' - variables: - platform: 'android' - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - - steps: - - checkout: self - persistCredentials: true - - # setup repo basics - - template: templates/setup-repo-min-build.yml - - # package android bundle - - script: | - yarn bundle:$(platform) - workingDirectory: apps/fluent-tester - displayName: 'yarn bundle $(platform)' - - # builds a debug apk and runs E2E tests on it - # Disable as Android E2E tests are failing - # - template: templates/e2e-testing-android.yml - - - job: macOSPR - displayName: macOS PR - pool: - vmImage: $(VmImageApple) - variables: - platform: 'macos' - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - - steps: - - checkout: self - persistCredentials: true - - - template: templates/setup-repo-min-build.yml - - - template: templates/apple-tools-setup.yml - - - script: | - set -eox pipefail - yarn bundle:macos - workingDirectory: apps/fluent-tester - displayName: 'yarn bundle macos' - - - bash: | - set -eox pipefail - pod install --verbose - workingDirectory: apps/fluent-tester/macos - displayName: 'pod install' - - - task: CmdLine@2 - displayName: Build macOS - inputs: - script: | - set -eox pipefail - ./.ado/scripts/xcodebuild.sh apps/fluent-tester/macos/FluentTester.xcworkspace macosx ReactTestApp build - env: - CCACHE_DISABLE: 1 - - - template: templates/e2e-testing-macos.yml - - - job: iOSPR - displayName: iOS PR - pool: - vmImage: $(VmImageApple) - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - - steps: - - checkout: self - persistCredentials: true - - - template: templates/setup-repo-min-build.yml - - - template: templates/apple-tools-setup.yml - - - script: | - set -eox pipefail - yarn bundle:ios - workingDirectory: apps/fluent-tester - displayName: 'yarn bundle ios' - - - bash: | - set -eox pipefail - pod install --verbose - workingDirectory: apps/fluent-tester/ios - displayName: 'pod install' - - - task: CmdLine@2 - displayName: Build iOS - inputs: - script: | - set -eox pipefail - ./.ado/scripts/xcodebuild.sh apps/fluent-tester/ios/FluentTester.xcworkspace iphonesimulator ReactTestApp build - env: - CCACHE_DISABLE: 1 - - # Disable iOS E2E tests as they fail on macOS-13 images - # - template: templates/e2e-testing-ios.yml - - # Windows bundling and end to end testing - - job: WindowsPR - displayName: Windows PR - pool: - name: rnw-pool-4 - demands: ImageOverride -equals rnw-img-vs2022-node22 - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - - # The "displayName" of all steps that execute a command within our repo (such as 'yarn build') start lowercase to make it - # easier to differentiate in-repo scripts from environmental setup. This makes it easier to understand CI pipeline results. - steps: - - checkout: self - persistCredentials: true - fetchDepth: 5 - - # yarn and minimal build to get set up - - template: templates/setup-repo-min-build.yml - - # bundle windows adn do end to end tests - - template: templates/e2e-testing-uwp.yml - - # Win32 bundling and end to end testing - - job: Win32PR - displayName: Win32 PR - pool: - name: rnw-pool-4 - demands: ImageOverride -equals rnw-img-vs2022-node22 - timeoutInMinutes: 60 - cancelTimeoutInMinutes: 5 - - steps: - - checkout: self - persistCredentials: true - - # yarn and minimal build to get set up - - template: templates/setup-repo-min-build.yml - - # bundle win32 and do end to end tests - - template: templates/e2e-testing-win32.yml - - # Dedicated task to make sure link on repo are functional. - - job: TestLinks - displayName: Test repo links - pool: cxe-ubuntu-20-04-small - timeoutInMinutes: 60 # how long to run the job before automatically cancelling - cancelTimeoutInMinutes: 5 # how much time to give 'run always even if cancelled tasks' before killing them - - steps: - - checkout: self - persistCredentials: true - - - template: templates/setup-repo.yml - - - script: | - find . -name \*.md -not -name CHANGELOG.md -not -path '*/\node_modules/*' -print0 | xargs -0 -n1 yarn test-links -c `pwd`/.ado/markdown-link-check-config.json - displayName: 'testing links'