| name: Presubmit |
| |
| on: [pull_request] |
| |
| concurrency: |
| group: build-${{ github.ref }} |
| cancel-in-progress: true |
| |
| env: |
| JDK_VERSION: 17 |
| DISTRIBUTION: 'zulu' |
| |
| jobs: |
| build: |
| name: Build |
| runs-on: ${{ vars.RUNNER }} |
| timeout-minutes: 120 |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v4 |
| |
| - name: Validate Gradle Wrapper |
| uses: gradle/actions/wrapper-validation@v3 |
| |
| - name: Set up JDK |
| uses: actions/setup-java@v4 |
| with: |
| distribution: ${{ env.DISTRIBUTION }} |
| java-version: ${{ env.JDK_VERSION }} |
| cache: gradle |
| |
| - name: Setup Gradle |
| uses: gradle/actions/setup-gradle@v3 |
| |
| - name: Build stable debug gradle target |
| run: ./gradlew assembleStableDebug --parallel --build-cache |
| |
| - name: Upload build outputs (APKs) |
| uses: actions/upload-artifact@v4 |
| with: |
| name: build-outputs |
| path: app/build/outputs |
| |
| - name: Upload build reports |
| if: always() |
| continue-on-error: true |
| uses: actions/upload-artifact@v4 |
| with: |
| name: build-reports |
| path: "*/build/reports" |
| |
| test: |
| name: Unit Tests |
| runs-on: ${{ vars.RUNNER }} |
| timeout-minutes: 120 |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v4 |
| |
| - name: Validate Gradle Wrapper |
| uses: gradle/actions/wrapper-validation@v3 |
| |
| - name: Set up JDK |
| uses: actions/setup-java@v4 |
| with: |
| distribution: ${{ env.DISTRIBUTION }} |
| java-version: ${{ env.JDK_VERSION }} |
| cache: gradle |
| |
| - name: Setup Gradle |
| uses: gradle/actions/setup-gradle@v3 |
| continue-on-error: true |
| |
| - name: Run local tests |
| run: ./gradlew test --parallel --build-cache |
| |
| - name: Upload test reports on failure |
| if: failure() |
| uses: actions/upload-artifact@v4 |
| with: |
| name: test-reports |
| path: "*/build/reports/tests" |
| |
| android-test: |
| name: Instrumentation Tests (${{ matrix.device.name }}) |
| runs-on: ${{ vars.RUNNER }} |
| timeout-minutes: 30 |
| strategy: |
| fail-fast: false |
| matrix: |
| device: |
| - { name: pixel2Api28, img: 'system-images;android-28;google_apis;x86' } |
| - { name: pixel8Api34, img: 'system-images;android-34;aosp_atd;x86_64' } |
| |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v4 |
| |
| - 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: Set up JDK |
| uses: actions/setup-java@v4 |
| with: |
| distribution: ${{ env.DISTRIBUTION }} |
| java-version: ${{ env.JDK_VERSION }} |
| |
| - name: Install Emulator |
| run: | |
| yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager --install "${{ matrix.device.img }}" |
| |
| |
| - name: Accept licenses |
| run: yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager --licenses || true |
| |
| - name: Run instrumentation tests |
| uses: gradle/actions/setup-gradle@v3 |
| with: |
| arguments: ${{ matrix.device.name }}StableDebugAndroidTest |
| |
| - name: Upload instrumentation test reports and logs on failure |
| if: failure() |
| uses: actions/upload-artifact@v4 |
| with: |
| name: instrumentation-test-reports-${{ matrix.device.name }} |
| path: | |
| */build/reports/androidTests/**/${{ matrix.device.name }} |
| */build/outputs/androidTest-results/**/${{ matrix.device.name }} |
| |
| spotless: |
| name: Spotless Check |
| runs-on: ${{ vars.RUNNER }} |
| timeout-minutes: 60 |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v4 |
| with: |
| fetch-depth: 0 |
| |
| - name: Validate Gradle Wrapper |
| uses: gradle/actions/wrapper-validation@v3 |
| |
| - name: Set up JDK |
| uses: actions/setup-java@v4 |
| with: |
| distribution: ${{ env.DISTRIBUTION }} |
| java-version: ${{ env.JDK_VERSION }} |
| cache: gradle |
| |
| - name: Setup Gradle |
| uses: gradle/actions/setup-gradle@v3 |
| |
| - name: Spotless Check |
| run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --parallel --build-cache |