2727 env :
2828 EMULATOR_API_LEVEL : 34
2929 OUTPUT_DIR : ~/output
30+ GRADLE_OPTS : ' -Dorg.gradle.daemon=false -Dorg.gradle.caching=true'
3031
3132 steps :
33+ - name : Maximize build space
34+ uses : AdityaGarg8/remove-unwanted-software@v5
35+ with :
36+ remove-dotnet : ' true'
37+ remove-haskell : ' true'
38+ remove-codeql : ' true'
39+ remove-docker-images : ' true'
40+
3241 - name : Checkout
3342 uses : actions/checkout@v5
3443
@@ -50,17 +59,20 @@ jobs:
5059 with :
5160 distribution : ' corretto'
5261 java-version : ' 17'
53- cache : gradle
5462
55- - name : Cache Android SDK
56- uses : actions/cache@v4
63+ - name : Restore Gradle cache
64+ uses : actions/cache/restore@v5
5765 with :
5866 path : |
59- "${{ env.ANDROID_SDK_ROOT }}"
60- ~/.android
61- key : " ${{ runner.os }}-android-sdk-${{ hashFiles('.github/workflows/e2e-android-test.yml') }}"
67+ ~/.gradle/caches
68+ ~/.gradle/wrapper
69+ example/android/.gradle
70+ example/android/build
71+ example/android/app/.cxx
72+ example/android/app/build
73+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
6274 restore-keys : |
63- " ${{ runner.os }}-android-sdk-"
75+ ${{ runner.os }}-gradle-
6476
6577 - name : Install System Dependencies
6678 run : |
7385 - name : Install Dependencies
7486 run : bun install
7587
88+ - name : Build Android App
89+ working-directory : ./example/android
90+ run : |
91+ echo "Building Android app (x86_64 only)..."
92+ ./gradlew :app:assembleDebug -PreactNativeArchitectures=x86_64 --build-cache > $HOME/output/android-build.log 2>&1
93+
7694 - name : Install Maestro CLI
7795 run : |
7896 export MAESTRO_VERSION=2.0.10
@@ -86,29 +104,14 @@ jobs:
86104 sudo udevadm control --reload-rules
87105 sudo udevadm trigger --name-match=kvm
88106
89- - name : AVD cache
90- uses : actions/cache@v4
107+ - name : Restore AVD cache
108+ uses : actions/cache@v5
91109 id : avd-cache
92110 with :
93111 path : |
94112 ~/.android/avd/*
95113 ~/.android/adb*
96- key : avd-${{ env.EMULATOR_API_LEVEL }}
97-
98- - name : Create AVD and Generate Snapshot for Caching
99- if : steps.avd-cache.outputs.cache-hit != 'true'
100- uses : reactivecircus/android-emulator-runner@v2
101- with :
102- api-level : ${{ env.EMULATOR_API_LEVEL }}
103- arch : x86_64
104- force-avd-creation : false
105- emulator-options : -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -no-metrics
106- disable-animations : false
107- script : echo "Generated AVD snapshot for caching."
108-
109- - name : Make scripts executable
110- run : chmod +x test/e2e/*.sh
111- working-directory : ./example/
114+ key : avd-pixel7pro-${{ env.EMULATOR_API_LEVEL }}
112115
113116 - name : Run E2E Tests
114117 uses : reactivecircus/android-emulator-runner@v2
@@ -117,12 +120,29 @@ jobs:
117120 with :
118121 api-level : ${{ env.EMULATOR_API_LEVEL }}
119122 arch : x86_64
120- profile : pixel_6
123+ profile : pixel_7_pro
121124 force-avd-creation : false
122125 emulator-options : -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -no-metrics
123126 disable-animations : true
124- working-directory : ./example/
125- script : ./test/e2e/run-android.sh
127+ working-directory : ./example
128+ script : ./test/e2e/scripts/test-android.sh
129+
130+ - name : Stop Gradle Daemon
131+ if : always()
132+ working-directory : ./example/android
133+ run : ./gradlew --stop
134+
135+ - name : Collect Screenshots
136+ if : always()
137+ run : |
138+ mkdir -p $HOME/output/screenshots
139+ LATEST_SCREENSHOT=$(find $HOME/output -name "screenshot-*.png" -type f 2>/dev/null | sort -r | head -1)
140+ if [ -n "$LATEST_SCREENSHOT" ]; then
141+ echo "Copying screenshot from $LATEST_SCREENSHOT to screenshots/android-test-result.png"
142+ cp "$LATEST_SCREENSHOT" $HOME/output/screenshots/android-test-result.png
143+ else
144+ echo "No screenshot found to copy"
145+ fi
126146
127147 - name : Post Maestro Screenshot to PR
128148 if : always()
@@ -143,6 +163,19 @@ jobs:
143163 ${{ env.OUTPUT_DIR }}/screenshots/*.png
144164 retention-days : 5
145165
166+ - name : Save Gradle cache
167+ if : always()
168+ uses : actions/cache/save@v5
169+ with :
170+ path : |
171+ ~/.gradle/caches
172+ ~/.gradle/wrapper
173+ example/android/.gradle
174+ example/android/build
175+ example/android/app/.cxx
176+ example/android/app/build
177+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
178+
146179 - name : Exit with Test Result
147180 if : always()
148181 run : |
0 commit comments