feat: Implement #20 #1
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-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: Assemble and check | |
| run: ./gradlew check assembleDebug -Pandroidx.baselineprofile.skipgeneration | |
| - name: Run unit tests | |
| run: ./gradlew test -Pandroidx.baselineprofile.skipgeneration | |
| - name: Run androidHostTest tests | |
| run: ./gradlew androidHostTest -Pandroidx.baselineprofile.skipgeneration | |
| - name: Upload reports + Roborazzi outputs | |
| if: failure() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: reports | |
| path: | | |
| **/build/reports/** | |
| **/build/outputs/roborazzi/** | |
| detekt: | |
| # Skip if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: macos-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: macos-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: 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 | |
| sudo chmod 777 /dev/kvm | |
| - name: Run Android Device Tests | |
| uses: reactivecircus/android-emulator-runner@v3 | |
| with: | |
| api-level: 33 | |
| arch: x86_64 | |
| profile: Nexus 6P | |
| 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/connected-android-test/** | |
| coverage: | |
| # Skip if head commit contains 'skip ci' | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| runs-on: macos-latest | |
| needs: [ build ] | |
| timeout-minutes: 30 | |
| # TODO: Remove continue-on-error once the kover convention plugin is applied to modules | |
| continue-on-error: true | |
| 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 koverXmlReport | |
| - name: Generate test reports | |
| run: ./gradlew testReport | |
| - name: Upload coverage report | |
| if: success() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: coverage-report | |
| path: '**/build/reports/kover/**' | |
| - name: Upload test reports | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: test-reports | |
| path: | | |
| **/build/reports/tests/** | |
| **/test-results/** | |