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..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 = "org.jetbrains.kotlinx.kover: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/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/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..5a0cb383 100644 --- a/umami-api/build.gradle.kts +++ b/umami-api/build.gradle.kts @@ -1,7 +1,6 @@ @file:OptIn(ExperimentalWasmDsl::class) import java.time.LocalDateTime -import org.gradle.kotlin.dsl.dokkaPlugin import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl plugins { @@ -9,7 +8,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 +19,8 @@ kotlin { jvm() js { browser() } wasmJs { browser() } - iosX64() iosArm64() iosSimulatorArm64() - macosX64() macosArm64() linuxX64() mingwX64() @@ -61,7 +57,6 @@ kotlin { } } } - } dependencies { 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()