-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
469 additions
and
21 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
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: Gradle cache | ||
uses: actions/cache@v3 | ||
with: | ||
path: | | ||
~/.gradle/caches | ||
~/.gradle/wrapper | ||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | ||
restore-keys: | | ||
${{ runner.os }}-gradle- | ||
- name: Increase Gradle memory | ||
run: | | ||
echo "org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError" >> android/gradle.properties | ||
echo "org.gradle.daemon=false" >> android/gradle.properties | ||
- name: Run Maestro tests on Android emulator | ||
uses: reactivecircus/android-emulator-runner@v2 | ||
env: | ||
JAVA_TOOL_OPTIONS: -Xmx4g | ||
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..." | ||
cd android && ./gradlew clean | ||
cd .. && ./gradlew assembleDebug --no-daemon | ||
yarn android --verbose | ||
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 weatherApp.xcworkspace -scheme weatherApp -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/weatherApp.app | ||
xcrun simctl launch booted com.weatherApp.callstack | ||
- 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 |
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
Oops, something went wrong.