name: Main on: pull_request: push: branches: - main jobs: validation: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1 checks: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: java-version: 17 distribution: 'zulu' - uses: gradle/gradle-build-action@v2 - name: Build project run: ./gradlew build --stacktrace instrumentation-tests: runs-on: ubuntu-latest timeout-minutes: 30 strategy: # Allow tests to continue on other devices if they fail on one device. fail-fast: false matrix: arch: [ x86_64 ] target: [ google_apis ] channel: [ stable ] api-level: - 21 - 23 - 26 # - 29 flaky include: - arch: x86 api-level: 16 target: google_apis channel: stable - arch: x86 api-level: 19 target: google_apis channel: stable # Failing (something about permissions maybe? # - arch: x86 # api-level: 30 # target: aosp_atd # channel: canary steps: - 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 ls /dev/kvm - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: 17 distribution: 'zulu' - uses: gradle/gradle-build-action@v2 - name: AVD cache uses: actions/cache@v4 id: avd-cache with: path: | ~/.android/avd/* ~/.android/adb* key: avd-cached-${{ matrix.api-level }}-${{ matrix.os }}-${{ matrix.target }} - name: Create AVD and generate snapshot for caching if: steps.avd-cache.outputs.cache-hit != 'true' uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} target: ${{ matrix.target }} arch: ${{ matrix.arch }} force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -no-snapshot-load disable-animations: false script: echo "Generated AVD snapshot for caching." - name: Instrumentation Tests uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} force-avd-creation: false target: ${{ matrix.target }} arch: ${{ matrix.arch }} emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -no-snapshot-save script: | touch emulator.log # create log file chmod 777 emulator.log # allow writing to log file adb logcat >> emulator.log & # pipe all logcat messages into log file as a background process ./gradlew leakcanary:leakcanary-android-core:connectedCheck leakcanary:leakcanary-android:connectedCheck leakcanary:leakcanary-android-instrumentation:connectedCheck --no-build-cache --no-daemon --stacktrace - name: Upload results if: ${{ always() }} uses: actions/upload-artifact@v3 with: name: ${{ matrix.api-level }}-${{ matrix.arch }}-instrumentation-test-results path: | emulator.log ./**/build/reports/androidTests/connected/** snapshot-deployment: if: github.repository == 'square/leakcanary' && github.event_name == 'push' needs: [ checks ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: java-version: 17 distribution: 'zulu' - uses: gradle/gradle-build-action@v2 - name: Deploy snapshot run: ./gradlew publish env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} - name: Cleanup secrets if: always() run: rm -rf ~/.gradle/gradle.properties