25
25
- name : Checkout
26
26
uses : actions/checkout@v4
27
27
28
- - name : Validate Gradle Wrapper
29
- uses : gradle/wrapper-validation-action@v2
28
+ - name : Enable KVM group perms
29
+ run : |
30
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
31
+ sudo udevadm control --reload-rules
32
+ sudo udevadm trigger --name-match=kvm
33
+ ls /dev/kvm
30
34
31
35
- name : Copy CI gradle.properties
32
36
run : mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
38
42
java-version : 17
39
43
40
44
- name : Setup Gradle
41
- uses : gradle/gradle-build-action@v3
45
+ uses : gradle/actions/setup-gradle@v4
46
+
47
+ - name : Setup Android SDK
48
+ uses : android-actions/setup-android@v3
49
+
50
+ - name : Accept licenses
51
+ run : yes | sdkmanager --licenses || true
42
52
43
53
- name : Check build-logic
44
54
run : ./gradlew check -p build-logic
83
93
continue-on-error : false
84
94
if : steps.screenshotsverify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository
85
95
run : |
86
- echo "::error::Screenshot tests failed, please create a PR in your fork first." && exit 1
96
+ echo "::error::Screenshot tests failed, please create a PR in your fork first."
97
+ echo "Your fork's CI will take screenshots for your fork."
98
+ exit 1
87
99
88
100
# Runs if previous job failed
89
101
- name : Generate new screenshots if verification failed and it's a PR
@@ -101,19 +113,22 @@ jobs:
101
113
commit_message : " 🤖 Updates screenshots"
102
114
103
115
# Run local tests after screenshot tests to avoid wrong UP-TO-DATE. TODO: Ignore screenshots.
104
- - name : Run local tests and create report
105
- if : always()
116
+ - name : Run local tests
106
117
run : ./gradlew testDemoDebug :lint:test
107
- # Replace task exclusions with `-Pandroidx.baselineprofile.skipgeneration` when
108
- # https://android-review.googlesource.com/c/platform/frameworks/support/+/2602790 landed in a
109
- # release build
118
+
119
+ - name : Setup GMD
120
+ run : ./gradlew :benchmarks:pixel6Api33Setup
121
+ --info
122
+ -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true
123
+ -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect"
110
124
111
125
- name : Build all build type and flavor permutations
112
- run : ./gradlew :app:assemble :benchmarks:assemble
113
- -x pixel6Api33ProdNonMinifiedReleaseAndroidTest
114
- -x pixel6Api33DemoNonMinifiedReleaseAndroidTest
115
- -x collectDemoNonMinifiedReleaseBaselineProfile
116
- -x collectProdNonMinifiedReleaseBaselineProfile
126
+ run : ./gradlew :app:assemble :benchmarks:assemble -Pandroidx.baselineprofile.skipgeneration
127
+ -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect"
128
+ -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true
129
+ -Pandroid.experimental.androidTest.numManagedDeviceShards=1
130
+ -Pandroid.experimental.testOptions.managedDevices.maxConcurrentDevices=1
131
+ -Pandroid.experimental.testOptions.managedDevices.setupTimeoutMinutes=5
117
132
118
133
- name : Upload build outputs (APKs)
119
134
uses : actions/upload-artifact@v4
@@ -122,22 +137,35 @@ jobs:
122
137
path : ' **/build/outputs/apk/**/*.apk'
123
138
124
139
- name : Upload JVM local results (XML)
125
- if : always()
140
+ if : ${{ !cancelled() }}
126
141
uses : actions/upload-artifact@v4
127
142
with :
128
143
name : local-test-results
129
144
path : ' **/build/test-results/test*UnitTest/**.xml'
130
145
146
+ - name : Upload screenshot results (PNG)
147
+ if : ${{ !cancelled() }}
148
+ uses : actions/upload-artifact@v4
149
+ with :
150
+ name : screenshot-test-results
151
+ path : ' **/build/outputs/roborazzi/*_compare.png'
152
+
131
153
- name : Check lint
132
154
run : ./gradlew :app:lintProdRelease :app-nia-catalog:lintRelease :lint:lint
133
155
134
156
- name : Upload lint reports (HTML)
135
- if : always()
157
+ if : ${{ !cancelled() }}
136
158
uses : actions/upload-artifact@v4
137
159
with :
138
160
name : lint-reports
139
161
path : ' **/build/reports/lint-results-*.html'
140
162
163
+ - name : Upload lint reports (SARIF)
164
+ if : always()
165
+ uses : github/codeql-action/upload-sarif@v3
166
+ with :
167
+ sarif_file : ' ./'
168
+
141
169
- name : Check badging
142
170
run : ./gradlew :app:checkProdReleaseBadging
143
171
@@ -146,7 +174,7 @@ jobs:
146
174
timeout-minutes : 55
147
175
strategy :
148
176
matrix :
149
- api-level : [26, 30 ]
177
+ api-level : [26, 34 ]
150
178
151
179
steps :
152
180
- name : Delete unnecessary tools 🔧
@@ -180,7 +208,10 @@ jobs:
180
208
java-version : 17
181
209
182
210
- name : Setup Gradle
183
- uses : gradle/gradle-build-action@v3
211
+ uses : gradle/actions/setup-gradle@v4
212
+ with :
213
+ validate-wrappers : true
214
+ gradle-home-cache-cleanup : true
184
215
185
216
- name : Build projects and run instrumentation tests
186
217
uses : reactivecircus/android-emulator-runner@v2
@@ -203,7 +234,7 @@ jobs:
203
234
run : ./gradlew createDemoDebugCombinedCoverageReport
204
235
205
236
- name : Upload test reports
206
- if : always()
237
+ if : ${{ !cancelled() }}
207
238
uses : actions/upload-artifact@v4
208
239
with :
209
240
name : test-reports-${{ matrix.api-level }}
@@ -212,7 +243,7 @@ jobs:
212
243
- name : Display local test coverage (only API 30)
213
244
if : matrix.api-level == 30
214
245
id : jacoco
215
- uses : madrapps/jacoco-report@v1.6 .1
246
+ uses : madrapps/jacoco-report@v1.7 .1
216
247
with :
217
248
title : Combined test coverage report
218
249
min-coverage-overall : 40
0 commit comments