Skip to content

Commit d70aebd

Browse files
committed
Try improving Kover setup
1 parent b8865d5 commit d70aebd

File tree

6 files changed

+39
-58
lines changed

6 files changed

+39
-58
lines changed

app/build.gradle.kts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ import extension.allFeaturesImpl
2121
import extension.allLibrariesImpl
2222
import extension.allServicesImpl
2323
import extension.buildConfigFieldStr
24-
import extension.koverDependencies
2524
import extension.locales
2625
import extension.setupDependencyInjection
27-
import extension.setupKover
2826
import extension.testCommonDependencies
2927
import java.util.Locale
3028

@@ -41,8 +39,6 @@ plugins {
4139
// alias(libs.plugins.gms.google.services)
4240
}
4341

44-
setupKover()
45-
4642
android {
4743
namespace = "io.element.android.x"
4844

@@ -316,8 +312,6 @@ dependencies {
316312
testCommonDependencies(libs)
317313
testImplementation(projects.libraries.matrix.test)
318314
testImplementation(projects.services.toolbox.test)
319-
320-
koverDependencies()
321315
}
322316

323317
tasks.withType<GenerateBuildConfig>().configureEach {

plugins/src/main/kotlin/extension/KoverExtension.kt

Lines changed: 28 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ import org.gradle.api.Action
1717
import org.gradle.api.Project
1818
import org.gradle.kotlin.dsl.apply
1919
import org.gradle.kotlin.dsl.assign
20+
import org.gradle.kotlin.dsl.configure
2021

2122
enum class KoverVariant(val variantName: String) {
2223
Presenters("presenters"),
2324
States("states"),
2425
Views("views"),
2526
}
2627

27-
val koverVariants = KoverVariant.values().map { it.variantName }
28+
val koverVariants = KoverVariant.entries.map { it.variantName }
2829

2930
val localAarProjects = listOf(
3031
":libraries:rustsdk",
@@ -44,11 +45,10 @@ val excludedKoverSubProjects = listOf(
4445
":libraries:di",
4546
) + localAarProjects
4647

47-
private fun Project.kover(action: Action<KoverProjectExtension>) {
48-
(this as org.gradle.api.plugins.ExtensionAware).extensions.configure("kover", action)
49-
}
50-
5148
fun Project.setupKover() {
49+
// Apply the plugin
50+
apply(plugin = "org.jetbrains.kotlinx.kover")
51+
5252
// Create verify all task joining all existing verification tasks
5353
tasks.register("koverVerifyAll") {
5454
group = "verification"
@@ -59,7 +59,29 @@ fun Project.setupKover() {
5959
// https://kotlin.github.io/kotlinx-kover/
6060
// Run `./gradlew :app:koverHtmlReport` to get report at ./app/build/reports/kover
6161
// Run `./gradlew :app:koverXmlReport` to get XML report
62-
kover {
62+
extensions.configure<KoverProjectExtension> {
63+
// If it's the root project
64+
if (project.path == ":") {
65+
merge {
66+
subprojects { it.path !in excludedKoverSubProjects && it.path !in localAarProjects }
67+
}
68+
}
69+
70+
currentProject {
71+
for (variant in koverVariants) {
72+
createVariant(variant) {
73+
defaultVariants(project)
74+
75+
// Using the cache for coverage verification seems to be flaky, so we disable it for now.
76+
val taskName = "koverCachedVerify${variant.replaceFirstChar(Char::titlecase)}"
77+
val cachedTask = project.tasks.findByName(taskName)
78+
cachedTask?.let {
79+
it.outputs.upToDateWhen { false }
80+
}
81+
}
82+
}
83+
}
84+
6385
reports {
6486
filters {
6587
excludes {
@@ -194,54 +216,10 @@ fun Project.setupKover() {
194216
}
195217
}
196218

197-
fun Project.applyKoverPluginToAllSubProjects() = rootProject.subprojects {
198-
if (project.path !in localAarProjects) {
199-
apply(plugin = "org.jetbrains.kotlinx.kover")
200-
kover {
201-
currentProject {
202-
for (variant in koverVariants) {
203-
createVariant(variant) {
204-
defaultVariants(project)
205-
}
206-
}
207-
}
208-
}
209-
210-
project.afterEvaluate {
211-
for (variant in koverVariants) {
212-
// Using the cache for coverage verification seems to be flaky, so we disable it for now.
213-
val taskName = "koverCachedVerify${variant.replaceFirstChar(Char::titlecase)}"
214-
val cachedTask = project.tasks.findByName(taskName)
215-
cachedTask?.let {
216-
it.outputs.upToDateWhen { false }
217-
}
218-
}
219-
}
220-
}
221-
}
222-
223219
fun KoverVariantCreateConfig.defaultVariants(project: Project) {
224220
if (project.name == "app") {
225221
addWithDependencies("gplayDebug")
226222
} else {
227223
addWithDependencies("debug", "jvm", optional = true)
228224
}
229225
}
230-
231-
fun Project.koverSubprojects() = project.rootProject.subprojects
232-
.filter {
233-
it.project.projectDir.resolve("build.gradle.kts").exists()
234-
}
235-
.map { it.path }
236-
.sorted()
237-
.filter {
238-
it !in excludedKoverSubProjects
239-
}
240-
241-
fun Project.koverDependencies() {
242-
project.koverSubprojects()
243-
.forEach {
244-
// println("Add $it to kover")
245-
dependencies.add("kover", project(it))
246-
}
247-
}

plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import extension.androidConfig
1313
import extension.commonDependencies
1414
import extension.composeConfig
1515
import extension.composeDependencies
16+
import extension.setupKover
1617
import org.gradle.accessors.dm.LibrariesForLibs
1718

1819
val libs = the<LibrariesForLibs>()
@@ -37,6 +38,8 @@ kotlin {
3738
}
3839
}
3940

41+
setupKover()
42+
4043
dependencies {
4144
commonDependencies(libs)
4245
composeDependencies(libs)

plugins/src/main/kotlin/io.element.android-compose-library.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import extension.androidConfig
1313
import extension.commonDependencies
1414
import extension.composeConfig
1515
import extension.composeDependencies
16+
import extension.setupKover
1617
import org.gradle.accessors.dm.LibrariesForLibs
1718

1819
val libs = the<LibrariesForLibs>()
@@ -37,6 +38,8 @@ kotlin {
3738
}
3839
}
3940

41+
setupKover()
42+
4043
dependencies {
4144
commonDependencies(libs)
4245
composeDependencies(libs)

plugins/src/main/kotlin/io.element.android-library.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*/
1212
import extension.androidConfig
1313
import extension.commonDependencies
14+
import extension.setupKover
1415
import org.gradle.accessors.dm.LibrariesForLibs
1516

1617
val libs = the<LibrariesForLibs>()
@@ -33,6 +34,8 @@ kotlin {
3334
}
3435
}
3536

37+
setupKover()
38+
3639
dependencies {
3740
commonDependencies(libs)
3841
coreLibraryDesugaring(libs.android.desugar)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import extension.applyKoverPluginToAllSubProjects
1+
import extension.setupKover
22

33
plugins {
44
id("org.jetbrains.kotlinx.kover") apply false
55
}
66

7-
applyKoverPluginToAllSubProjects()
7+
setupKover()

0 commit comments

Comments
 (0)