From 87b77f115c714b7a21e18179c136385efc35b744 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Wed, 26 Aug 2026 06:21:52 -0700 Subject: [PATCH] Add Maestro Cloud CI for RNTester (#58151) Summary: Run the release RNTester Maestro flows in Maestro Cloud for iOS and Android on pushes to main and same-repository pull requests. Reuse the existing build artifacts and read both the API key and project ID from repository secrets. The existing local Maestro jobs remain unchanged because debug flows require a running bundler that is unavailable in Maestro Cloud. Changelog: [Internal] Differential Revision: D117513755 --- .github/workflows/test-all.yml | 97 ++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index d2c63d84396..41444d477a9 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -163,6 +163,55 @@ jobs: use-prebuilds: true flavor: ${{ matrix.flavor }} + test_maestro_cloud_ios: + name: Maestro Cloud iOS RNTester + needs: test_ios_rntester + if: | + needs.test_ios_rntester.result == 'success' && + ( + (github.event_name == 'push' && github.ref == 'refs/heads/main') || + ( + github.event_name == 'pull_request' && + github.event.pull_request.head.repo.full_name == github.repository && + github.actor != 'dependabot[bot]' + ) + ) + runs-on: ubuntu-latest + timeout-minutes: 75 + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + - name: Download RNTester app + uses: actions/download-artifact@v7 + with: + name: RNTesterApp-NewArch-Release + path: /tmp/RNTesterBuild/RNTester.app + - name: Validate Maestro Cloud inputs + env: + MAESTRO_CLOUD_API_KEY: ${{ secrets.MAESTRO_CLOUD_API_KEY }} + MAESTRO_CLOUD_PROJECT_ID: ${{ secrets.MAESTRO_CLOUD_PROJECT_ID }} + run: | + test -n "$MAESTRO_CLOUD_API_KEY" + test -n "$MAESTRO_CLOUD_PROJECT_ID" + test -d /tmp/RNTesterBuild/RNTester.app + test -z "$(find packages/rn-tester/.maestro -type l -print -quit)" + - name: Run flows on Maestro Cloud + uses: mobile-dev-inc/action-maestro-cloud@5759506b4ec7ee0a1ece4b7e6574bba2b282f241 # v3.0.1 + with: + api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }} + project-id: ${{ secrets.MAESTRO_CLOUD_PROJECT_ID }} + app-file: /tmp/RNTesterBuild/RNTester.app + workspace: packages/rn-tester/.maestro + branch: ${{ github.head_ref || github.ref_name }} + name: RNTester iOS - ${{ github.event.pull_request.title || github.event.head_commit.message }} + exclude-tags: android-only + env: | + APP_ID=com.meta.RNTester.localDevelopment + maestro-cli-version: 2.6.1 + timeout: 60 + test_e2e_ios_rntester: needs: test_ios_rntester if: ${{ needs.test_ios_rntester.result == 'success' }} @@ -329,6 +378,54 @@ jobs: release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }} gradle-cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }} + test_maestro_cloud_android: + name: Maestro Cloud Android RNTester + needs: build_android + if: | + needs.build_android.result == 'success' && + ( + (github.event_name == 'push' && github.ref == 'refs/heads/main') || + ( + github.event_name == 'pull_request' && + github.event.pull_request.head.repo.full_name == github.repository && + github.actor != 'dependabot[bot]' + ) + ) + runs-on: ubuntu-latest + timeout-minutes: 75 + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + - name: Download RNTester APK + uses: actions/download-artifact@v7 + with: + name: rntester-release + path: /tmp/rntester-android + - name: Validate Maestro Cloud inputs + env: + MAESTRO_CLOUD_API_KEY: ${{ secrets.MAESTRO_CLOUD_API_KEY }} + MAESTRO_CLOUD_PROJECT_ID: ${{ secrets.MAESTRO_CLOUD_PROJECT_ID }} + run: | + test -n "$MAESTRO_CLOUD_API_KEY" + test -n "$MAESTRO_CLOUD_PROJECT_ID" + test -f /tmp/rntester-android/app-arm64-v8a-release.apk + test -z "$(find packages/rn-tester/.maestro -type l -print -quit)" + - name: Run flows on Maestro Cloud + uses: mobile-dev-inc/action-maestro-cloud@5759506b4ec7ee0a1ece4b7e6574bba2b282f241 # v3.0.1 + with: + api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }} + project-id: ${{ secrets.MAESTRO_CLOUD_PROJECT_ID }} + app-file: /tmp/rntester-android/app-arm64-v8a-release.apk + workspace: packages/rn-tester/.maestro + branch: ${{ github.head_ref || github.ref_name }} + name: RNTester Android - ${{ github.event.pull_request.title || github.event.head_commit.message }} + env: | + APP_ID=com.facebook.react.uiapp + maestro-cli-version: 2.6.1 + timeout: 60 + test_e2e_android_rntester: needs: build_android if: ${{ needs.build_android.result == 'success' }}