name: Instrumented tests on device on: schedule: # Run this twice per day, at 6:13 and 16:13 - cron: '13 6,16 * * *' # Also run this workflow whenever we update this file push: paths: - '.github/workflows/device-tests.yml' jobs: android-test: runs-on: macos-latest if: github.repository == 'google/accompanist' timeout-minutes: 80 strategy: # Allow tests to continue on other devices if they fail on one device. fail-fast: false matrix: api-level: [ 22, 26, 28, 29 ] shard: [ 0, 1, 2 ] # Need to update shard-count below if this changes steps: - uses: actions/checkout@v2 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: set up JDK uses: actions/setup-java@v1 with: java-version: 17 - name: Decrypt secrets run: release/signing-setup.sh ${{ secrets.ENCRYPT_KEY }} - name: Generate cache key run: ./checksum.sh checksum.txt - uses: actions/cache@v2 with: path: | ~/.gradle/caches/modules-* ~/.gradle/caches/jars-* ~/.gradle/caches/build-cache-* key: gradle-${{ hashFiles('checksum.txt') }} # Determine what emulator image to use. We run all API 29+ emulators using # the google_apis image - name: Determine emulator target id: determine-target env: API_LEVEL: ${{ matrix.api-level }} run: | TARGET="default" if [ "$API_LEVEL" -ge "29" ]; then TARGET="google_apis" fi echo "TARGET=$TARGET" >> $GITHUB_OUTPUT - name: Run device tests uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} target: ${{ steps.determine-target.outputs.TARGET }} profile: Galaxy Nexus emulator-build: 7425822 # https://github.com/ReactiveCircus/android-emulator-runner/issues/160 # We run all tests, sharding them over 3 shards script: ./scripts/run-tests.sh --log-file=logcat.txt --shard-index=${{ matrix.shard }} --shard-count=3 - name: Clean secrets if: always() run: release/signing-cleanup.sh - name: Upload logs if: always() uses: actions/upload-artifact@v2 with: name: logs-${{ matrix.api-level }}-${{ steps.determine-target.outputs.TARGET }}-${{ matrix.shard }} path: logcat.txt - name: Upload test results if: always() uses: actions/upload-artifact@v2 with: name: test-results-${{ matrix.api-level }}-${{ steps.determine-target.outputs.TARGET }}-${{ matrix.shard }} path: | **/build/reports/* **/build/outputs/*/connected/*