[WIP] Major update #118
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
pull_request: | |
branches: [ master ] | |
# Allows for running this workflow manually from the Actions tab | |
workflow_dispatch: | |
jobs: | |
analyze: | |
name: Analyze | |
if: ${{ github.actor != 'dependabot[bot]' }} | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- name: Checkout the code | |
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@a18c333f3f14249953dab3e186e5e21bf3390f1d | |
with: | |
java-version: '17' | |
distribution: 'corretto' | |
cache: gradle | |
- name: Clear gradle cache | |
run: | | |
mv ~/.gradle ~/.invalid || true | |
- name: Cache dependencies | |
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 | |
with: | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-${{ env.CACHE_VERSION }}-${{ hashFiles('**/**.gradle.kts', '**/gradle/wrapper/gradle-wrapper.properties', '**/libs.versions.toml') }} | |
- name: Check Gradle wrapper | |
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b | |
- name: Check code style | |
run: ./gradlew ktlintCheck | |
- name: Check code quality | |
run: ./gradlew detekt | |
# TODO: Investigate why this is not working and encountering the following: | |
# `snyk` requires an authenticated account. Please run `snyk auth` and try again | |
# - name: Check dependencies with snyk | |
# uses: snyk/actions/gradle-jdk@dc22abdbe8ec00e2a925256fef96f319ca5510ce | |
# continue-on-error: true # To make sure that SARIF upload gets called | |
# env: | |
# SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} | |
# with: | |
# args: --sarif-file-output=snyk.sarif | |
# | |
# - name: Upload snyk result to GitHub Code Scanning | |
# uses: github/codeql-action/upload-sarif@81b419c908d540ec4c7da9bfb4b5d941fca8f624 | |
# with: | |
# sarif_file: snyk.sarif | |
- name: Upload reports | |
uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb | |
with: | |
name: Test-Reports | |
path: app/build/reports | |
if: always() | |
unit-tests: | |
name: Unit tests | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
needs: analyze | |
steps: | |
- name: Checkout the code | |
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@a18c333f3f14249953dab3e186e5e21bf3390f1d | |
with: | |
java-version: '17' | |
distribution: 'corretto' | |
cache: gradle | |
- name: Clear gradle cache | |
run: | | |
mv ~/.gradle ~/.invalid || true | |
- name: Cache dependencies | |
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 | |
with: | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-${{ env.CACHE_VERSION }}-${{ hashFiles('**/**.gradle.kts', '**/gradle/wrapper/gradle-wrapper.properties', '**/libs.versions.toml') }} | |
- name: Check Gradle wrapper | |
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b | |
# TODO: Add code coverage metrics | |
# See https://about.codecov.io/blog/code-coverage-for-android-development-using-kotlin-jacoco-github-actions-and-codecov/ | |
- name: Run unit tests | |
run: ./gradlew testDebugUnitTest | |
- name: Upload reports | |
uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb | |
with: | |
name: Test-Reports | |
path: app/build/reports | |
if: always() | |
instrumentation-tests: | |
name: Instrumentation tests on API ${{ matrix.api-level }} | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
needs: unit-tests | |
strategy: | |
fail-fast: false | |
matrix: | |
api-level: [ 26, 27, 28, 29, 30, 31, 32, 33, 34 ] | |
steps: | |
- name: Checkout the code | |
uses: actions/checkout@v4 | |
- name: Enable KVM | |
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: Check Gradle wrapper | |
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b | |
- name: Gradle cache | |
uses: gradle/actions/setup-gradle@v3 | |
- name: AVD cache | |
uses: actions/cache@v4 | |
id: avd-cache | |
with: | |
path: | | |
~/.android/avd/* | |
~/.android/adb* | |
key: avd-${{ matrix.api-level }} | |
- 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 }} | |
force-avd-creation: false | |
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
disable-animations: false | |
script: echo "Generated AVD snapshot for caching." | |
- name: Run instrumentation tests | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ matrix.api-level }} | |
force-avd-creation: false | |
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
disable-animations: true | |
script: ./gradlew connectedCheck | |
- name: Upload reports | |
uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb | |
with: | |
name: Test-Reports | |
path: app/build/reports | |
if: always() |