From 9a30d884f086536075f46cbe9b3b8808a6e1bcb5 Mon Sep 17 00:00:00 2001 From: war-in Date: Thu, 19 Mar 2026 15:14:23 +0100 Subject: [PATCH 1/6] fix: ignore fmt check when building React Native artifacts --- .github/workflows/publishReactNativeAndroidArtifacts.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publishReactNativeAndroidArtifacts.yml b/.github/workflows/publishReactNativeAndroidArtifacts.yml index f045c4d68d690..646477f610fd3 100644 --- a/.github/workflows/publishReactNativeAndroidArtifacts.yml +++ b/.github/workflows/publishReactNativeAndroidArtifacts.yml @@ -126,7 +126,7 @@ jobs: name: Build and Publish React Native Artifacts runs-on: ${{ github.repository_owner == 'Expensify' && 'blacksmith-16vcpu-ubuntu-2404' || 'blacksmith-2vcpu-ubuntu-2404' }} needs: verifyPatches - if: needs.verifyPatches.outputs.build_targets != '' + if: needs.verifyPatches.outputs.build_targets != '' strategy: # Disable fail-fast to prevent cancelling both jobs when only one needs to be stopped due to concurrency limits fail-fast: false @@ -160,7 +160,7 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 - + - name: Determine new patched RN version id: getNewPatchedVersion run: echo "NEW_PATCHED_VERSION=$(./.github/scripts/getNewPatchedRNVersion.sh)" >> "$GITHUB_OUTPUT" @@ -175,7 +175,7 @@ jobs: echo "Version: ${{ env.PATCHED_VERSION }}" echo "Patches hash: ${{ env.PATCHES_HASH }}" export ORG_GRADLE_PROJECT_reactNativeArchitectures="armeabi-v7a,arm64-v8a,x86,x86_64" - ./gradlew buildReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true -x lint -x test -x check + ./gradlew buildReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true -x lint -x test -x check -x ktfmtCheck ./gradlew publishReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true env: GH_PUBLISH_ACTOR: ${{ github.actor }} From 5ac6d47930885798e08ba6e2b51c2eeb8581c414 Mon Sep 17 00:00:00 2001 From: war-in Date: Thu, 19 Mar 2026 15:37:43 +0100 Subject: [PATCH 2/6] fix: standalone anadroid build on RN 0.83 --- android/settings.gradle | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/android/settings.gradle b/android/settings.gradle index 8dbb83a9a867a..b41080ec1d7a5 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -37,9 +37,8 @@ if(settings.extensions.patchedArtifacts.buildFromSource) { } } -apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") -useExpoModules() expoAutolinking { - projectRoot = file(rootDir) + projectRoot = file('../') + searchPaths = ['node_modules'] useExpoModules() } From 5e57ade0b25a33fd60031c2e841d8473b063b7f0 Mon Sep 17 00:00:00 2001 From: war-in Date: Thu, 19 Mar 2026 16:13:15 +0100 Subject: [PATCH 3/6] fix: exclude all ktfmt tasks --- .../workflows/publishReactNativeAndroidArtifacts.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publishReactNativeAndroidArtifacts.yml b/.github/workflows/publishReactNativeAndroidArtifacts.yml index 646477f610fd3..a2f567e39a39e 100644 --- a/.github/workflows/publishReactNativeAndroidArtifacts.yml +++ b/.github/workflows/publishReactNativeAndroidArtifacts.yml @@ -175,7 +175,15 @@ jobs: echo "Version: ${{ env.PATCHED_VERSION }}" echo "Patches hash: ${{ env.PATCHES_HASH }}" export ORG_GRADLE_PROJECT_reactNativeArchitectures="armeabi-v7a,arm64-v8a,x86,x86_64" - ./gradlew buildReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true -x lint -x test -x check -x ktfmtCheck + + # Exclude ktfmt tasks from the included react-native build + EXCLUDE_KTFMT_TASKS=( + -x :react-native:packages:react-native:ReactAndroid:ktfmtCheck + -x :react-native:packages:react-native:ReactAndroid:ktfmtCheckMain + -x :react-native:packages:react-native:ReactAndroid:ktfmtCheckScripts + ) + + ./gradlew buildReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true -x lint -x test -x check "${EXCLUDE_KTFMT_TASKS[@]}" ./gradlew publishReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true env: GH_PUBLISH_ACTOR: ${{ github.actor }} From 1099396b722219b0adec4469233062abd12806db Mon Sep 17 00:00:00 2001 From: war-in Date: Thu, 19 Mar 2026 16:43:35 +0100 Subject: [PATCH 4/6] fix: exclude React Native tests tasks --- .github/workflows/publishReactNativeAndroidArtifacts.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publishReactNativeAndroidArtifacts.yml b/.github/workflows/publishReactNativeAndroidArtifacts.yml index a2f567e39a39e..c60016b6636fe 100644 --- a/.github/workflows/publishReactNativeAndroidArtifacts.yml +++ b/.github/workflows/publishReactNativeAndroidArtifacts.yml @@ -176,14 +176,17 @@ jobs: echo "Patches hash: ${{ env.PATCHES_HASH }}" export ORG_GRADLE_PROJECT_reactNativeArchitectures="armeabi-v7a,arm64-v8a,x86,x86_64" - # Exclude ktfmt tasks from the included react-native build - EXCLUDE_KTFMT_TASKS=( + # Exclude ktfmt and test tasks from the included react-native build + EXCLUDE_TASKS=( -x :react-native:packages:react-native:ReactAndroid:ktfmtCheck -x :react-native:packages:react-native:ReactAndroid:ktfmtCheckMain -x :react-native:packages:react-native:ReactAndroid:ktfmtCheckScripts + -x :react-native:packages:react-native:ReactAndroid:testDebugOptimizedUnitTest + -x :react-native:packages:react-native:ReactAndroid:testDebugUnitTest + -x :react-native:packages:react-native:ReactAndroid:testReleaseUnitTest ) - ./gradlew buildReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true -x lint -x test -x check "${EXCLUDE_KTFMT_TASKS[@]}" + ./gradlew buildReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true -x lint -x test -x check "${EXCLUDE_TASKS[@]}" ./gradlew publishReactNativeArtifacts -PpatchedArtifacts.forceBuildFromSource=true env: GH_PUBLISH_ACTOR: ${{ github.actor }} From 8a4407572ff4ec70bb6b5ef8cab9c576aa086d2c Mon Sep 17 00:00:00 2001 From: war-in Date: Thu, 19 Mar 2026 17:20:47 +0100 Subject: [PATCH 5/6] temporary: remove stale CMake cache to trigger cmake install --- .github/workflows/publishReactNativeAndroidArtifacts.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publishReactNativeAndroidArtifacts.yml b/.github/workflows/publishReactNativeAndroidArtifacts.yml index c60016b6636fe..56bb5d3305991 100644 --- a/.github/workflows/publishReactNativeAndroidArtifacts.yml +++ b/.github/workflows/publishReactNativeAndroidArtifacts.yml @@ -168,6 +168,9 @@ jobs: GITHUB_TOKEN: ${{ github.token }} IS_HYBRID_BUILD: ${{ matrix.is_hybrid }} + - name: Remove stale CMake cache + run: rm -rf ${ANDROID_HOME}/cmake/3.30.5 + - name: Build and publish React Native artifacts working-directory: ${{ matrix.is_hybrid == 'true' && 'Mobile-Expensify/Android' || 'android' }} run: | From 02f2adcfa07e5fca0eedf70a153e4712367bf8d0 Mon Sep 17 00:00:00 2001 From: war-in Date: Thu, 19 Mar 2026 17:55:28 +0100 Subject: [PATCH 6/6] fix: set CMAKE_VERSION --- .github/workflows/publishReactNativeAndroidArtifacts.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/publishReactNativeAndroidArtifacts.yml b/.github/workflows/publishReactNativeAndroidArtifacts.yml index 56bb5d3305991..a8cbd904946c8 100644 --- a/.github/workflows/publishReactNativeAndroidArtifacts.yml +++ b/.github/workflows/publishReactNativeAndroidArtifacts.yml @@ -168,9 +168,6 @@ jobs: GITHUB_TOKEN: ${{ github.token }} IS_HYBRID_BUILD: ${{ matrix.is_hybrid }} - - name: Remove stale CMake cache - run: rm -rf ${ANDROID_HOME}/cmake/3.30.5 - - name: Build and publish React Native artifacts working-directory: ${{ matrix.is_hybrid == 'true' && 'Mobile-Expensify/Android' || 'android' }} run: | @@ -197,6 +194,7 @@ jobs: IS_HYBRID_BUILD: ${{ matrix.is_hybrid }} PATCHED_VERSION: ${{ steps.getNewPatchedVersion.outputs.NEW_PATCHED_VERSION }} PATCHES_HASH: ${{ matrix.is_hybrid == 'true' && needs.verifyPatches.outputs.hybrid_app_patches_hash || needs.verifyPatches.outputs.standalone_patches_hash }} + CMAKE_VERSION: 3.31.6 - name: Announce failed workflow in Slack if: ${{ failure() }}