mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48237 Noticed this when trying to diagnose what seemed like a stale caching issue. It effectively reverts D59917944. D59917944 added logic to only do yarn caching on main, but it has some correctness issues: 1. We cache `node_modules` instead of the yarn cache, which may contain e.g. build artifacts, or other scratch/cache files written (such as anything that writes to `node_modules/.cache`). We really want to be caching the yarn cache, which has pristine packages before install, which I think it will also need to perform the real install anyways. 2. We key the cache on root `package.json`, which is missing a lot of information (both provided by the other `package.json` in the repo, but mostly, the lockfile resolution). We only save cache when we're on `refs/heads/main` (so continuous builds against main), and supposedly, builds against base branch should be able to restore against those, but recent PR jobs I have seen, where `package.json` has not changed, all have `Cache not found for input keys: node-modules-068350889e87919c1c6c2c220c8d2d92db13f38820bf2efb315d1274b97bc367` Because of the potential correctness issues, and that the strategy for limiting to main seemingly is not allowing cache to be used in PR, this diff goes back to previous solution, which may store more artifacts (but working cache should also reduce cost by making jobs run faster). Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D67140004 fbshipit-source-id: f74074a498af56b1837fa23cf80795f76935b762
228 lines
10 KiB
YAML
228 lines
10 KiB
YAML
name: build-hermes-macos
|
|
description: This action builds hermesc for Apple platforms
|
|
inputs:
|
|
hermes-version:
|
|
required: true
|
|
description: The version of Hermes
|
|
react-native-version:
|
|
required: true
|
|
description: The version of React Native
|
|
flavor:
|
|
required: true
|
|
description: The flavor we want to build. It can be Debug or Release
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- name: Setup xcode
|
|
uses: ./.github/actions/setup-xcode
|
|
- name: Setup node.js
|
|
uses: ./.github/actions/setup-node
|
|
- name: Restore Hermes workspace
|
|
uses: ./.github/actions/restore-hermes-workspace
|
|
- name: Restore Cached Artifacts
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
key: v4-hermes-artifacts-${{ inputs.flavor }}-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashFiles('./packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}
|
|
path: |
|
|
/tmp/hermes/osx-bin/${{ inputs.flavor }}
|
|
/tmp/hermes/dSYM/${{ inputs.flavor }}
|
|
/tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
|
|
- name: Check if the required artifacts already exist
|
|
id: check_if_apple_artifacts_are_there
|
|
shell: bash
|
|
run: |
|
|
FLAVOR="${{ inputs.flavor }}"
|
|
echo "Flavor is $FLAVOR"
|
|
OSX_BIN="/tmp/hermes/osx-bin/$FLAVOR"
|
|
DSYM="/tmp/hermes/dSYM/$FLAVOR"
|
|
HERMES="/tmp/hermes/hermes-runtime-darwin/hermes-ios-$FLAVOR.tar.gz"
|
|
|
|
if [[ -d "$OSX_BIN" ]] && \
|
|
[[ -d "$DSYM" ]] && \
|
|
[[ -f "$HERMES" ]]; then
|
|
|
|
echo "Artifacts are there!"
|
|
echo "ARTIFACTS_EXIST=true" >> $GITHUB_ENV
|
|
echo "ARTIFACTS_EXIST=true" >> $GITHUB_OUTPUT
|
|
fi
|
|
- name: Yarn- Install Dependencies
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: ./.github/actions/yarn-install
|
|
- name: Slice cache macosx
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-macosx-${{ inputs.flavor }}
|
|
- name: Slice cache iphoneos
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-iphoneos-${{ inputs.flavor }}
|
|
- name: Slice cache iphonesimulator
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-iphonesimulator-${{ inputs.flavor }}
|
|
- name: Slice cache appletvos
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-appletvos-${{ inputs.flavor }}
|
|
- name: Slice cache appletvsimulator
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-appletvsimulator-${{ inputs.flavor }}
|
|
- name: Slice cache catalyst
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-catalyst-${{ inputs.flavor }}
|
|
- name: Slice cache xros
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-xros-${{ inputs.flavor }}
|
|
- name: Slice cache xrsimulator
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: ./packages/react-native/sdks/hermes/
|
|
name: slice-xrsimulator-${{ inputs.flavor }}
|
|
- name: Unzip slices
|
|
shell: bash
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
run: |
|
|
cd ./packages/react-native/sdks/hermes
|
|
ls -l .
|
|
tar -xzv -f build_catalyst_${{ matrix.flavor }}.tar.gz
|
|
tar -xzv -f build_iphoneos_${{ matrix.flavor }}.tar.gz
|
|
tar -xzv -f build_iphonesimulator_${{ matrix.flavor }}.tar.gz
|
|
tar -xzv -f build_appletvos_${{ matrix.flavor }}.tar.gz
|
|
tar -xzv -f build_appletvsimulator_${{ matrix.flavor }}.tar.gz
|
|
tar -xzv -f build_macosx_${{ matrix.flavor }}.tar.gz
|
|
tar -xzv -f build_xros_${{ matrix.flavor }}.tar.gz
|
|
tar -xzv -f build_xrsimulator_${{ matrix.flavor }}.tar.gz
|
|
- name: Move back build folders
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
shell: bash
|
|
run: |
|
|
ls -l ./packages/react-native/sdks/hermes
|
|
cd ./packages/react-native/sdks/hermes || exit 1
|
|
mv build_macosx_${{ inputs.flavor }} build_macosx
|
|
mv build_iphoneos_${{ inputs.flavor }} build_iphoneos
|
|
mv build_iphonesimulator_${{ inputs.flavor }} build_iphonesimulator
|
|
mv build_appletvos_${{ inputs.flavor }} build_appletvos
|
|
mv build_appletvsimulator_${{ inputs.flavor }} build_appletvsimulator
|
|
mv build_catalyst_${{ inputs.flavor }} build_catalyst
|
|
mv build_xros_${{ inputs.flavor }} build_xros
|
|
mv build_xrsimulator_${{ inputs.flavor }} build_xrsimulator
|
|
- name: Prepare destroot folder
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
shell: bash
|
|
run: |
|
|
cd ./packages/react-native/sdks/hermes || exit 1
|
|
chmod +x ./utils/build-apple-framework.sh
|
|
. ./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' }}
|
|
shell: bash
|
|
run: |
|
|
cd ./packages/react-native/sdks/hermes || exit 1
|
|
echo "[HERMES] Creating the universal framework"
|
|
chmod +x ./utils/build-ios-framework.sh
|
|
./utils/build-ios-framework.sh build_framework
|
|
|
|
chmod +x ./destroot/bin/hermesc
|
|
- name: Package the Hermes Apple frameworks
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
shell: bash
|
|
run: |
|
|
BUILD_TYPE="${{ inputs.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/${{ inputs.flavor }}
|
|
cp ./packages/react-native/sdks/hermes/build_macosx/bin/* /tmp/hermes/osx-bin/${{ inputs.flavor }}
|
|
ls -lR /tmp/hermes/osx-bin/
|
|
- name: Create dSYM archive
|
|
if: ${{ steps.check_if_apple_artifacts_are_there.outputs.ARTIFACTS_EXIST != 'true' }}
|
|
shell: bash
|
|
run: |
|
|
FLAVOR=${{ inputs.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"
|
|
mkdir -p "$WORKING_DIR/appletvos"
|
|
mkdir -p "$WORKING_DIR/appletvsimulator"
|
|
mkdir -p "$WORKING_DIR/xros"
|
|
mkdir -p "$WORKING_DIR/xrsimulator"
|
|
|
|
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/"
|
|
cp -r build_appletvos/$DSYM_FILE_PATH "$WORKING_DIR/appletvos/"
|
|
cp -r build_appletvsimulator/$DSYM_FILE_PATH "$WORKING_DIR/appletvsimulator/"
|
|
cp -r build_xros/$DSYM_FILE_PATH "$WORKING_DIR/xros/"
|
|
cp -r build_xrsimulator/$DSYM_FILE_PATH "$WORKING_DIR/xrsimulator/"
|
|
|
|
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.4
|
|
with:
|
|
name: hermes-dSYM-${{ inputs.flavor }}
|
|
path: /tmp/hermes/dSYM/${{ inputs.flavor }}
|
|
- name: Upload hermes Runtime artifacts
|
|
uses: actions/upload-artifact@v4.3.4
|
|
with:
|
|
name: hermes-darwin-bin-${{ inputs.flavor }}
|
|
path: /tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
|
|
- name: Upload hermes osx artifacts
|
|
uses: actions/upload-artifact@v4.3.4
|
|
with:
|
|
name: hermes-osx-bin-${{ inputs.flavor }}
|
|
path: /tmp/hermes/osx-bin/${{ inputs.flavor }}
|
|
- name: Upload Hermes Artifacts
|
|
uses: actions/cache/save@v4
|
|
if: ${{ github.ref == 'refs/heads/main' || contains(github.ref, '-stable') }} # To avoid that the cache explode.
|
|
with:
|
|
key: v4-hermes-artifacts-${{ inputs.flavor }}-${{ inputs.hermes-version }}-${{ inputs.react-native-version }}-${{ hashFiles('./packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh') }}
|
|
path: |
|
|
/tmp/hermes/osx-bin/${{ inputs.flavor }}
|
|
/tmp/hermes/dSYM/${{ inputs.flavor }}
|
|
/tmp/hermes/hermes-runtime-darwin/hermes-ios-${{ inputs.flavor }}.tar.gz
|