feat: Implement #20 #16
This file contains hidden or 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: Build | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - '**.md' | |
| - 'docs/**' | |
| pull_request: | |
| paths-ignore: | |
| - '**.md' | |
| - 'docs/**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| # Skip build if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: macos-26 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Validate Gradle wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - uses: gradle/actions/setup-gradle@v5 | |
| - name: Assemble | |
| run: ./gradlew assembleDebug -Pandroidx.baselineprofile.skipgeneration | |
| unit-and-host-tests: | |
| # Skip if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Validate Gradle wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - uses: gradle/actions/setup-gradle@v5 | |
| - name: Run unit + androidHostTest tests | |
| run: ./gradlew cleanTestAndroidHostTest testAndroidHostTest -Pandroidx.baselineprofile.skipgeneration | |
| - name: Upload unit + androidHostTest reports | |
| if: failure() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: unit-and-host-test-reports | |
| path: | | |
| **/build/reports/tests/** | |
| **/test-results/** | |
| detekt: | |
| # Skip if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Validate Gradle wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Detekt | |
| run: ./gradlew detektFull | |
| - name: Upload Detekt reports | |
| if: failure() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: detekt-reports | |
| path: '**/build/reports/detekt/**' | |
| konsist: | |
| # Skip if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Validate Gradle wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Konsist tests | |
| run: ./gradlew :konsist:test | |
| - name: Upload Konsist reports | |
| if: failure() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: konsist-reports | |
| path: 'konsist/build/reports/tests/**' | |
| device-tests: | |
| # Skip if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| api-level: [ 26, 29, 36 ] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Validate Gradle wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - uses: gradle/actions/setup-gradle@v5 | |
| - name: Enable KVM for emulator | |
| 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: Gradle cache | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: AVD cache | |
| uses: actions/cache@v5 | |
| 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 Android Device 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 connectedAndroidDeviceTest -Pandroidx.baselineprofile.skipgeneration | |
| - name: Upload device test reports | |
| if: failure() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: device-test-reports | |
| path: | | |
| **/build/reports/** | |
| **/build/outputs/androidTest-results/** | |
| coverage: | |
| # Skip if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: ubuntu-latest | |
| needs: [ build, unit-and-host-tests ] | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - uses: gradle/actions/setup-gradle@v5 | |
| - name: Generate Kover coverage report | |
| run: ./gradlew :devview:koverXmlReport :devview:koverLog | |
| - name: Upload coverage report | |
| if: success() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: coverage-report | |
| path: '**/build/reports/kover/**' |