diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b940eb7c..1c77d6f5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,8 +67,11 @@ jobs: name: reports path: '**/build/reports' - - name: Run all tests with Gradle - run: ./gradlew check sonar --no-daemon + - name: Re-run all tests with Gradle + run: ./gradlew check + + - name: Report analysis to sonar + run: ./gradlew sonar env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build.gradle.kts b/build.gradle.kts index ad886b03..96519bcd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,8 +24,6 @@ plugins { jacoco } -val jacocoTestReportFile = "${layout.buildDirectory.get()}/reports/jacoco/test/jacocoTestReport.xml" - jacoco { toolVersion = libs.versions.jacoco.get() } @@ -35,8 +33,6 @@ sonarqube { property("sonar.host.url", "https://sonarcloud.io") property("sonar.projectKey", "ursjoss_${project.name}") property("sonar.organization", "ursjoss-github") - property("sonar.coverage.jacoco.xmlReportPaths", jacocoTestReportFile) - property("sonar.kotlin.detekt.reportPaths", "${layout.buildDirectory.get()}/reports/detekt/detekt.xml") } } @@ -85,6 +81,24 @@ kotlin { val kotlinSrcSet = "/src/main/kotlin" subprojects.forEach { subProject -> + if (subProject.name in setOf("kris-core", "kris-io")) { + apply { + plugin("org.sonarqube") + plugin("jacoco") + } + sonarqube { + properties { + property( + "sonar.kotlin.detekt.reportPaths", + subProject.layout.buildDirectory.get().asFile.resolve("reports/detekt/detekt.xml") + ) + property( + "sonar.coverage.jacoco.xmlReportPaths", + subProject.layout.buildDirectory.get().asFile.resolve("reports/jacoco/test/jacocoTestReport.xml") + ) + } + } + } subProject.tasks { val kotlinVersion = libs.versions.kotlin.get() val kotlinApiLangVersion = kotlinVersion.subSequence(0, 3).toString() diff --git a/gradle-plugins/verification/src/main/kotlin/KrisJacocoPlugin.kt b/gradle-plugins/verification/src/main/kotlin/KrisJacocoPlugin.kt index 3d2782ce..c21b5a40 100644 --- a/gradle-plugins/verification/src/main/kotlin/KrisJacocoPlugin.kt +++ b/gradle-plugins/verification/src/main/kotlin/KrisJacocoPlugin.kt @@ -7,7 +7,7 @@ import org.gradle.testing.jacoco.plugins.JacocoPlugin import org.gradle.testing.jacoco.plugins.JacocoReportAggregationPlugin import org.gradle.testing.jacoco.tasks.JacocoReport -@Suppress("unused") +@Suppress("unused", "UnstableApiUsage") class KrisJacocoPlugin : Plugin { override fun apply(target: Project) { @@ -26,6 +26,7 @@ class KrisJacocoPlugin : Plugin { } target.rootProject.tasks.named("sonar") { dependsOn(tasks.getByName("check")) + dependsOn(tasks.getByName("jacocoTestReport")) } } } diff --git a/gradle.properties b/gradle.properties index 8436b9c3..6d04bf35 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,3 +3,5 @@ group=ch.difty.kris org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G org.gradle.kotlin.dsl.allWarningsAsErrors=true + +systemProp.sonar.gradle.skipCompile=true diff --git a/subprojects/kris-core/kris-core.gradle.kts b/subprojects/kris-core/kris-core.gradle.kts index 0ec4b3a4..be634d53 100644 --- a/subprojects/kris-core/kris-core.gradle.kts +++ b/subprojects/kris-core/kris-core.gradle.kts @@ -32,4 +32,8 @@ tasks { named("sourcesJar") { dependsOn(javadocJar) } + val apiBuild by existing + named("jacocoTestReport") { + dependsOn(apiBuild) + } } diff --git a/subprojects/kris-io/kris-io.gradle.kts b/subprojects/kris-io/kris-io.gradle.kts index 2c9498c5..c0bfbc53 100644 --- a/subprojects/kris-io/kris-io.gradle.kts +++ b/subprojects/kris-io/kris-io.gradle.kts @@ -53,6 +53,17 @@ tasks { named("sourcesJar") { dependsOn(javadocJar) } + val apiBuild by existing + named("jacocoTestReport") { + dependsOn(testing.suites.named("integrationTest")) + dependsOn(apiBuild) + rootProject.subprojects.firstOrNull { it.name == "kris-core" }?.tasks?.named("test")?.let { + dependsOn(it) + } + rootProject.subprojects.firstOrNull { it.name == "kris-core" }?.tasks?.named("apiBuild")?.let { + mustRunAfter(it) + } + } } dependencies {