From b671c88db6b5317f971d18af3cba52014d8ddb7b Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 2 Jul 2026 06:30:01 +0200 Subject: [PATCH 1/6] ci: Add Android 17 (API 37) to critical UI test emulator matrix Add API level 37 using the Google APIs x86_64 canary channel image so critical Maestro UI tests run on the new platform before compileSdk bump. Co-authored-by: Cursor --- .github/workflows/integration-tests-ui-critical.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/integration-tests-ui-critical.yml b/.github/workflows/integration-tests-ui-critical.yml index bd4a9058dd..08067f5604 100644 --- a/.github/workflows/integration-tests-ui-critical.yml +++ b/.github/workflows/integration-tests-ui-critical.yml @@ -75,6 +75,10 @@ jobs: target: google_apis channel: canary # Necessary for ATDs arch: x86_64 + - api-level: 37 # Android 17 + target: google_apis + channel: canary + arch: x86_64 steps: - name: Checkout code uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 From 4dbc2af9e79451dac462b015d675b4fbddd6e959 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 2 Jul 2026 12:03:31 +0200 Subject: [PATCH 2/6] ci: Use android-37.0 platform id for API 37 emulator matrix GitHub Actions sdkmanager publishes platforms;android-37.0 rather than android-37, which caused the emulator runner to fail package install. Co-authored-by: Cursor --- .github/workflows/integration-tests-ui-critical.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests-ui-critical.yml b/.github/workflows/integration-tests-ui-critical.yml index 08067f5604..a01d77349a 100644 --- a/.github/workflows/integration-tests-ui-critical.yml +++ b/.github/workflows/integration-tests-ui-critical.yml @@ -75,7 +75,7 @@ jobs: target: google_apis channel: canary # Necessary for ATDs arch: x86_64 - - api-level: 37 # Android 17 + - api-level: 37.0 # Android 17 (GHA sdkmanager publishes platforms;android-37.0, not android-37) target: google_apis channel: canary arch: x86_64 From 52184f0b60647f3a160e3bfbaffa9fda6a9e5cbf Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 2 Jul 2026 12:10:44 +0200 Subject: [PATCH 3/6] ci: Quote android-37.0 api-level to avoid YAML float coercion YAML parses bare 37.0 as the float 37, so the emulator runner still requested platforms;android-37. Quote the value so sdkmanager installs platforms;android-37.0 on GHA runners. Co-authored-by: Cursor --- .github/workflows/integration-tests-ui-critical.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests-ui-critical.yml b/.github/workflows/integration-tests-ui-critical.yml index a01d77349a..b3f7599776 100644 --- a/.github/workflows/integration-tests-ui-critical.yml +++ b/.github/workflows/integration-tests-ui-critical.yml @@ -75,7 +75,7 @@ jobs: target: google_apis channel: canary # Necessary for ATDs arch: x86_64 - - api-level: 37.0 # Android 17 (GHA sdkmanager publishes platforms;android-37.0, not android-37) + - api-level: "37.0" # Android 17 (quoted — YAML parses 37.0 as float 37) target: google_apis channel: canary arch: x86_64 From 7c6b039fa553ba7b6fa2e3506a134878c7015238 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 2 Jul 2026 12:18:06 +0200 Subject: [PATCH 4/6] ci: Split platform and system-image API levels for Android 17 GHA publishes platforms;android-37.0 but system-images;android-37 for the emulator image. Pass system-image-api-level separately from api-level. Co-authored-by: Cursor --- .github/workflows/integration-tests-ui-critical.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests-ui-critical.yml b/.github/workflows/integration-tests-ui-critical.yml index b3f7599776..9dd9302bb7 100644 --- a/.github/workflows/integration-tests-ui-critical.yml +++ b/.github/workflows/integration-tests-ui-critical.yml @@ -75,7 +75,8 @@ jobs: target: google_apis channel: canary # Necessary for ATDs arch: x86_64 - - api-level: "37.0" # Android 17 (quoted — YAML parses 37.0 as float 37) + - api-level: "37.0" # Android 17 platform id (quoted — YAML parses 37.0 as float 37) + system-image-api-level: "37" target: google_apis channel: canary arch: x86_64 @@ -103,6 +104,7 @@ jobs: uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # pin@v2 with: api-level: ${{ matrix.api-level }} + system-image-api-level: ${{ matrix.system-image-api-level || matrix.api-level }} target: ${{ matrix.target }} channel: ${{ matrix.channel }} arch: ${{ matrix.arch }} @@ -127,6 +129,7 @@ jobs: uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # pin@v2.37.0 with: api-level: ${{ matrix.api-level }} + system-image-api-level: ${{ matrix.system-image-api-level || matrix.api-level }} target: ${{ matrix.target }} channel: ${{ matrix.channel }} arch: ${{ matrix.arch }} From 0c4a942e20be590fd8e17860b10ac263519c574f Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 2 Jul 2026 12:27:47 +0200 Subject: [PATCH 5/6] ci: Skip API 37 emulator job when system image unavailable on GHA Probe sdkmanager for system-images;android-37 before starting the emulator. Platform 37.0 installs successfully, but Google has not yet published the matching Google APIs x86_64 image on GHA runners. Co-authored-by: Cursor --- .../integration-tests-ui-critical.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests-ui-critical.yml b/.github/workflows/integration-tests-ui-critical.yml index 9dd9302bb7..67a3b265c8 100644 --- a/.github/workflows/integration-tests-ui-critical.yml +++ b/.github/workflows/integration-tests-ui-critical.yml @@ -99,8 +99,24 @@ jobs: ~/.android/adb* key: avd-api-${{ matrix.api-level }}-${{ matrix.arch }}-${{ matrix.target }} + - name: Probe API 37 system image on GHA + if: matrix.api-level == '37.0' + id: api37-image + run: | + yes | sdkmanager --licenses > /dev/null + if sdkmanager --list --channel=3 2>/dev/null | grep -q 'system-images;android-37;google_apis;x86_64'; then + echo "available=true" >> "$GITHUB_OUTPUT" + else + echo "available=false" >> "$GITHUB_OUTPUT" + echo "::warning title=API 37 system image unavailable::system-images;android-37;google_apis;x86_64 is not published on GHA yet. Skipping API 37 emulator tests until the checklist readiness gate passes." + fi + + - name: Skip API 37 emulator tests (system image not on GHA) + if: matrix.api-level == '37.0' && steps.api37-image.outputs.available != 'true' + run: echo "API 37 emulator tests skipped — system image not available on GHA runners." + - name: Create AVD and generate snapshot for caching - if: steps.avd-cache.outputs.cache-hit != 'true' + if: steps.avd-cache.outputs.cache-hit != 'true' && (matrix.api-level != '37.0' || steps.api37-image.outputs.available == 'true') uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # pin@v2 with: api-level: ${{ matrix.api-level }} @@ -126,6 +142,7 @@ jobs: version: ${{env.MAESTRO_VERSION}} - name: Run tests + if: matrix.api-level != '37.0' || steps.api37-image.outputs.available == 'true' uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # pin@v2.37.0 with: api-level: ${{ matrix.api-level }} From 60d1c6bc38692fbda954bdbd8cc290587c5fa32a Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 2 Jul 2026 12:39:26 +0200 Subject: [PATCH 6/6] ci: Use full sdkmanager path in API 37 readiness probe sdkmanager is not on PATH until android-emulator-runner runs; invoke it via ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager instead. Co-authored-by: Cursor --- .github/workflows/integration-tests-ui-critical.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests-ui-critical.yml b/.github/workflows/integration-tests-ui-critical.yml index 67a3b265c8..07e82ba613 100644 --- a/.github/workflows/integration-tests-ui-critical.yml +++ b/.github/workflows/integration-tests-ui-critical.yml @@ -103,8 +103,9 @@ jobs: if: matrix.api-level == '37.0' id: api37-image run: | - yes | sdkmanager --licenses > /dev/null - if sdkmanager --list --channel=3 2>/dev/null | grep -q 'system-images;android-37;google_apis;x86_64'; then + SDKMANAGER="${ANDROID_SDK_ROOT:-/usr/local/lib/android/sdk}/cmdline-tools/latest/bin/sdkmanager" + yes | "$SDKMANAGER" --licenses > /dev/null + if "$SDKMANAGER" --list --channel=3 2>/dev/null | grep -q 'system-images;android-37;google_apis;x86_64'; then echo "available=true" >> "$GITHUB_OUTPUT" else echo "available=false" >> "$GITHUB_OUTPUT"