From 5408a5bebbe3438f48c9acdbbd5729a2c66f832b Mon Sep 17 00:00:00 2001 From: Messias Junior Date: Thu, 25 Jun 2026 17:07:27 +0100 Subject: [PATCH 1/3] kover config --- .github/workflows/verify.yml | 5 ++- AGENTS.md | 4 +-- build.gradle.kts | 32 ------------------- gradle/libs.versions.toml | 2 +- .../composeApp/build.gradle.kts | 1 - settings.gradle.kts | 28 +++++++++++++--- umami-api/build.gradle.kts | 3 -- umami/build.gradle.kts | 3 -- 8 files changed, 30 insertions(+), 48 deletions(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 22739b1f..0b198fb9 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -28,4 +28,7 @@ jobs: cache-read-only: false - name: Check code style - run: ./gradlew detekt koverVerify koverXmlReport + run: ./gradlew detekt + + - name: Check tests + run: ./gradlew allTests -Pkover koverVerify diff --git a/AGENTS.md b/AGENTS.md index f4f8ab80..9491cece 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -18,7 +18,6 @@ Kotlin Multiplatform library for the [Umami](https://umami.is) web analytics RES ./gradlew detekt # Lint + auto-correct — runs automatically on pre-push; do NOT run autonomously ./gradlew allTests # All tests, all KMP targets — very slow on dev machines; do NOT run autonomously ./gradlew jvmTest # JVM tests only — still slow; do NOT run autonomously -./gradlew koverVerify # Coverage gates — runs full test suite; do NOT run autonomously ``` **When to run what:** @@ -26,8 +25,7 @@ Kotlin Multiplatform library for the [Umami](https://umami.is) web analytics RES ```bash ./gradlew jvmTest --tests "dev.appoutlet.umami.api.auth.LoginTest" ``` -- `detekt`, `allTests`, `jvmTest`, and `koverVerify` must **only** be run when explicitly requested by the user. -- CI pipeline order (reference only): `detekt` → `koverVerify` → `koverXmlReport`. +- `detekt`, `allTests` and `jvmTest` must **only** be run when explicitly requested by the user. Dokka and Maven publish require `--no-configuration-cache` despite it being globally enabled. diff --git a/build.gradle.kts b/build.gradle.kts index ea67dff5..6c4ce895 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,4 @@ import java.time.LocalDateTime -import kotlinx.kover.gradle.plugin.dsl.AggregationType -import kotlinx.kover.gradle.plugin.dsl.CoverageUnit plugins { alias(libs.plugins.android.application) apply false @@ -14,7 +12,6 @@ plugins { alias(libs.plugins.detekt) alias(libs.plugins.dokka) alias(libs.plugins.gitHooks) - alias(libs.plugins.kover) alias(libs.plugins.kotlin.android) apply false } @@ -22,9 +19,6 @@ dependencies { dokka(project(":umami")) dokka(project(":umami-api")) dokkaPlugin(libs.dokka.versioning) - - kover(project(":umami")) - kover(project(":umami-api")) } dokka { @@ -52,32 +46,6 @@ dokka { } } -kover { - reports { - verify { - rule { - minBound( - minValue = 80, - coverageUnits = CoverageUnit.LINE, - aggregationForGroup = AggregationType.COVERED_PERCENTAGE - ) - - minBound( - minValue = 80, - coverageUnits = CoverageUnit.INSTRUCTION, - aggregationForGroup = AggregationType.COVERED_PERCENTAGE - ) - - minBound( - minValue = 36, - coverageUnits = CoverageUnit.BRANCH, - aggregationForGroup = AggregationType.COVERED_PERCENTAGE, - ) - } - } - } -} - gitHooks { gitHooksDirectory = project.layout.projectDirectory.dir("git-hooks") gitDirectory = project.rootProject.layout.projectDirectory.dir(".git") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e121ee46..76abd7b9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = " detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gitHooks = "eu.bambooapps.gradle.plugin.githook:1.1.1" -kover = "org.jetbrains.kotlinx.kover:0.9.8" +kover = { id = "org.jetbrains.kotlinx.kover.aggregation", version = "0.9.8" } maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "maven-publish" } mokkery = "dev.mokkery:3.4.1" kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } diff --git a/sample/simple-compose-app/composeApp/build.gradle.kts b/sample/simple-compose-app/composeApp/build.gradle.kts index af475881..8993d28d 100644 --- a/sample/simple-compose-app/composeApp/build.gradle.kts +++ b/sample/simple-compose-app/composeApp/build.gradle.kts @@ -24,7 +24,6 @@ kotlin { binaries.executable() } listOf( - iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { diff --git a/settings.gradle.kts b/settings.gradle.kts index 04466592..e66168b2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,7 @@ +import kotlinx.kover.gradle.aggregation.settings.dsl.minBound +import kotlinx.kover.gradle.plugin.dsl.AggregationType +import kotlinx.kover.gradle.plugin.dsl.CoverageUnit + rootProject.name = "umami" pluginManagement { @@ -29,11 +33,27 @@ dependencyResolutionManagement { } } -plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" -} - include(":umami") include(":umami-api") include(":sample:simple-compose-app:composeApp") include(":sample:terminalApp") + + +plugins { + id("org.jetbrains.kotlinx.kover.aggregation") version "0.9.8" + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} + +kover { + skipProjects(":sample:simple-compose-app:composeApp", ":sample:terminalApp") + + reports { + verify { + rule { + minBound(80, CoverageUnit.LINE, AggregationType.COVERED_PERCENTAGE) + minBound(80, CoverageUnit.INSTRUCTION, AggregationType.COVERED_PERCENTAGE) + minBound(36, CoverageUnit.BRANCH, AggregationType.COVERED_PERCENTAGE) + } + } + } +} diff --git a/umami-api/build.gradle.kts b/umami-api/build.gradle.kts index 85bce9f5..dfa13dc5 100644 --- a/umami-api/build.gradle.kts +++ b/umami-api/build.gradle.kts @@ -9,7 +9,6 @@ plugins { alias(libs.plugins.detekt) alias(libs.plugins.dokka) alias(libs.plugins.kotlin.multiplatform) - alias(libs.plugins.kover) alias(libs.plugins.maven.publish) alias(libs.plugins.mokkery) alias(libs.plugins.serialization) @@ -21,10 +20,8 @@ kotlin { jvm() js { browser() } wasmJs { browser() } - iosX64() iosArm64() iosSimulatorArm64() - macosX64() macosArm64() linuxX64() mingwX64() diff --git a/umami/build.gradle.kts b/umami/build.gradle.kts index 4e1b6c1a..015f26e3 100644 --- a/umami/build.gradle.kts +++ b/umami/build.gradle.kts @@ -9,7 +9,6 @@ plugins { alias(libs.plugins.detekt) alias(libs.plugins.dokka) alias(libs.plugins.kotlin.multiplatform) - alias(libs.plugins.kover) alias(libs.plugins.maven.publish) alias(libs.plugins.mokkery) alias(libs.plugins.serialization) @@ -22,10 +21,8 @@ kotlin { jvm() js { browser() } wasmJs { browser() } - iosX64() iosArm64() iosSimulatorArm64() - macosX64() macosArm64() linuxX64() mingwX64() From 5c2bf5cc7e013567b972cc314b3a55e3eaabe3ff Mon Sep 17 00:00:00 2001 From: Messias Junior Date: Thu, 25 Jun 2026 17:21:54 +0100 Subject: [PATCH 2/3] fix authentication --- .../src/commonMain/kotlin/sample/app/Authentication.kt | 3 ++- umami-api/build.gradle.kts | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sample/simple-compose-app/composeApp/src/commonMain/kotlin/sample/app/Authentication.kt b/sample/simple-compose-app/composeApp/src/commonMain/kotlin/sample/app/Authentication.kt index 4f2b4733..0d0768c3 100644 --- a/sample/simple-compose-app/composeApp/src/commonMain/kotlin/sample/app/Authentication.kt +++ b/sample/simple-compose-app/composeApp/src/commonMain/kotlin/sample/app/Authentication.kt @@ -24,11 +24,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp +import dev.appoutlet.umami.api.UmamiApi import dev.appoutlet.umami.api.auth import dev.appoutlet.umami.domain.User import kotlinx.coroutines.launch -private val auth = umami.auth() +private val auth = UmamiApi().auth() @Composable fun Authentication() { diff --git a/umami-api/build.gradle.kts b/umami-api/build.gradle.kts index dfa13dc5..f916876b 100644 --- a/umami-api/build.gradle.kts +++ b/umami-api/build.gradle.kts @@ -1,8 +1,11 @@ -@file:OptIn(ExperimentalWasmDsl::class) +@file:OptIn(ExperimentalWasmDsl::class, KotlinNativeCacheApi::class) +import java.net.URI import java.time.LocalDateTime import org.gradle.kotlin.dsl.dokkaPlugin import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl +import org.jetbrains.kotlin.gradle.plugin.mpp.DisableCacheInKotlinVersion +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCacheApi plugins { alias(libs.plugins.android.library) @@ -58,7 +61,6 @@ kotlin { } } } - } dependencies { From 1b1ab2276f7ef4a32deb4d0558f0680cc90e89d1 Mon Sep 17 00:00:00 2001 From: Messias Junior Date: Thu, 25 Jun 2026 17:33:18 +0100 Subject: [PATCH 3/3] remove unused stuff --- gradle/libs.versions.toml | 1 - umami-api/build.gradle.kts | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 76abd7b9..da68d784 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,6 @@ compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = " detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gitHooks = "eu.bambooapps.gradle.plugin.githook:1.1.1" -kover = { id = "org.jetbrains.kotlinx.kover.aggregation", version = "0.9.8" } maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "maven-publish" } mokkery = "dev.mokkery:3.4.1" kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } diff --git a/umami-api/build.gradle.kts b/umami-api/build.gradle.kts index f916876b..5a0cb383 100644 --- a/umami-api/build.gradle.kts +++ b/umami-api/build.gradle.kts @@ -1,11 +1,7 @@ -@file:OptIn(ExperimentalWasmDsl::class, KotlinNativeCacheApi::class) +@file:OptIn(ExperimentalWasmDsl::class) -import java.net.URI import java.time.LocalDateTime -import org.gradle.kotlin.dsl.dokkaPlugin import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl -import org.jetbrains.kotlin.gradle.plugin.mpp.DisableCacheInKotlinVersion -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCacheApi plugins { alias(libs.plugins.android.library)