From d0012b7dcdc03716743189ce9b5c484eccd156b8 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Tue, 11 Jun 2024 08:34:46 -0700 Subject: [PATCH] Simplify build_android (#44870) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/44870 This just simplifies the build_android step on GHA Changelog: [Internal] [Changed] - Simplify build_android Reviewed By: cipolleschi Differential Revision: D58407537 fbshipit-source-id: 2bb34ef8b8d1883e653914488d4d417356f0f1d2 --- .github/actions/setup-gradle/action.yml | 9 +-- .github/workflows/nightly.yml | 43 +++++----- .github/workflows/publish-release.yml | 43 +++++----- .github/workflows/test-all.yml | 79 +++---------------- .../rn-tester/android/app/build.gradle.kts | 6 ++ 5 files changed, 59 insertions(+), 121 deletions(-) diff --git a/.github/actions/setup-gradle/action.yml b/.github/actions/setup-gradle/action.yml index e38d8994b4ca2d..1c8b2e5f3f7fe7 100644 --- a/.github/actions/setup-gradle/action.yml +++ b/.github/actions/setup-gradle/action.yml @@ -1,14 +1,9 @@ name: Setup gradle -description: 'Set up your GitHub Actions workflow with a specific version of gradle' -inputs: - gradle-version: - description: 'The node.js version to use' - required: false - default: '8.6' +description: "Set up your GitHub Actions workflow with a specific version of gradle" runs: using: "composite" steps: - name: Setup gradle uses: gradle/actions/setup-gradle@v3 with: - gradle-version: ${{ inputs.gradle-version }} + gradle-version: wrapper diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index cb6505d57976d0..06d3b4b588a1ba 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -490,15 +490,13 @@ jobs: name: hermes-win64-bin path: D:\tmp\hermes\win64-bin\ build_android: - runs-on: 16-core-ubuntu - needs: [set_release_type, prepare_hermes_workspace] + runs-on: 8-core-ubuntu + needs: [set_release_type] container: image: reactnativecommunity/react-native-android:latest env: TERM: "dumb" - GRADLE_OPTS: '-Dorg.gradle.daemon=false' - # By default we only build ARM64 to save time/resources. For release/nightlies/prealpha, we override this value to build all archs. - ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a" + GRADLE_OPTS: "-Dorg.gradle.daemon=false" steps: - name: Checkout uses: actions/checkout@v4.1.1 @@ -512,32 +510,31 @@ jobs: uses: ./.github/actions/setup-gradle - name: Build and publish all the Android Artifacts to /tmp/maven-local run: | + # By default we only build ARM64 to save time/resources. For release/nightlies/prealpha, we override this value to build all archs. if [[ "${{ needs.set_release_type.outputs.RELEASE_TYPE }}" == "dry-run" ]]; then export ORG_GRADLE_PROJECT_reactNativeArchitectures="arm64-v8a" else export ORG_GRADLE_PROJECT_reactNativeArchitectures="armeabi-v7a,arm64-v8a,x86,x86_64" fi - ./gradlew publishAllToMavenTempLocal + ./gradlew publishAllToMavenTempLocal build -PenableWarningsAsErrors=true shell: bash - - name: Cache android build artifacts - uses: actions/cache/save@v4.0.0 + - name: Upload test results + if: ${{ always() }} + uses: actions/upload-artifact@v4.3.0 with: - key: android-build-cache-${{ github.run_number}} + name: build-android-results + compression-level: 1 path: | - build - packages/rn-tester/android/app/.cxx - packages/rn-tester/android/app/build - packages/react-native/sdks/download - packages/react-native/sdks/hermes - packages/react-native/ReactAndroid/.cxx - packages/react-native/ReactAndroid/build - packages/react-native/ReactAndroid/hermes-engine/.cxx - packages/react-native/ReactAndroid/hermes-engine/build - packages/react-native/ReactAndroid/src/main/jni/prebuilt - packages/react-native-gradle-plugin/.gradle - packages/react-native-gradle-plugin/build - packages/react-native-codegen/lib - enableCrossOsArchive: true + packages/react-native-gradle-plugin/react-native-gradle-plugin/build/reports + packages/react-native-gradle-plugin/settings-plugin/build/reports + packages/react-native/ReactAndroid/build/reports + - name: Upload RNTester APK + if: ${{ always() }} + uses: actions/upload-artifact@v4.3.0 + with: + name: rntester-apk + path: packages/rn-tester/android/app/build/outputs/apk/ + compression-level: 0 build_npm_package: runs-on: 8-core-ubuntu needs: [set_release_type, prepare_hermes_workspace, build_hermes_macos, build_hermesc_linux, build_hermesc_windows,build_android] diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 46c02c4d9b3947..05b8fa743e8f33 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -488,15 +488,13 @@ jobs: name: hermes-win64-bin path: D:\tmp\hermes\win64-bin\ build_android: - runs-on: 16-core-ubuntu - needs: [set_release_type, prepare_hermes_workspace] + runs-on: 8-core-ubuntu + needs: [set_release_type] container: image: reactnativecommunity/react-native-android:latest env: TERM: "dumb" - GRADLE_OPTS: '-Dorg.gradle.daemon=false' - # By default we only build ARM64 to save time/resources. For release/nightlies/prealpha, we override this value to build all archs. - ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a" + GRADLE_OPTS: "-Dorg.gradle.daemon=false" steps: - name: Checkout uses: actions/checkout@v4.1.1 @@ -510,32 +508,31 @@ jobs: uses: ./.github/actions/setup-gradle - name: Build and publish all the Android Artifacts to /tmp/maven-local run: | + # By default we only build ARM64 to save time/resources. For release/nightlies/prealpha, we override this value to build all archs. if [[ "${{ needs.set_release_type.outputs.RELEASE_TYPE }}" == "dry-run" ]]; then export ORG_GRADLE_PROJECT_reactNativeArchitectures="arm64-v8a" else export ORG_GRADLE_PROJECT_reactNativeArchitectures="armeabi-v7a,arm64-v8a,x86,x86_64" fi - ./gradlew publishAllToMavenTempLocal + ./gradlew publishAllToMavenTempLocal build -PenableWarningsAsErrors=true shell: bash - - name: Cache android build artifacts - uses: actions/cache/save@v4.0.0 + - name: Upload test results + if: ${{ always() }} + uses: actions/upload-artifact@v4.3.0 with: - key: android-build-cache-${{ github.run_number}} + name: build-android-results + compression-level: 1 path: | - build - packages/rn-tester/android/app/.cxx - packages/rn-tester/android/app/build - packages/react-native/sdks/download - packages/react-native/sdks/hermes - packages/react-native/ReactAndroid/.cxx - packages/react-native/ReactAndroid/build - packages/react-native/ReactAndroid/hermes-engine/.cxx - packages/react-native/ReactAndroid/hermes-engine/build - packages/react-native/ReactAndroid/src/main/jni/prebuilt - packages/react-native-gradle-plugin/.gradle - packages/react-native-gradle-plugin/build - packages/react-native-codegen/lib - enableCrossOsArchive: true + packages/react-native-gradle-plugin/react-native-gradle-plugin/build/reports + packages/react-native-gradle-plugin/settings-plugin/build/reports + packages/react-native/ReactAndroid/build/reports + - name: Upload RNTester APK + if: ${{ always() }} + uses: actions/upload-artifact@v4.3.0 + with: + name: rntester-apk + path: packages/rn-tester/android/app/build/outputs/apk/ + compression-level: 0 build_npm_package: runs-on: 8-core-ubuntu needs: [set_release_type, prepare_hermes_workspace, build_hermes_macos, build_hermesc_linux, build_hermesc_windows,build_android] diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index 2d87dd29e49e90..681e8141fe826d 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -561,14 +561,12 @@ jobs: path: D:\tmp\hermes\win64-bin\ build_android: runs-on: 8-core-ubuntu - needs: [set_release_type, prepare_hermes_workspace] + needs: [set_release_type] container: image: reactnativecommunity/react-native-android:latest env: TERM: "dumb" GRADLE_OPTS: "-Dorg.gradle.daemon=false" - # By default we only build ARM64 to save time/resources. For release/nightlies/prealpha, we override this value to build all archs. - ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a" steps: - name: Checkout uses: actions/checkout@v4.1.1 @@ -582,86 +580,31 @@ jobs: uses: ./.github/actions/setup-gradle - name: Build and publish all the Android Artifacts to /tmp/maven-local run: | + # By default we only build ARM64 to save time/resources. For release/nightlies/prealpha, we override this value to build all archs. if [[ "${{ needs.set_release_type.outputs.RELEASE_TYPE }}" == "dry-run" ]]; then export ORG_GRADLE_PROJECT_reactNativeArchitectures="arm64-v8a" else export ORG_GRADLE_PROJECT_reactNativeArchitectures="armeabi-v7a,arm64-v8a,x86,x86_64" fi - ./gradlew publishAllToMavenTempLocal + ./gradlew publishAllToMavenTempLocal build -PenableWarningsAsErrors=true shell: bash - - name: Cache android build artifacts - uses: actions/cache/save@v4.0.0 - with: - key: android-build-cache-${{ github.run_number}} - path: | - build - packages/rn-tester/android/app/.cxx - packages/rn-tester/android/app/build - packages/react-native/sdks/download - packages/react-native/sdks/hermes - packages/react-native/ReactAndroid/.cxx - packages/react-native/ReactAndroid/build - packages/react-native/ReactAndroid/hermes-engine/.cxx - packages/react-native/ReactAndroid/hermes-engine/build - packages/react-native/ReactAndroid/src/main/jni/prebuilt - packages/react-native-gradle-plugin/.gradle - packages/react-native-gradle-plugin/build - packages/react-native-codegen/lib - enableCrossOsArchive: true - test_android: - runs-on: 8-core-ubuntu - needs: [prepare_hermes_workspace, build_android] - container: - image: reactnativecommunity/react-native-android:latest - env: - TERM: "dumb" - GRADLE_OPTS: "-Dorg.gradle.daemon=false" - # By default we only build ARM64 to save time/resources. For release/nightlies/prealpha, we override this value to build all archs. - ORG_GRADLE_PROJECT_reactNativeArchitectures: "arm64-v8a" - # Repeated here, as the environment key in this executor will overwrite the one in defaults - PUBLIC_ANALYSISBOT_GITHUB_TOKEN_A: ${{ secrets.GITHUB_ANALYSISBOT_TOKEN_A }} - PUBLIC_ANALYSISBOT_GITHUB_TOKEN_B: ${{ secrets.GITHUB_ANALYSISBOT_TOKEN_B }} - steps: - - name: Checkout - uses: actions/checkout@v4.1.1 - - name: Setup node.js - uses: ./.github/actions/setup-node - - name: Install dependencies - run: yarn install --non-interactive - - name: Set React Native Version - run: node ./scripts/releases/set-rn-version.js --build-type dry-run - - name: Cache android build artifacts - uses: actions/cache@v4.0.0 - with: - key: android-build-cache-${{ github.run_number}} - path: | - build - packages/rn-tester/android/app/.cxx - packages/rn-tester/android/app/build - packages/react-native/sdks/download - packages/react-native/sdks/hermes - packages/react-native/ReactAndroid/.cxx - packages/react-native/ReactAndroid/build - packages/react-native/ReactAndroid/hermes-engine/.cxx - packages/react-native/ReactAndroid/hermes-engine/build - packages/react-native/ReactAndroid/src/main/jni/prebuilt - packages/react-native-gradle-plugin/.gradle - packages/react-native-gradle-plugin/build - packages/react-native-codegen/lib - - name: Build & Test React Native using Gradle - run: ./gradlew build -PenableWarningsAsErrors=true - name: Upload test results if: ${{ always() }} uses: actions/upload-artifact@v4.3.0 with: - name: android-test-results - path: packages/react-native-gradle-plugin/build/test-results - - name: Upload android package + name: build-android-results + compression-level: 1 + path: | + packages/react-native-gradle-plugin/react-native-gradle-plugin/build/reports + packages/react-native-gradle-plugin/settings-plugin/build/reports + packages/react-native/ReactAndroid/build/reports + - name: Upload RNTester APK if: ${{ always() }} uses: actions/upload-artifact@v4.3.0 with: name: rntester-apk path: packages/rn-tester/android/app/build/outputs/apk/ + compression-level: 0 build_npm_package: runs-on: 8-core-ubuntu needs: diff --git a/packages/rn-tester/android/app/build.gradle.kts b/packages/rn-tester/android/app/build.gradle.kts index 3ca14012bbd6ea..31336dba23830a 100644 --- a/packages/rn-tester/android/app/build.gradle.kts +++ b/packages/rn-tester/android/app/build.gradle.kts @@ -198,4 +198,10 @@ afterEvaluate { tasks .getByName("generateCodegenSchemaFromJavaScript") .dependsOn(":packages:react-native:ReactAndroid:buildCodegenCLI") + tasks + .getByName("createBundleJscReleaseJsAndAssets") + .dependsOn(":packages:react-native:ReactAndroid:buildCodegenCLI") + tasks + .getByName("createBundleHermesReleaseJsAndAssets") + .dependsOn(":packages:react-native:ReactAndroid:buildCodegenCLI") }