name: Android validation on: push: pull_request: workflow_dispatch: permissions: contents: read concurrency: group: android-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-24.04 timeout-minutes: 30 steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - uses: actions/setup-java@cf277c60eb25467037889841efdb72551f06f6c3 # v4 with: distribution: temurin java-version: '17' - name: Build, test and lint (release remains unsigned) run: bash android/gradlew -p android testDebugUnitTest lintDebug lintRelease assembleDebug assembleRelease bundleRelease - name: Source formatting and repository invariants run: | bash scripts/check-format.sh python3 scripts/check-repository.py python3 -m py_compile scripts/*.py python3 scripts/test-verifier.py - name: Check dependencies against OSV run: python3 scripts/check-dependencies.py - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 if: always() with: name: android-builds-and-reports path: | android/app/build/outputs/apk/debug/*.apk android/app/build/outputs/apk/release/*unsigned.apk android/app/build/outputs/bundle/release/*.aab android/app/build/reports/ retention-days: 14 emulator: runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: api: ['35', '37.0'] timeout-minutes: 35 steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 - uses: actions/setup-java@cf277c60eb25467037889841efdb72551f06f6c3 with: distribution: temurin java-version: '17' - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: '22.22.1' - name: Prepare pinned, unmodified upstream run: | git clone --filter=blob:none https://github.com/ulsklyc/yuvomi.git "$RUNNER_TEMP/upstream" git -C "$RUNNER_TEMP/upstream" checkout 10bfef7686ed7303b4c74c7fcc55a5eb16356c9d npm ci --omit=dev --prefix "$RUNNER_TEMP/upstream" - name: Enable KVM for the emulator run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm - uses: reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2 with: api-level: ${{ matrix.api }} arch: x86_64 target: google_apis disable-animations: true script: | bash android/gradlew -p android connectedDebugAndroidTest python3 scripts/verify-test-results.py android/app/build/outputs/androidTest-results/connected/debug --minimum 6 python3 scripts/test-integration.py "$RUNNER_TEMP/upstream" --android - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 if: always() with: name: android-device-test-reports-${{ matrix.api }} path: android/app/build/reports/androidTests/ retention-days: 14