| 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@v4 |
| 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 |