add CI/CD setup #22
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: React Native Maestro Tests | |
on: | |
push: | |
branches: [ main, develop ] | |
pull_request: | |
branches: [ main, develop ] | |
workflow_dispatch: | |
jobs: | |
test-android-emulator: | |
name: Test Android Emulator Setup | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'zulu' | |
java-version: '17' | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
cache: 'yarn' | |
- name: Install dependencies | |
run: yarn install --frozen-lockfile | |
- name: Setup Android SDK | |
uses: android-actions/setup-android@v3 | |
- name: Enable KVM | |
run: | | |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
sudo udevadm control --reload-rules | |
sudo udevadm trigger --name-match=kvm | |
- name: Run Maestro tests on Android emulator | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: 29 | |
arch: x86_64 | |
force-avd-creation: true | |
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
disable-animations: true | |
script: | | |
adb devices | |
echo "Building and installing app..." | |
yarn android | |
echo "Waiting for app to start..." | |
sleep 60 | |
echo "Installing Maestro..." | |
curl -Ls "https://get.maestro.mobile.dev" | bash | |
export PATH="$PATH":"$HOME/.maestro/bin" | |
echo "Running Maestro tests..." | |
maestro --verbose test e2e/main-flow-android.yaml | |
- name: Upload Maestro logs | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: maestro-android-logs | |
path: | | |
~/.maestro/logs | |
./e2e/main-flow-android.yaml | |
test-ios-simulator: | |
name: Test iOS Simulator Setup | |
runs-on: macos-13 | |
env: | |
DEVELOPER_DIR: /Applications/Xcode_15.0.app/Contents/Developer | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
cache: 'yarn' | |
- name: Install dependencies | |
run: yarn install --frozen-lockfile | |
- name: Cache CocoaPods | |
uses: actions/cache@v3 | |
with: | |
path: ios/Pods | |
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} | |
restore-keys: | | |
${{ runner.os }}-pods- | |
- name: Install CocoaPods | |
run: | | |
cd ios | |
pod install --repo-update | |
- name: Build iOS app | |
run: | | |
cd ios | |
xcodebuild -workspace YourApp.xcworkspace -scheme YourApp -destination 'platform=iOS Simulator,name=iPhone 14,OS=16.4' -configuration Debug build -quiet | |
- name: Create and boot iOS simulator | |
run: | | |
UDID=$(xcrun simctl create "iPhone 14" com.apple.CoreSimulator.SimDeviceType.iPhone-14 com.apple.CoreSimulator.SimRuntime.iOS-16-4) | |
xcrun simctl boot $UDID | |
MAX_RETRY=30 | |
COUNT=0 | |
while [ $COUNT -lt $MAX_RETRY ]; do | |
xcrun simctl list devices | grep "(Booted)" && break | |
echo "Waiting for simulator to boot..." | |
sleep 10 | |
COUNT=$((COUNT+1)) | |
done | |
if [ $COUNT -eq $MAX_RETRY ]; then | |
echo "Simulator failed to boot in time" | |
exit 1 | |
fi | |
echo "Simulator is ready" | |
- name: Run app in simulator | |
run: | | |
xcrun simctl install booted ios/build/Build/Products/Debug-iphonesimulator/YourApp.app | |
xcrun simctl launch booted your.app.bundle.identifier | |
- name: Install and run Maestro | |
run: | | |
set -x | |
curl -Ls "https://get.maestro.mobile.dev" | bash | |
export PATH="$PATH":"$HOME/.maestro/bin" | |
echo "Running diagnostics..." | |
xcrun simctl list | |
echo "Running Maestro tests..." | |
maestro --verbose test e2e/main-flow-ios.yaml | |
- name: Upload Maestro logs | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: maestro-ios-logs | |
path: | | |
~/.maestro/logs | |
./e2e/main-flow-ios.yaml |