name: Nightly on: workflow_dispatch: # nightly build @ 2:15 AM UTC schedule: - cron: "15 2 * * *" jobs: set_release_type: runs-on: ubuntu-latest if: github.repository == 'facebook/react-native' 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: | echo "Setting release type to nightly" echo "RELEASE_TYPE=nightly" >> $GITHUB_OUTPUT prepare_hermes_workspace: runs-on: ubuntu-latest env: HERMES_WS_DIR: /tmp/hermes HERMES_VERSION_FILE: packages/react-native/sdks/.hermesversion outputs: react-native-version: ${{ steps.prepare-hermes-workspace.outputs.react-native-version }} hermes-version: ${{ steps.prepare-hermes-workspace.outputs.hermes-version }} steps: - name: Checkout uses: actions/checkout@v4 - name: Prepare Hermes Workspace id: prepare-hermes-workspace uses: ./.github/actions/prepare-hermes-workspace with: hermes-ws-dir: ${{ env.HERMES_WS_DIR }} hermes-version-file: ${{ env.HERMES_VERSION_FILE }} build_hermesc_apple: runs-on: macos-13 needs: prepare_hermes_workspace env: HERMES_WS_DIR: /tmp/hermes steps: - name: Checkout uses: actions/checkout@v4 - name: Build HermesC Apple uses: ./.github/actions/build-hermesc-apple with: hermes-version: ${{ needs.prepare_hermes_workspace.output.hermes-version }} react-native-version: ${{ needs.prepare_hermes_workspace.output.react-native-version }} build_apple_slices_hermes: runs-on: macos-14 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 IOS_DEPLOYMENT_TARGET: "13.4" XROS_DEPLOYMENT_TARGET: "1.0" MAC_DEPLOYMENT_TARGET: "10.15" strategy: fail-fast: false matrix: flavor: [Debug, Release] slice: [macosx, iphoneos, iphonesimulator, catalyst, xros, xrsimulator] steps: - name: Checkout uses: actions/checkout@v4 - name: Build Slice uses: ./.github/actions/build-apple-slices-hermes with: flavor: ${{ matrix.flavor }} slice: ${{ matrix.slice}} hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} 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 - name: Build Hermes MacOS uses: ./.github/actions/build-hermes-macos with: hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} flavor: ${{ matrix.flavor }} build_hermesc_linux: runs-on: ubuntu-latest 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 - name: Build HermesC Linux uses: ./.github/actions/build-hermesc-linux with: hermes-version: ${{ needs.prepare_hermes_workspace.outputs.hermes-version }} react-native-version: ${{ needs.prepare_hermes_workspace.outputs.react-native-version }} build_hermesc_windows: runs-on: windows-2019 needs: prepare_hermes_workspace env: HERMES_WS_DIR: 'D:\tmp\hermes' HERMES_TARBALL_ARTIFACTS_DIR: 'D:\tmp\hermes\hermes-runtime-darwin' HERMES_OSXBIN_ARTIFACTS_DIR: 'D:\tmp\hermes\osx-bin' ICU_URL: "https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip" MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin' CMAKE_DIR: 'C:\Program Files\CMake\bin' steps: - name: Checkout uses: actions/checkout@v4 - name: Build HermesC Windows uses: ./.github/actions/build-hermesc-windows with: 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] container: image: reactnativecommunity/react-native-android:latest env: TERM: "dumb" GRADLE_OPTS: "-Dorg.gradle.daemon=false" ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }} ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }} ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }} ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }} steps: - name: Checkout uses: actions/checkout@v4 - name: Build Android uses: ./.github/actions/build-android with: release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }} 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, ] 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" env: HERMES_WS_DIR: /tmp/hermes GHA_NPM_TOKEN: ${{ secrets.GHA_NPM_TOKEN }} ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }} ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }} ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }} ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }} steps: - name: Checkout uses: actions/checkout@v4 - name: Build and Publish NPM PAckage uses: ./.github/actions/build-npm-package with: hermes-ws-dir: ${{ env.HERMES_WS_DIR }} release-type: ${{ needs.set_release_type.outputs.RELEASE_TYPE }} gha-npm-token: ${{ env.GHA_NPM_TOKEN }}