mirror of
				https://gitcode.com/gh_mirrors/re/react-native-pushy.git
				synced 2025-10-31 13:23:12 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			183 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: Testing E2E iOS
 | |
| 
 | |
| on:
 | |
|   pull_request:
 | |
|     branches:
 | |
|       - '**'
 | |
|     paths-ignore:
 | |
|       - 'docs/**'
 | |
|       - 'website/**'
 | |
|       - '.spellcheck.dict.txt'
 | |
|       - '**/*.md'
 | |
| 
 | |
|   push:
 | |
|     branches:
 | |
|       - master
 | |
|     paths-ignore:
 | |
|       - 'docs/**'
 | |
|       - 'website/**'
 | |
|       - '.spellcheck.dict.txt'
 | |
|         # - '**/*.md'
 | |
| 
 | |
| concurrency:
 | |
|   group: ${{ github.workflow }}-${{ github.ref }}
 | |
|   cancel-in-progress: true
 | |
| 
 | |
| jobs:
 | |
|   ios:
 | |
|     name: iOS
 | |
|     runs-on: macos-14-arm64
 | |
|     # TODO matrix across APIs, at least 11 and 15 (lowest to highest)
 | |
|     timeout-minutes: 60
 | |
|     env:
 | |
|       CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
 | |
|     steps:
 | |
|       # Set up tool versions
 | |
|       - uses: actions/setup-node@v4
 | |
|         with:
 | |
|           node-version: 18
 | |
| 
 | |
|       - name: Configure JDK 1.11
 | |
|         uses: actions/setup-java@v3
 | |
|         with:
 | |
|           distribution: 'temurin'
 | |
|           java-version: '11'
 | |
| 
 | |
|       - uses: maxim-lobanov/setup-xcode@v1
 | |
|         with:
 | |
|           xcode-version: 'latest-stable'
 | |
| 
 | |
|       - uses: actions/checkout@v3
 | |
|         with:
 | |
|           fetch-depth: 50
 | |
| 
 | |
|       # Set path variables needed for caches
 | |
|       - name: Set workflow variables
 | |
|         id: workflow-variables
 | |
|         run: |
 | |
|           echo "metro-cache=$HOME/.metro" >> $GITHUB_OUTPUT
 | |
|           echo "xcode-version=$(xcodebuild -version|tail -1|cut -f3 -d' ')" >> $GITHUB_OUTPUT
 | |
|           echo "yarn-cache-dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
 | |
| 
 | |
|       - uses: actions/cache@v3
 | |
|         name: Yarn Cache
 | |
|         id: yarn-cache
 | |
|         with:
 | |
|           path: ${{ steps.workflow-variables.outputs.yarn-cache-dir }}
 | |
|           key: ${{ runner.os }}-yarn-v1-${{ hashFiles('yarn.lock') }}
 | |
|           restore-keys: ${{ runner.os }}-yarn-v1
 | |
| 
 | |
|       - uses: actions/cache@v3
 | |
|         name: Detox Framework Cache
 | |
|         id: detox-cache
 | |
|         with:
 | |
|           path: ~/Library/Detox/ios
 | |
|           key: ${{ runner.os }}-detox-framework-cache-${{ steps.workflow-variables.outputs.xcode-version }}
 | |
| 
 | |
|       # Detox is compiled during yarn install, using Xcode, set up cache first
 | |
|       - uses: hendrikmuhs/ccache-action@v1.2
 | |
|         name: Xcode Compile Cache
 | |
|         with:
 | |
|           key: ${{ runner.os }}-v2 # makes a unique key w/related restore key internally
 | |
|           max-size: 1500M
 | |
| 
 | |
|       - name: Yarn Install
 | |
|         uses: nick-invision/retry@v2
 | |
|         with:
 | |
|           timeout_minutes: 10
 | |
|           retry_wait_seconds: 60
 | |
|           max_attempts: 3
 | |
|           command: yarn --no-audit --prefer-offline
 | |
| 
 | |
|       - name: Setup Ruby
 | |
|         uses: ruby/setup-ruby@v1
 | |
|         with:
 | |
|           ruby-version: 3
 | |
| 
 | |
|       - name: Update Ruby build tools
 | |
|         uses: nick-invision/retry@v2
 | |
|         with:
 | |
|           timeout_minutes: 2
 | |
|           retry_wait_seconds: 60
 | |
|           max_attempts: 3
 | |
|           command: gem update cocoapods xcodeproj
 | |
| 
 | |
|       - uses: actions/cache@v3
 | |
|         name: Cache Pods
 | |
|         id: pods-cache
 | |
|         with:
 | |
|           path: tests/ios/Pods
 | |
|           key: ${{ runner.os }}-pods-v2-${{ hashFiles('tests/ios/Podfile.lock') }}
 | |
|           restore-keys: ${{ runner.os }}-pods-v2
 | |
| 
 | |
|       - name: Pod Install
 | |
|         uses: nick-invision/retry@v2
 | |
|         with:
 | |
|           timeout_minutes: 10
 | |
|           retry_wait_seconds: 30
 | |
|           max_attempts: 3
 | |
|           command: yarn tests:ios:pod:install
 | |
| 
 | |
|       - name: Cache Firestore Emulator
 | |
|         uses: actions/cache@v3
 | |
|         with:
 | |
|           path: ~/.cache/pushy/emulators
 | |
|           key: pushy-emulators-v1-${{ github.run_id }}
 | |
|           restore-keys: pushy-emulators-v1
 | |
| 
 | |
|       - name: Start Firestore Emulator
 | |
|         run: yarn tests:emulator:start-ci
 | |
| 
 | |
|       - name: Install brew utilities
 | |
|         uses: nick-invision/retry@v2
 | |
|         with:
 | |
|           timeout_minutes: 5
 | |
|           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 xcbeautify && applesimutils --list
 | |
| 
 | |
|       - name: Build iOS App
 | |
|         run: |
 | |
|           export PATH="/usr/lib/ccache:/usr/local/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
 | |
|           export CCACHE_LIMIT_MULTIPLE=0.95
 | |
|           ccache -s
 | |
|           export SKIP_BUNDLING=1
 | |
|           export RCT_NO_LAUNCH_PACKAGER=1
 | |
|           set -o pipefail
 | |
|           yarn build:ios-debug
 | |
|           ccache -s
 | |
|         shell: bash
 | |
| 
 | |
|       - name: Metro Bundler Cache
 | |
|         uses: actions/cache@v3
 | |
|         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 yarn tests:packager:jet-ci &
 | |
|           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"
 | |
| 
 | |
|       - name: Create Simulator Log
 | |
|         # With a little delay so the detox test below has time to spawn it, missing the first part of boot is fine
 | |
|         # If you boot the simulator separately from detox, some other race fails and detox testee never sends ready to proxy
 | |
|         continue-on-error: true
 | |
|         run: nohup sh -c "sleep 30 && xcrun simctl spawn booted log stream --level debug --style compact > simulator.log 2>&1 &"
 | |
| 
 | |
|       - name: Detox Test
 | |
|         timeout-minutes: 60
 | |
|         run: yarn test:ios-debug
 | 
