Skip to content

chore: running stale bot once a day is sufficient #671

chore: running stale bot once a day is sufficient

chore: running stale bot once a day is sufficient #671

Workflow file for this run

name: Testing E2E iOS
on:
workflow_dispatch:
pull_request:
paths-ignore:
- 'docs/**'
- '**/*.md'
push:
branches:
- main
paths-ignore:
- 'docs/**'
- '**/*.md'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
ios:
name: iOS
runs-on: macos-14-xlarge
# TODO matrix across APIs, at least 10 and 13 (lowest to highest)
timeout-minutes: 100
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 50
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 'latest-stable'
- name: Start Simulator
# The first time you try to `yarn run:ios` after xcode-select, it fails, so get it out of the way...
# ...also we need to directly grant notification permission
continue-on-error: true
run: xcrun simctl boot "iPhone 16"
# Set path variables needed for caches
- name: Set workflow variables
id: workflow-variables
run: |
echo "yarn-cache=$(yarn cache dir)" >> $GITHUB_OUTPUT
echo "metro-cache=$HOME/.metro" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
name: Yarn Cache
id: yarn-cache
with:
path: ${{ steps.workflow-variables.outputs.yarn-cache }}
key: ${{ runner.os }}-yarn-v1-${{ hashFiles('package.json', 'packages/react-native/package.json', 'tests_react_native/package.json') }}
restore-keys: ${{ runner.os }}-yarn-v1
- uses: actions/cache@v4
name: Cache Pods
with:
path: tests_react_native/ios/Pods
key: ${{ runner.os }}-pods-v2-${{ hashFiles('tests_react_native/ios/Podfile.lock') }}
restore-keys: ${{ runner.os }}-pods-v2
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 3
- name: Update Ruby build tools
uses: nick-fields/retry@v3
with:
timeout_minutes: 2
retry_wait_seconds: 60
max_attempts: 3
command: gem update cocoapods xcodeproj
- name: Yarn Install
uses: nick-fields/retry@v3
with:
timeout_minutes: 15
retry_wait_seconds: 60
max_attempts: 4
command: yarn --no-audit --prefer-offline && npm i -g cavy-cli
- name: Install applesimutils
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
retry_wait_seconds: 60
max_attempts: 3
command: HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew && HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils && applesimutils --list
- name: Prepare test index file
# For some reason, in CI, the test file is never running. So let's make all index files the test file.
run: cp tests_react_native/index.test.js tests_react_native/index.js
- name: Metro Bundler Cache
uses: actions/cache@v4
with:
path: ${{ steps.workflow-variables.outputs.metro-cache }}
key: ${{ runner.os }}-metro-v1-${{ github.run_id }}
restore-keys: ${{ runner.os }}-metro-v1
- name: Pre-fetch Javascript bundle
run: |
nohup sh -c "yarn tests_rn:packager > packager.log 2>&1 &"
printf 'Waiting for packager to come online'
until curl --output /dev/null --silent --head --fail http://localhost:8081/status; do
printf '.'
sleep 2
done
echo "Packager is online! Preparing bundle..."
curl --output /dev/null --silent --head --fail "http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false&inlineSourceMap=true"
echo "...javascript bundle ready"
- uses: hendrikmuhs/ccache-action@v1
name: Xcode Compile Cache
with:
key: ${{ runner.os }}-v2 # makes a unique key w/related restore key internally
max-size: 400M
- name: Grant Notification Permission
run: applesimutils --booted --setPermissions notifications=YES --bundle com.notifee.testing
- name: Record App Video
# It seems to take about a minute (based on video recording) for the Simulator to be back up and stable
run: sleep 60 && nohup sh -c "xcrun simctl io booted recordVideo --codec=h264 -f simulator.mp4 2>&1 &"
- name: Create Simulator Log
# With a little delay, missing the first part of boot is fine, it will still capture app issues
run: nohup sh -c "xcrun simctl spawn booted log stream --level debug --style compact > simulator.log 2>&1 &"
- name: E2E Test
timeout-minutes: 30
run: |
export PATH="/opt/homebrew/opt/ccache/libexec:$PATH"
export CCACHE_SLOPPINESS=clang_index_store,file_stat_matches,include_file_ctime,include_file_mtime,ivfsoverlay,pch_defines,modules,system_headers,time_macros
export CCACHE_FILECLONE=true
export CCACHE_DEPEND=true
export CCACHE_INODECACHE=true
ccache -s
yarn tests_rn:ios:test
ccache -s
- name: Stop App Video
if: always()
run: killall -INT simctl
- name: Upload App Video
uses: actions/upload-artifact@v4
continue-on-error: true
if: always()
with:
name: simulator_video
path: simulator.mp4
- name: Upload Simulator Log
uses: actions/upload-artifact@v4
continue-on-error: true
if: always()
with:
name: simulator_logs
path: simulator.log
- name: Upload Packager Log
uses: actions/upload-artifact@v4
continue-on-error: true
if: always()
with:
name: packager_log
path: packager.log
- uses: codecov/codecov-action@v4
with:
verbose: true