diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1c3e75014b..df4c9e317f5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,26 +39,9 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - # Clean, check formatting, build and do a dry release - - name: Make all - run: make all - - # We stop gradle at the end to make sure the cache folders - # don't contain any lock files and are free to be cached. - - name: Make stop - run: make stop - - - name: Archive packages - # We need artifacts from only one the builds - if: runner.os == 'Linux' && matrix.java == '17' - uses: actions/upload-artifact@v3 - with: - name: ${{ github.sha }} - if-no-files-found: error - path: | - ./*/build/distributions/*.zip - ./sentry-opentelemetry/*/build/distributions/*.zip - ./sentry-android-ndk/build/intermediates/merged_native_libs/release/out/lib/* + # Try unit test coverage report for sentry-android-core + - name: Run unit test coverage + run: ./gradlew unitTestCoverageReport - name: Upload coverage to Codecov # We need coverage data from only one the builds @@ -66,3 +49,4 @@ jobs: uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # pin@v3 with: name: sentry-java + files: "sentry-android-*/build/reports/jacoco/unitTestCoverageReport/unitTestCoverageReport.xml" diff --git a/build.gradle.kts b/build.gradle.kts index 8c4cd4fd386..f0bd2a5574c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -97,6 +97,30 @@ allprojects { } subprojects { + if (name.contains("sentry-android") && !name.contains("sentry-android-integration-tests")) { + tasks.create("unitTestCoverageReport", JacocoReport::class) { + dependsOn("testReleaseUnitTest") + + group = "Verification" // existing group containing tasks for generating linting reports etc. + description = "Generate Jacoco coverage reports for the release build." + + reports { + html.required.set(true) + xml.required.set(true) + } + + // Execution data generated when running the tests against classes instrumented by the JaCoCo agent. + // This is enabled with 'enableUnitTestCoverage' in the 'debug' build type. + executionData.setFrom("${buildDir}/outputs/unit_test_code_coverage/releaseUnitTest/testReleaseUnitTest.exec") + + // Compiled Kotlin class files are written into build-variant-specific subdirectories of 'build/tmp/kotlin-classes'. + classDirectories.setFrom("${buildDir}/tmp/kotlin-classes/releaseUnitTest") + + // To produce an accurate report, the bytecode is mapped back to the original source code. + sourceDirectories.setFrom("$projectDir}/src/main/java") + } + } + plugins.withId(Config.QualityPlugins.detektPlugin) { configure { buildUponDefaultConfig = true diff --git a/sentry-android-core/build.gradle.kts b/sentry-android-core/build.gradle.kts index d7478786fe3..3ceeb446a5d 100644 --- a/sentry-android-core/build.gradle.kts +++ b/sentry-android-core/build.gradle.kts @@ -26,8 +26,11 @@ android { } buildTypes { - getByName("debug") + getByName("debug") { + enableUnitTestCoverage = true + } getByName("release") { + enableUnitTestCoverage = true consumerProguardFiles("proguard-rules.pro") } } diff --git a/sentry-android-fragment/build.gradle.kts b/sentry-android-fragment/build.gradle.kts index c0a212a98f5..5aa10f2b331 100644 --- a/sentry-android-fragment/build.gradle.kts +++ b/sentry-android-fragment/build.gradle.kts @@ -23,6 +23,7 @@ android { buildTypes { getByName("debug") getByName("release") { + enableUnitTestCoverage = true consumerProguardFiles("proguard-rules.pro") } } diff --git a/sentry-android-navigation/build.gradle.kts b/sentry-android-navigation/build.gradle.kts index 6ae30766e14..e5fc3e10fdc 100644 --- a/sentry-android-navigation/build.gradle.kts +++ b/sentry-android-navigation/build.gradle.kts @@ -23,6 +23,7 @@ android { buildTypes { getByName("debug") getByName("release") { + enableUnitTestCoverage = true consumerProguardFiles("proguard-rules.pro") } } diff --git a/sentry-android-ndk/build.gradle.kts b/sentry-android-ndk/build.gradle.kts index 16315c80e4d..9bd4fe26d11 100644 --- a/sentry-android-ndk/build.gradle.kts +++ b/sentry-android-ndk/build.gradle.kts @@ -56,6 +56,7 @@ android { buildTypes { getByName("debug") getByName("release") { + enableUnitTestCoverage = true consumerProguardFiles("proguard-rules.pro") } } diff --git a/sentry-android-okhttp/build.gradle.kts b/sentry-android-okhttp/build.gradle.kts index ae80ad068ef..16ba8ffb491 100644 --- a/sentry-android-okhttp/build.gradle.kts +++ b/sentry-android-okhttp/build.gradle.kts @@ -24,6 +24,7 @@ android { buildTypes { getByName("debug") getByName("release") { + enableUnitTestCoverage = true consumerProguardFiles("proguard-rules.pro") } } diff --git a/sentry-android-sqlite/build.gradle.kts b/sentry-android-sqlite/build.gradle.kts index 11b895f385a..f8b769d1763 100644 --- a/sentry-android-sqlite/build.gradle.kts +++ b/sentry-android-sqlite/build.gradle.kts @@ -24,6 +24,7 @@ android { buildTypes { getByName("debug") getByName("release") { + enableUnitTestCoverage = true consumerProguardFiles("proguard-rules.pro") } } diff --git a/sentry-android-timber/build.gradle.kts b/sentry-android-timber/build.gradle.kts index dfebefd93cd..462c56990c2 100644 --- a/sentry-android-timber/build.gradle.kts +++ b/sentry-android-timber/build.gradle.kts @@ -27,6 +27,7 @@ android { buildTypes { getByName("debug") getByName("release") { + enableUnitTestCoverage = true consumerProguardFiles("proguard-rules.pro") } }