name: Build on: push: branches: - main pull_request: concurrency: group: build-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest timeout-minutes: 60 steps: - name: Checkout uses: actions/checkout@v2 - name: Validate Gradle Wrapper uses: gradle/wrapper-validation-action@v1 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 11 - name: Generate cache key run: ./scripts/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') }} - name: Check spotless run: ./gradlew spotlessCheck --stacktrace - name: Check lint run: ./gradlew lintDebug --stacktrace - name: Build debug run: ./gradlew assembleDebug --stacktrace - name: Build release run: ./gradlew assembleRelease --stacktrace - name: Run local tests run: ./gradlew testDebug --stacktrace - name: Upload build outputs (APKs) uses: actions/upload-artifact@v2 with: name: build-outputs path: app/build/outputs - name: Upload build reports if: always() uses: actions/upload-artifact@v2 with: name: build-reports path: app/build/reports androidTest: needs: build runs-on: macOS-latest # enables hardware acceleration in the virtual machine timeout-minutes: 45 strategy: matrix: api-level: [23, 26, 30] steps: - name: Checkout 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 11 uses: actions/setup-java@v1 with: java-version: 11 - name: Generate cache key run: ./scripts/checksum.sh $SAMPLE_PATH checksum.txt - uses: actions/cache@v2 with: path: | ~/.gradle/caches/modules-* ~/.gradle/caches/jars-* ~/.gradle/caches/build-cache-* key: gradle-${{ hashFiles('checksum.txt') }} - name: Run instrumentation tests uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} arch: x86_64 disable-animations: true disk-size: 1500M heap-size: 512M script: ./gradlew connectedAndroidTest -x :benchmark:connectedBenchmarkAndroidTest - name: Upload test reports if: always() uses: actions/upload-artifact@v2 with: name: test-reports path: '*/build/reports/androidTests'