From 88df9e5b9d1044ca827cd5ab3116a8db5c0f1f5b Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 25 Jun 2026 11:16:02 -0300 Subject: [PATCH 1/4] fix(ci): Cache Gradle wrapper and skip replay-stubs build for iOS Cache the Gradle wrapper distribution in CI to prevent timeout failures on Bitrise runners, and skip the replay-stubs Gradle build for iOS E2E builds since the JAR is only needed on Android. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/e2e-v2.yml | 21 +++++++++++++++++++++ dev-packages/e2e-tests/cli.mjs | 2 +- packages/core/package.json | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 6bcbcf9b78..02a4db9972 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -126,6 +126,13 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 + - uses: actions/cache@v4 + name: Cache Gradle Wrapper + if: ${{ steps.platform-check.outputs.skip != 'true' }} + with: + path: ~/.gradle/wrapper/dists + key: gradle-wrapper-${{ hashFiles('packages/core/android/replay-stubs/gradle/wrapper/gradle-wrapper.properties') }} + - name: Setup asdf Node.js (Bitrise) if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.runner_provider == 'bitrise' }} run: | @@ -397,6 +404,13 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 + - uses: actions/cache@v4 + name: Cache Gradle Wrapper + if: ${{ steps.platform-check.outputs.skip != 'true' }} + with: + path: ~/.gradle/wrapper/dists + key: gradle-wrapper-${{ hashFiles('packages/core/android/replay-stubs/gradle/wrapper/gradle-wrapper.properties') }} + - name: Setup Global Tools if: ${{ steps.platform-check.outputs.skip != 'true' }} run: | @@ -570,6 +584,13 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 + - uses: actions/cache@v4 + name: Cache Gradle Wrapper + if: ${{ steps.platform-check.outputs.skip != 'true' }} + with: + path: ~/.gradle/wrapper/dists + key: gradle-wrapper-${{ hashFiles('packages/core/android/replay-stubs/gradle/wrapper/gradle-wrapper.properties') }} + - name: Setup KVM if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} shell: bash diff --git a/dev-packages/e2e-tests/cli.mjs b/dev-packages/e2e-tests/cli.mjs index 44b9dae1d2..c942c18c25 100755 --- a/dev-packages/e2e-tests/cli.mjs +++ b/dev-packages/e2e-tests/cli.mjs @@ -108,7 +108,7 @@ function patchBoostIfNeeded(rnVersion, patchScriptsDir) { // Build and publish the SDK - we only need to do this once in CI. // Locally, we may want to get updates from the latest build so do it on every app build. if (actions.includes('create') || (env.CI === undefined && actions.includes('build'))) { - execSync(`yarn build`, { stdio: 'inherit', cwd: workspaceRootDir, env: env }); + execSync(`yarn build`, { stdio: 'inherit', cwd: workspaceRootDir, env: { ...env, PLATFORM: platform } }); execSync(`yalc publish --private`, { stdio: 'inherit', cwd: e2eDir, env: env }); execSync(`yalc publish`, { stdio: 'inherit', cwd: expoUploadSourcemapsPackageDir, env: env }); execSync(`yalc publish`, { stdio: 'inherit', cwd: corePackageDir, env: env }); diff --git a/packages/core/package.json b/packages/core/package.json index b11fff5566..7eb32d8a8c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -24,7 +24,7 @@ "build:tools": "tsc -p tsconfig.build.tools.json", "build:tools:watch": "tsc -p tsconfig.build.tools.json -w --preserveWatchOutput", "build:plugin": "EXPO_NONINTERACTIVE=true expo-module build plugin", - "build:replay-stubs": "cd android/replay-stubs && ./gradlew jar", + "build:replay-stubs": "[ \"$PLATFORM\" = \"ios\" ] && echo 'Skipping replay-stubs for iOS' && exit 0 || cd android/replay-stubs && ./gradlew jar", "build:tarball": "bash scripts/build-tarball.sh", "downlevel": "downlevel-dts dist ts3.8/dist --to=3.8", "clean": "rimraf dist coverage && yarn clean:plugin", From b28630ea0eaa2ea91a243622d48d866aba1519a6 Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 25 Jun 2026 11:27:21 -0300 Subject: [PATCH 2/4] fix(ci): Remove redundant Gradle wrapper cache steps setup-gradle already caches ~/.gradle/wrapper/dists. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/e2e-v2.yml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 02a4db9972..6bcbcf9b78 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -126,13 +126,6 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 - - uses: actions/cache@v4 - name: Cache Gradle Wrapper - if: ${{ steps.platform-check.outputs.skip != 'true' }} - with: - path: ~/.gradle/wrapper/dists - key: gradle-wrapper-${{ hashFiles('packages/core/android/replay-stubs/gradle/wrapper/gradle-wrapper.properties') }} - - name: Setup asdf Node.js (Bitrise) if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.runner_provider == 'bitrise' }} run: | @@ -404,13 +397,6 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 - - uses: actions/cache@v4 - name: Cache Gradle Wrapper - if: ${{ steps.platform-check.outputs.skip != 'true' }} - with: - path: ~/.gradle/wrapper/dists - key: gradle-wrapper-${{ hashFiles('packages/core/android/replay-stubs/gradle/wrapper/gradle-wrapper.properties') }} - - name: Setup Global Tools if: ${{ steps.platform-check.outputs.skip != 'true' }} run: | @@ -584,13 +570,6 @@ jobs: if: ${{ steps.platform-check.outputs.skip != 'true' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 - - uses: actions/cache@v4 - name: Cache Gradle Wrapper - if: ${{ steps.platform-check.outputs.skip != 'true' }} - with: - path: ~/.gradle/wrapper/dists - key: gradle-wrapper-${{ hashFiles('packages/core/android/replay-stubs/gradle/wrapper/gradle-wrapper.properties') }} - - name: Setup KVM if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} shell: bash From 5dfe1c95c5943ed26a884a82743c2c320a45bbb5 Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 25 Jun 2026 14:34:58 -0300 Subject: [PATCH 3/4] fix(ci): Skip Java and Gradle setup for iOS E2E jobs Java and Gradle are only needed for Android builds. With replay-stubs now skipped for iOS, there is no reason to install them on iOS runners. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/e2e-v2.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 6bcbcf9b78..2e5bb55586 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -117,13 +117,13 @@ jobs: run: sudo apt-get update && sudo apt-get install -y ninja-build - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5 - if: ${{ steps.platform-check.outputs.skip != 'true' }} + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} with: java-version: "17" distribution: "adopt" - name: Gradle cache - if: ${{ steps.platform-check.outputs.skip != 'true' }} + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 - name: Setup asdf Node.js (Bitrise) @@ -388,13 +388,13 @@ jobs: run: sudo apt-get update && sudo apt-get install -y ninja-build - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5 - if: ${{ steps.platform-check.outputs.skip != 'true' }} + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} with: java-version: "17" distribution: "adopt" - name: Gradle cache - if: ${{ steps.platform-check.outputs.skip != 'true' }} + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 - name: Setup Global Tools @@ -561,13 +561,13 @@ jobs: run: sudo apt-get update && sudo apt-get install -y ninja-build - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5 - if: ${{ steps.platform-check.outputs.skip != 'true' }} + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} with: java-version: "17" distribution: "adopt" - name: Gradle cache - if: ${{ steps.platform-check.outputs.skip != 'true' }} + if: ${{ steps.platform-check.outputs.skip != 'true' && matrix.platform == 'android' }} uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6 - name: Setup KVM From 11a4107ffb887ebd60a5cedc48a7293a1767a23e Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 25 Jun 2026 17:43:58 -0300 Subject: [PATCH 4/4] fix(ci): Set PLATFORM env var for yarn build in E2E workflow Without it, build:replay-stubs defaults to running Gradle on iOS jobs where Java is not installed, causing CI failures. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/e2e-v2.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 2e5bb55586..eb03cb8cc4 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -170,6 +170,8 @@ jobs: - name: Build SDK if: ${{ steps.platform-check.outputs.skip != 'true' }} run: yarn build + env: + PLATFORM: ${{ matrix.platform }} - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 if: ${{ steps.platform-check.outputs.skip != 'true' }}