2525 - name : Checkout
2626 uses : actions/checkout@v4
2727
28- - name : Validate Gradle Wrapper
29- uses : gradle/wrapper-validation-action@v3
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
3034
3135 - name : Copy CI gradle.properties
3236 run : mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
3842 java-version : 17
3943
4044 - 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
4252
4353 - name : Check build-logic
4454 run : ./gradlew check -p build-logic
8393 continue-on-error : false
8494 if : steps.screenshotsverify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository
8595 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
8799
88100 # Runs if previous job failed
89101 - name : Generate new screenshots if verification failed and it's a PR
@@ -101,19 +113,22 @@ jobs:
101113 commit_message : " 🤖 Updates screenshots"
102114
103115 # 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
106117 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"
110124
111125 - 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
117132
118133 - name : Upload build outputs (APKs)
119134 uses : actions/upload-artifact@v4
@@ -122,14 +137,14 @@ jobs:
122137 path : ' **/build/outputs/apk/**/*.apk'
123138
124139 - name : Upload JVM local results (XML)
125- if : always()
140+ if : ${{ !cancelled() }}
126141 uses : actions/upload-artifact@v4
127142 with :
128143 name : local-test-results
129144 path : ' **/build/test-results/test*UnitTest/**.xml'
130145
131146 - name : Upload screenshot results (PNG)
132- if : always()
147+ if : ${{ !cancelled() }}
133148 uses : actions/upload-artifact@v4
134149 with :
135150 name : screenshot-test-results
@@ -139,12 +154,18 @@ jobs:
139154 run : ./gradlew :app:lintProdRelease :app-nia-catalog:lintRelease :lint:lint
140155
141156 - name : Upload lint reports (HTML)
142- if : always()
157+ if : ${{ !cancelled() }}
143158 uses : actions/upload-artifact@v4
144159 with :
145160 name : lint-reports
146161 path : ' **/build/reports/lint-results-*.html'
147162
163+ - name : Upload lint reports (SARIF)
164+ if : always()
165+ uses : github/codeql-action/upload-sarif@v3
166+ with :
167+ sarif_file : ' ./'
168+
148169 - name : Check badging
149170 run : ./gradlew :app:checkProdReleaseBadging
150171
@@ -153,7 +174,7 @@ jobs:
153174 timeout-minutes : 55
154175 strategy :
155176 matrix :
156- api-level : [21, 26, 30 ]
177+ api-level : [26, 34 ]
157178
158179 steps :
159180 - name : Delete unnecessary tools 🔧
@@ -187,7 +208,10 @@ jobs:
187208 java-version : 17
188209
189210 - name : Setup Gradle
190- 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
191215
192216 - name : Build projects and run instrumentation tests
193217 uses : reactivecircus/android-emulator-runner@v2
@@ -210,7 +234,7 @@ jobs:
210234 run : ./gradlew createDemoDebugCombinedCoverageReport
211235
212236 - name : Upload test reports
213- if : always()
237+ if : ${{ !cancelled() }}
214238 uses : actions/upload-artifact@v4
215239 with :
216240 name : test-reports-${{ matrix.api-level }}
@@ -219,7 +243,7 @@ jobs:
219243 - name : Display local test coverage (only API 30)
220244 if : matrix.api-level == 30
221245 id : jacoco
222- uses : madrapps/jacoco-report@v1.6 .1
246+ uses : madrapps/jacoco-report@v1.7 .1
223247 with :
224248 title : Combined test coverage report
225249 min-coverage-overall : 40
0 commit comments