Add coverage report #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: Android Instrumented Tests | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: # Allow manual triggering | |
| jobs: | |
| instrumented-tests: | |
| runs-on: macos-latest # macOS runner for hardware acceleration | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v3 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: "17" | |
| distribution: "temurin" | |
| cache: gradle | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| - name: Run unit tests | |
| run: ./gradlew :android:testDebugUnitTest | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v2 | |
| - name: AVD cache | |
| uses: actions/cache@v3 | |
| id: avd-cache | |
| with: | |
| path: | | |
| ~/.android/avd/* | |
| ~/.android/adb* | |
| key: avd-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }} | |
| - 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: 29 | |
| force-avd-creation: false | |
| emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
| disable-animations: false | |
| script: echo "Created AVD snapshot" | |
| - name: Run instrumented tests with coverage | |
| uses: ReactiveCircus/android-emulator-runner@v2 | |
| with: | |
| api-level: 29 | |
| 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 :android:connectedDebugAndroidTest | |
| # Find coverage data (EC files) | |
| COVERAGE_DATA=$(find android/build -name "*.ec" | head -n 1) | |
| if [ -n "$COVERAGE_DATA" ]; then | |
| echo "Found coverage data: $COVERAGE_DATA" | |
| # Download JaCoCo CLI | |
| mkdir -p tools | |
| curl -L "https://repo1.maven.org/maven2/org/jacoco/org.jacoco.cli/0.8.10/org.jacoco.cli-0.8.10-nodeps.jar" -o tools/jacoco-cli.jar | |
| # Create report directory | |
| mkdir -p android/build/reports/jacoco-android/html | |
| # Generate HTML report | |
| java -jar tools/jacoco-cli.jar report "$COVERAGE_DATA" \ | |
| --classfiles android/build/tmp/kotlin-classes/debug \ | |
| --sourcefiles android/src/main/java \ | |
| --html android/build/reports/jacoco-android/html \ | |
| --xml android/build/reports/jacoco-android/report.xml | |
| fi | |
| - name: Upload coverage report | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: jacoco-report | |
| path: android/build/reports/jacoco-android | |
| retention-days: 7 |