test-all #184
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: test-all | |
on: | |
workflow_dispatch: | |
pull_request: | |
push: | |
tags: | |
- 'v*' | |
# nightly build @ 2:15 AM UTC | |
schedule: | |
- cron: '15 2 * * *' | |
jobs: | |
set_release_type: | |
runs-on: ubuntu-latest | |
outputs: | |
RELEASE_TYPE: ${{ steps.set_release_type.outputs.RELEASE_TYPE }} | |
env: | |
EVENT_NAME: ${{ github.event_name }} | |
REF: ${{ github.ref }} | |
steps: | |
- id: set_release_type | |
run: | | |
if [[ $EVENT_NAME == "schedule" ]]; then | |
echo "Setting release type to nightly" | |
echo "RELEASE_TYPE=nightly" >> $GITHUB_OUTPUT | |
elif [[ $EVENT_NAME == "push" && $REF == refs/tags/v* ]]; then | |
echo "Setting release type to release" | |
echo "RELEASE_TYPE=release" >> $GITHUB_OUTPUT | |
else | |
echo "Setting release type to dry-run" | |
echo "RELEASE_TYPE=dry-run" >> $GITHUB_OUTPUT | |
fi | |
prepare_hermes_workspace: | |
runs-on: ubuntu-latest | |
env: | |
HERMES_WS_DIR: /tmp/hermes | |
HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion | |
BUILD_FROM_SOURCE: true | |
outputs: | |
react-native-version: ${{ steps.react-native-version.outputs.version }} | |
hermes-version: ${{ steps.hermes-version.outputs.version }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Setup node.js | |
uses: ./.github/actions/setup-node | |
- name: Setup hermes version | |
id: hermes-version | |
run: | | |
mkdir -p "/tmp/hermes" "/tmp/hermes/download" "/tmp/hermes/hermes" | |
if [ -f "$HERMES_VERSION_FILE" ]; then | |
echo "Hermes Version file found! Using this version for the build:" | |
echo "VERSION=$(cat $HERMES_VERSION_FILE)" >> "$GITHUB_OUTPUT" | |
else | |
echo "Hermes Version file not found!!!" | |
echo "Using the last commit from main for the build:" | |
HERMES_TAG_SHA=$(git ls-remote https://github.com/$GITHUB_REPOSITORY main | cut -f 1 | tr -d '[:space:]') | |
echo "VERSION=$HERMES_TAG_SHA" >> "$GITHUB_OUTPUT" | |
fi | |
echo "Hermes commit is $HERMES_TAG_SHA" | |
- name: Get react-native version | |
id: react-native-version | |
run: | | |
VERSION=$(cat packages/react-native/package.json | jq -r '.version') | |
# Save the react native version we are building in an output variable so we can use that file as part of the cache key. | |
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT" | |
echo "React Native Version is $VERSION" | |
- name: Cache hermes workspace | |
uses: actions/cache@v4.0.0 | |
with: | |
path: | | |
/tmp/hermes/download/ | |
/tmp/hermes/hermes/ | |
key: v1-hermes-${{ steps.hermes-version.outputs.version }}-${{ github.run_number }} | |
enableCrossOsArchive: true | |
- name: Yarn- Install Dependencies | |
run: yarn install --non-interactive | |
- name: Download Hermes tarball | |
run: | | |
node packages/react-native/scripts/hermes/prepare-hermes-for-build ${{ github.event.pull_request.html_url }} | |
cp packages/react-native/sdks/download/* $HERMES_WS_DIR/download/. | |
cp -r packages/react-native/sdks/hermes/* $HERMES_WS_DIR/hermes/. | |
echo ${{ steps.hermes-version.outputs.version }} | |
build_hermesc_apple: | |
runs-on: macos-13 | |
needs: prepare_hermes_workspace | |
env: | |
HERMES_WS_DIR: /tmp/hermes | |
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Cache hermes workspace | |
uses: actions/cache@v4.0.0 | |
with: | |
path: | | |
/tmp/hermes/download/ | |
/tmp/hermes/hermes/ | |
key: v1-hermes-${{ needs.prepare_hermes_workspace.outputs.hermes-version }}-${{ github.run_number }} | |
enableCrossOsArchive: true | |
- name: Setup Hermes workspace | |
uses: ./.github/actions/setup_hermes_workspace | |
- name: Hermes apple cache | |
uses: actions/cache@v4.0.0 | |
with: | |
path: ./packages/react-native/sdks/hermes/build_host_hermesc | |
key: v2-hermesc-apple-${{ needs.prepare_hermes_workspace.outputs.hermes-version }}-${{ needs.prepare_hermes_workspace.outputs.react-native-version }} | |
- name: Build HermesC Apple | |
run: | | |
cd ./packages/react-native/sdks/hermes || exit 1 | |
. ./utils/build-apple-framework.sh | |
build_host_hermesc_if_needed | |
build_apple_slices_hermes: | |
runs-on: macos-13 | |
needs: [build_hermesc_apple, prepare_hermes_workspace] | |
env: | |
HERMES_WS_DIR: /tmp/hermes | |
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin | |
HERMES_OSXBIN_ARTIFACTS_DIR: /tmp/hermes/osx-bin | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
matrix: | |
flavor: [Debug, Release] | |
slice: [macosx, iphoneos, iphonesimulator, catalyst] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Cache setup | |
id: cache_setup | |
uses: ./.github/actions/cache_setup | |
with: | |
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} | |
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} | |
- name: Setup Hermes workspace | |
uses: ./.github/actions/setup_hermes_workspace | |
- name: Check if the required artifacts already exist | |
id: check_if_apple_artifacts_are_there | |
run: | | |
if ${{ matrix.flavor == 'Debug' }} && \\ | |
${{ steps.cache_setup.outputs.cache-hit-hermes-tarball-debug == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-macos-bin-debug == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-dsym-debug == true }} ; then | |
echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV | |
fi | |
if ${{ matrix.flavor == 'Release' }} && \\ | |
${{ steps.cache_setup.outputs.cache-hit-hermes-tarball-release == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-macos-bin-release == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-dsym-release == true }} ; then | |
echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV | |
fi | |
- name: Build the Hermes ${{ matrix.slice }} frameworks | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
run: | | |
cd ./packages/react-native/sdks/hermes || exit 1 | |
SLICE=${{ matrix.slice }} | |
FLAVOR=${{ matrix.flavor }} | |
FINAL_PATH=build_"$SLICE"_"$FLAVOR" | |
echo "Final path for this slice is: $FINAL_PATH" | |
if [[ -d "$FINAL_PATH" ]]; then | |
echo "[HERMES] Skipping! Found the requested slice at $FINAL_PATH". | |
exit 0 | |
fi | |
if [[ "$SLICE" == "macosx" ]]; then | |
echo "[HERMES] Building Hermes for MacOS" | |
BUILD_TYPE="${{ matrix.flavor }}" ./utils/build-mac-framework.sh | |
else | |
echo "[HERMES] Building Hermes for iOS: $SLICE" | |
BUILD_TYPE="${{ matrix.flavor }}" ./utils/build-ios-framework.sh "$SLICE" | |
fi | |
echo "Moving from build_$SLICE to $FINAL_PATH" | |
mv build_"$SLICE" "$FINAL_PATH" | |
# check whether everything is there | |
if [[ -d "$FINAL_PATH/API/hermes/hermes.framework" ]]; then | |
echo "Successfully built hermes.framework for $SLICE in $FLAVOR" | |
else | |
echo "Failed to built hermes.framework for $SLICE in $FLAVOR" | |
exit 1 | |
fi | |
if [[ -d "$FINAL_PATH/API/hermes/hermes.framework.dSYM" ]]; then | |
echo "Successfully built hermes.framework.dSYM for $SLICE in $FLAVOR" | |
else | |
echo "Failed to built hermes.framework.dSYM for $SLICE in $FLAVOR" | |
echo "Please try again" | |
exit 1 | |
fi | |
- name: Save slice cache | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
uses: actions/cache@v4.0.0 | |
with: | |
path: ./packages/react-native/sdks/hermes/build_${{ matrix.slice }}_${{ matrix.flavor }} | |
key: v4-hermes-apple-${{ needs.prepare_hermes_workspace.outputs.hermes-version }}-${{ needs.prepare_hermes_workspace.outputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-${{ matrix.slice }}-${{ matrix.flavor }} | |
build_hermes_macos: | |
runs-on: macos-13 | |
needs: [build_apple_slices_hermes, prepare_hermes_workspace] | |
env: | |
HERMES_WS_DIR: /tmp/hermes | |
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
matrix: | |
flavor: [Debug, Release] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Setup xcode | |
uses: ./.github/actions/setup-xcode | |
- name: Setup node.js | |
uses: ./.github/actions/setup-node | |
- name: Cache setup | |
id: cache_setup | |
uses: ./.github/actions/cache_setup | |
with: | |
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} | |
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} | |
- name: Setup Hermes workspace | |
uses: ./.github/actions/setup_hermes_workspace | |
- name: Check if the required artifacts already exist | |
id: check_if_apple_artifacts_are_there | |
run: | | |
if ${{ matrix.flavor == 'Debug' }} && | |
${{ steps.cache_setup.outputs.cache-hit-hermes-tarball-debug == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-macos-bin-debug == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-dsym-debug == true }} ; then | |
echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV | |
fi | |
if ${{ matrix.flavor == 'Release' }} && \\ | |
${{ steps.cache_setup.outputs.cache-hit-hermes-tarball-release == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-macos-bin-release == true }} && \ | |
${{ steps.cache_setup.outputs.cache-hit-dsym-release == true }} ; then | |
echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV | |
fi | |
- name: Yarn- Install Dependencies | |
if: ${{ ! contains(github.event.head_commit.message, 'Bump metro@') && steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
run: yarn install --non-interactive | |
- name: Slice cache macosx | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
uses: actions/cache@v4.0.0 | |
with: | |
path: ./packages/react-native/sdks/hermes/build_macosx_${{ matrix.flavor }} | |
key: v4-hermes-apple-${{ needs.prepare_hermes_workspace.outputs.hermes-version }}-${{ needs.prepare_hermes_workspace.outputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-macosx-${{ matrix.flavor }} | |
- name: Slice cache iphoneos | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
uses: actions/cache@v4.0.0 | |
with: | |
path: ./packages/react-native/sdks/hermes/build_iphoneos_${{ matrix.flavor }} | |
key: v4-hermes-apple-${{ needs.prepare_hermes_workspace.outputs.hermes-version }}-${{ needs.prepare_hermes_workspace.outputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-iphoneos-${{ matrix.flavor }} | |
- name: Slice cache iphonesimulator | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
uses: actions/cache@v4.0.0 | |
with: | |
path: ./packages/react-native/sdks/hermes/build_iphonesimulator_${{ matrix.flavor }} | |
key: v4-hermes-apple-${{ needs.prepare_hermes_workspace.outputs.hermes-version }}-${{ needs.prepare_hermes_workspace.outputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-iphonesimulator-${{ matrix.flavor }} | |
- name: Slice cache catalyst | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
uses: actions/cache@v4.0.0 | |
with: | |
path: ./packages/react-native/sdks/hermes/build_catalyst_${{ matrix.flavor }} | |
key: v4-hermes-apple-${{ needs.prepare_hermes_workspace.outputs.hermes-version }}-${{ needs.prepare_hermes_workspace.outputs.react-native-version }}-${{ hashfiles('packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}-catalyst-${{ matrix.flavor }} | |
- name: Move back build folders | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
run: | | |
ls -l ./packages/react-native/sdks/hermes | |
cd ./packages/react-native/sdks/hermes || exit 1 | |
mv build_macosx_${{ matrix.flavor }} build_macosx | |
mv build_iphoneos_${{ matrix.flavor }} build_iphoneos | |
mv build_iphonesimulator_${{ matrix.flavor }} build_iphonesimulator | |
mv build_catalyst_${{ matrix.flavor }} build_catalyst | |
- name: Prepare destroot folder | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
run: | | |
cd ./packages/react-native/sdks/hermes || exit 1 | |
. ./utils/build-apple-framework.sh | |
prepare_dest_root_for_ci | |
- name: Create fat framework for iOS | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
run: | | |
cd ./packages/react-native/sdks/hermes || exit 1 | |
echo "[HERMES] Creating the universal framework" | |
./utils/build-ios-framework.sh build_framework | |
- name: Package the Hermes Apple frameworks | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
run: | | |
BUILD_TYPE="${{ matrix.flavor }}" | |
echo "Packaging Hermes Apple frameworks for $BUILD_TYPE build type" | |
TARBALL_OUTPUT_DIR=$(mktemp -d /tmp/hermes-tarball-output-XXXXXXXX) | |
TARBALL_FILENAME=$(node ./packages/react-native/scripts/hermes/get-tarball-name.js --buildType "$BUILD_TYPE") | |
echo "Packaging Hermes Apple frameworks for $BUILD_TYPE build type" | |
TARBALL_OUTPUT_PATH=$(node ./packages/react-native/scripts/hermes/create-tarball.js \ | |
--inputDir ./packages/react-native/sdks/hermes \ | |
--buildType "$BUILD_TYPE" \ | |
--outputDir $TARBALL_OUTPUT_DIR) | |
echo "Hermes tarball saved to $TARBALL_OUTPUT_PATH" | |
mkdir -p $HERMES_TARBALL_ARTIFACTS_DIR | |
cp $TARBALL_OUTPUT_PATH $HERMES_TARBALL_ARTIFACTS_DIR/. | |
mkdir -p /tmp/hermes/osx-bin/${{ matrix.flavor }} | |
cp ./packages/react-native/sdks/hermes/build_macosx/bin/* /tmp/hermes/osx-bin/${{ matrix.flavor }} | |
ls -lR /tmp/hermes/osx-bin/ | |
- name: Upload darwin artifacts | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: hermes-darwin-bin-${{ matrix.flavor }} | |
path: /tmp/hermes/hermes-runtime-darwin | |
- name: Upload osx-bin | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: hermes-osx-bin-${{ matrix.flavor }} | |
path: /tmp/hermes/osx-bin | |
- name: Create dSYM archive | |
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != true }} | |
run: | | |
FLAVOR=${{ matrix.flavor }} | |
WORKING_DIR="/tmp/hermes_tmp/dSYM/$FLAVOR" | |
mkdir -p "$WORKING_DIR/macosx" | |
mkdir -p "$WORKING_DIR/catalyst" | |
mkdir -p "$WORKING_DIR/iphoneos" | |
mkdir -p "$WORKING_DIR/iphonesimulator" | |
cd ./packages/react-native/sdks/hermes || exit 1 | |
DSYM_FILE_PATH=API/hermes/hermes.framework.dSYM | |
cp -r build_macosx/$DSYM_FILE_PATH "$WORKING_DIR/macosx/" | |
cp -r build_catalyst/$DSYM_FILE_PATH "$WORKING_DIR/catalyst/" | |
cp -r build_iphoneos/$DSYM_FILE_PATH "$WORKING_DIR/iphoneos/" | |
cp -r build_iphonesimulator/$DSYM_FILE_PATH "$WORKING_DIR/iphonesimulator/" | |
DEST_DIR="/tmp/hermes/dSYM/$FLAVOR" | |
tar -C "$WORKING_DIR" -czvf "hermes.framework.dSYM" . | |
mkdir -p "$DEST_DIR" | |
mv "hermes.framework.dSYM" "$DEST_DIR" | |
- name: Upload hermes dSYM artifacts | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: hermes-dSYM-${{ matrix.flavor }} | |
path: /tmp/hermes/dSYM/${{ matrix.flavor }} | |
test_ios_rntester_ruby_3_2_0: | |
runs-on: macos-13 | |
needs: [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos] | |
env: | |
HERMES_WS_DIR: /tmp/hermes | |
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Run it | |
uses: ./.github/actions/test_ios_rntester | |
with: | |
ruby-version: "3.2.0" | |
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} | |
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} | |
test_ios_rntester_dynamic_frameworks: | |
runs-on: macos-13 | |
needs: [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos] | |
env: | |
HERMES_WS_DIR: /tmp/hermes | |
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
matrix: | |
jsengine: [Hermes, JSC] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Run it | |
uses: ./.github/actions/test_ios_rntester | |
with: | |
jsengine: ${{ matrix.jsengine }} | |
use-frameworks: DynamicFrameworks | |
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} | |
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} | |
test_ios_rntester: | |
runs-on: macos-13 | |
needs: [build_apple_slices_hermes, prepare_hermes_workspace, build_hermes_macos] | |
env: | |
HERMES_WS_DIR: /tmp/hermes | |
HERMES_TARBALL_ARTIFACTS_DIR: /tmp/hermes/hermes-runtime-darwin | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
matrix: | |
jsengine: [Hermes, JSC] | |
architecture: [NewArch, OldArch] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Run it | |
uses: ./.github/actions/test_ios_rntester | |
with: | |
jsengine: ${{ matrix.jsengine }} | |
architecture: ${{ matrix.architecture }} | |
run-unit-tests: true | |
use-frameworks: StaticLibraries | |
hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} | |
react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} | |
build_android: | |
runs-on: 8-core-ubuntu | |
needs: [set_release_type, prepare_hermes_workspace] | |
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 | |
- 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 ${{ needs.set_release_type.outputs.RELEASE_TYPE }} | |
- name: Setup gradle | |
uses: ./.github/actions/setup-gradle | |
- name: Build and publish all the Android Artifacts to /tmp/maven-local | |
run: | | |
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 | |
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 | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4.3.0 | |
with: | |
name: rntester-apk | |
path: packages/rn-tester/android/app/build/outputs/apk/ |