@@ -2,9 +2,14 @@ name: Maestro Tests on Android
22
33on :
44 workflow_call :
5+ inputs :
6+ shard :
7+ required : true
8+ type : string
59
610jobs :
711 android-test :
12+ name : ' Android Tests'
813 runs-on : ubuntu-latest
914
1015 steps :
3843 sudo udevadm control --reload-rules
3944 sudo udevadm trigger --name-match=kvm
4045
46+ - name : Create Maestro script
47+ run : |
48+ cat << 'EOF' > run-maestro.sh
49+ #!/bin/bash
50+ SHARD=${{ inputs.shard }}
51+ echo "Running shard: $SHARD"
52+
53+ adb shell settings put system show_touches 1
54+ adb install app-experimental-release.apk
55+ adb shell monkey -p chat.rocket.reactnative -c android.intent.category.LAUNCHER 1
56+ sleep 10
57+ adb shell am force-stop chat.rocket.reactnative
58+ export MAESTRO_DRIVER_STARTUP_TIMEOUT=120000
59+
60+ MAX_RETRIES=3
61+ ATTEMPT=1
62+ FINAL_EXIT_CODE=1
63+
64+ while [ $ATTEMPT -le $MAX_RETRIES ]; do
65+ echo "Attempt $ATTEMPT of $MAX_RETRIES"
66+
67+ echo "Starting screen recording..."
68+ adb shell screenrecord /sdcard/test_run.mp4 > /dev/null 2>&1 &
69+ RECORD_PID=$!
70+
71+ maestro test .maestro --exclude-tags=util --include-tags=test-$SHARD --format junit --output maestro-report.xml
72+ TEST_EXIT_CODE=$?
73+
74+ echo "Stopping screen recording..."
75+ kill -INT $RECORD_PID || true
76+ sleep 2
77+
78+ echo "Pulling video from device..."
79+ adb pull /sdcard/test_run.mp4 test_run_${SHARD}_attempt_${ATTEMPT}.mp4 || true
80+ adb shell rm /sdcard/test_run.mp4 || true
81+
82+ if [ $TEST_EXIT_CODE -eq 0 ]; then
83+ echo "Maestro passed on attempt $ATTEMPT"
84+ FINAL_EXIT_CODE=0
85+ break
86+ else
87+ echo "Maestro failed on attempt $ATTEMPT"
88+ fi
89+
90+ ATTEMPT=$((ATTEMPT+1))
91+ done
92+
93+ exit $FINAL_EXIT_CODE
94+ EOF
95+
96+ chmod +x run-maestro.sh
97+ env :
98+ SHARD : ${{ inputs.shard }}
99+
41100 - name : Start Android Emulator and Run Maestro Tests
42101 uses : reactivecircus/android-emulator-runner@v2
102+ timeout-minutes : 60
43103 with :
44104 api-level : 34
45105 disk-size : 4096M
@@ -51,24 +111,20 @@ jobs:
51111 force-avd-creation : false
52112 emulator-options : -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
53113 disable-animations : true
54- script : |
55- adb install app-experimental-release.apk
56- adb shell monkey -p chat.rocket.reactnative -c android.intent.category.LAUNCHER 1
57- sleep 10
58- adb shell am force-stop chat.rocket.reactnative
59- export MAESTRO_DRIVER_STARTUP_TIMEOUT=120000
60- maestro test .maestro --format junit --output maestro-report.xml
114+ script : ./run-maestro.sh
61115
62116 - name : Upload Test Report
63117 if : always()
64118 uses : actions/upload-artifact@v4
65119 with :
66- name : Android Test Report
120+ name : Android Test Report - Shard ${{ inputs.shard }}
67121 path : maestro-report.xml
68-
69- - name : Upload Maestro Logs
122+ retention-days : 7
123+
124+ - name : Upload Screen Recording
70125 if : always()
71126 uses : actions/upload-artifact@v4
72127 with :
73- name : Android Maestro Logs
74- path : ~/.maestro/tests/
128+ name : maestro-video-${{ inputs.shard }}
129+ path : test_run_${{ inputs.shard }}_attempt_*.mp4
130+ retention-days : 7
0 commit comments