name: Development tests
on:
  push:
    branches:
      - 'main-ose'
  pull_request:

concurrency:
  group: test-dev-${{ github.ref }}
  cancel-in-progress: true

jobs:
  compile:
    name: Compile for build cache
    if: ${{ github.ref == 'refs/heads/main-ose' }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 21

      # See https://community.gradle.org/github-actions/docs/setup-gradle/ for more information
      - uses: gradle/actions/setup-gradle@v4            # creates build cache when on main branch
        with:
          cache-encryption-key: ${{ secrets.gradle_encryption_key }}
          dependency-graph: generate-and-submit         # submit Github Dependency Graph info

      - run: ./gradlew --build-cache --configuration-cache app:compileOseDebugSource

  test:
    needs: compile
    if: ${{ !cancelled() }}     # even if compile didn't run (because not on main branch)
    name: Lint and unit tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 21
      - uses: gradle/actions/setup-gradle@v4
        with:
          cache-encryption-key: ${{ secrets.gradle_encryption_key }}
          cache-read-only: true

      - name: Run lint
        run: ./gradlew --build-cache --configuration-cache app:lintOseDebug
      - name: Run unit tests
        run: ./gradlew --build-cache --configuration-cache app:testOseDebugUnitTest

  test_on_emulator:
    needs: compile
    if: ${{ !cancelled() }}     # even if compile didn't run (because not on main branch)
    name: Instrumented tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 21
      - uses: gradle/actions/setup-gradle@v4
        with:
          cache-encryption-key: ${{ secrets.gradle_encryption_key }}
          cache-read-only: true

      - name: Enable KVM group perms
        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: Cache AVD
        uses: actions/cache@v4
        with:
          path: ~/.config/.android/avd
          key: avd-${{ hashFiles('app/build.gradle.kts') }}   # gradle-managed devices are defined there

      - name: Run device tests
        run: ./gradlew --build-cache --configuration-cache app:virtualCheck
