name: Android CI
on:
  workflow_dispatch:
  push:
    branches:
      - main
      - staging
      - trying
  pull_request:
    branches:
      - main
permissions:
  actions: none
  checks: none
  contents: read
  deployments: none
  discussions: none
  id-token: none
  issues: none
  packages: none
  pages: none
  pull-requests: none
  repository-projects: none
  security-events: none
  statuses: none
env:
  JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        api-level: [ 21, 34 ]
    steps:
    - uses: actions/checkout@v4.2.2
    - name: Fail on bad translations
      run: if grep -ri "&lt;xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
    - uses: gradle/actions/wrapper-validation@v4
    - name: set up OpenJDK 17
      run: |
        sudo apt-get update
        sudo apt-get install -y openjdk-17-jdk-headless
        sudo update-alternatives --auto java
    - name: Build
      run: ./gradlew assembleRelease
    - name: Check lint
      run: ./gradlew lintRelease
    - name: Run unit tests
      run: timeout 5m ./gradlew testReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew testReleaseUnitTest; }
    - name: Enable KVM
      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
    - name: Run instrumented tests
      uses: ReactiveCircus/android-emulator-runner@v2
      with:
        api-level: ${{ matrix.api-level }}
        arch: x86_64
        script: ./gradlew connectedCheck
    - name: SpotBugs
      run: ./gradlew spotbugsRelease
    - name: Archive test results
      if: always()
      uses: actions/upload-artifact@v4.4.3
      with:
        name: test-results-api${{ matrix.api-level }}
        path: app/build/reports
