1+ name : Compare WebView Screenshots
2+
3+ on :
4+ workflow_dispatch :
5+ schedule :
6+ - cron : " 0 0 * * 0"
7+ workflow_run :
8+ workflows : [ "Generate WebView Screenshots" ]
9+ types :
10+ - completed
11+
12+ permissions :
13+ contents : read
14+ pages : write
15+ id-token : write
16+
17+ jobs :
18+ compare-screenshots :
19+ runs-on : ubuntu-latest
20+
21+ steps :
22+ - name : Checkout code
23+ uses : actions/checkout@v4
24+
25+ - name : Set up JDK 17
26+ uses : actions/setup-java@v4
27+ with :
28+ java-version : ' 17'
29+ distribution : ' temurin'
30+
31+ - name : Setup Android SDK
32+ uses : android-actions/setup-android@v3
33+
34+ - name : Accept Android SDK licenses
35+ run : yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses
36+
37+ - name : Cache Gradle dependencies
38+ uses : actions/cache@v3
39+ with :
40+ path : |
41+ ~/.gradle/caches
42+ ~/.gradle/wrapper
43+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
44+ restore-keys : |
45+ ${{ runner.os }}-gradle-
46+
47+ - name : Install Android SDK components
48+ run : |
49+ $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0"
50+
51+ - name : Enable KVM group perms
52+ run : |
53+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
54+ sudo udevadm control --reload-rules
55+ sudo udevadm trigger --name-match=kvm
56+
57+ - name : AVD cache
58+ uses : actions/cache@v3
59+ id : avd-cache
60+ with :
61+ path : |
62+ ~/.android/avd/*
63+ ~/.android/adb*
64+ key : avd-35-x86_64
65+
66+ - name : Create AVD and generate snapshot for caching
67+ if : steps.avd-cache.outputs.cache-hit != 'true'
68+ uses : reactivecircus/android-emulator-runner@v2
69+ with :
70+ api-level : 35
71+ arch : x86_64
72+ target : google_apis
73+ force-avd-creation : false
74+ emulator-options : -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
75+ disable-animations : false
76+ script : echo "Generated AVD snapshot for caching."
77+
78+ - name : Run screenshot tests
79+ uses : reactivecircus/android-emulator-runner@v2
80+ with :
81+ api-level : 35
82+ arch : x86_64
83+ target : google_apis
84+ force-avd-creation : false
85+ emulator-options : -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
86+ disable-animations : false
87+ script : |
88+ ./gradlew executeScreenshotTests || true
89+
90+ - name : Prepare report for GitHub Pages
91+ run : |
92+ mkdir -p public
93+ if [ -d "app/build/reports/shot/debug/verification" ]; then
94+ cp -r app/build/reports/shot/debug/verification/* public/
95+ else
96+ echo "<h1>No screenshot report found</h1>" > public/index.html
97+ fi
98+ - name : Upload artifact for Pages
99+ uses : actions/upload-pages-artifact@v3
100+ with :
101+ path : ./public
102+
103+ - name : Upload comparison results as artifact
104+ uses : actions/upload-artifact@v4
105+ if : always()
106+ with :
107+ name : screenshot-comparison-${{ github.run_id }}
108+ path : |
109+ app/build/reports/shot/debug/verification/
110+ public/
111+ retention-days : 30
112+
113+ deploy :
114+ needs : compare-screenshots
115+ runs-on : ubuntu-latest
116+ environment :
117+ name : github-pages
118+ url : ${{ steps.deployment.outputs.page_url }}
119+
120+ permissions :
121+ pages : write
122+ id-token : write
123+
124+ steps :
125+ - name : Deploy to GitHub Pages
126+ id : deployment
127+ uses : actions/deploy-pages@v4
128+
129+ check-result :
130+ needs : [ compare-screenshots, deploy ]
131+ runs-on : ubuntu-latest
132+ steps :
133+ - name : Download comparison artifact
134+ uses : actions/download-artifact@v4
135+ with :
136+ name : screenshot-comparison-${{ github.run_id }}
137+
138+ - name : Fail job if diff found
139+ run : |
140+ REPORT=$(find . -type f -name "TEST-Shot.xml" | head -n 1)
141+ if [ -z "$REPORT" ]; then
142+ echo "❌ TEST-Shot.xml not found"
143+ exit 1
144+ fi
145+ if grep -q "<failure" "$REPORT"; then
146+ echo "❌ Screenshot diff detected"
147+ exit 1
148+ else
149+ echo "✅ No screenshot diff detected"
150+ fi
0 commit comments