diff --git a/examples/composite-build-example/dokkatoo/build-logic/src/main/kotlin/dokka-convention.gradle.kts b/examples/composite-build-example/dokkatoo/build-logic/src/main/kotlin/dokka-convention.gradle.kts index 933db5a5..ea0d4c92 100644 --- a/examples/composite-build-example/dokkatoo/build-logic/src/main/kotlin/dokka-convention.gradle.kts +++ b/examples/composite-build-example/dokkatoo/build-logic/src/main/kotlin/dokka-convention.gradle.kts @@ -9,5 +9,5 @@ plugins { dokkatoo { // Important! Ensure that each project has a distinct module path. // See the example README for more information. - modulePath = rootProject.name + project.path.replace(":", "/") + modulePath.set(rootProject.name + project.path.replace(":", "/")) } diff --git a/examples/composite-build-example/dokkatoo/docs/build.gradle.kts b/examples/composite-build-example/dokkatoo/docs/build.gradle.kts index 2749cf17..133d70ef 100644 --- a/examples/composite-build-example/dokkatoo/docs/build.gradle.kts +++ b/examples/composite-build-example/dokkatoo/docs/build.gradle.kts @@ -8,5 +8,5 @@ dependencies { } dokkatoo { - moduleName = "Dokkatoo Composite Builds Example" + moduleName.set("Dokkatoo Composite Builds Example") } diff --git a/examples/composite-build-example/dokkatoo/module-kakapo/build.gradle.kts b/examples/composite-build-example/dokkatoo/module-kakapo/build.gradle.kts index 65b65d1f..e606c88d 100644 --- a/examples/composite-build-example/dokkatoo/module-kakapo/build.gradle.kts +++ b/examples/composite-build-example/dokkatoo/module-kakapo/build.gradle.kts @@ -7,6 +7,6 @@ group = "foo.example" version = "1.2.3" dokkatoo { - moduleName = "Kakapo Module" - modulePath = "kakakpo" + moduleName.set("Kakapo Module") + modulePath.set("kakakpo") } diff --git a/examples/composite-build-example/dokkatoo/module-kea/build.gradle.kts b/examples/composite-build-example/dokkatoo/module-kea/build.gradle.kts index a346fd48..1d58c407 100644 --- a/examples/composite-build-example/dokkatoo/module-kea/build.gradle.kts +++ b/examples/composite-build-example/dokkatoo/module-kea/build.gradle.kts @@ -7,6 +7,6 @@ group = "foo.example" version = "4.5.6" dokkatoo { - moduleName = "Kea Module" - modulePath = "kea" + moduleName.set("Kea Module") + modulePath.set("kea") } diff --git a/examples/java-example/dokkatoo/buildSrc/src/main/kotlin/java-base-convention.gradle.kts b/examples/java-example/dokkatoo/buildSrc/src/main/kotlin/java-base-convention.gradle.kts index 839a858b..5f9464f3 100644 --- a/examples/java-example/dokkatoo/buildSrc/src/main/kotlin/java-base-convention.gradle.kts +++ b/examples/java-example/dokkatoo/buildSrc/src/main/kotlin/java-base-convention.gradle.kts @@ -4,6 +4,6 @@ plugins { java { toolchain { - languageVersion = JavaLanguageVersion.of(17) + languageVersion.set(JavaLanguageVersion.of(17)) } } diff --git a/examples/java-example/dokkatoo/my-java-application/build.gradle.kts b/examples/java-example/dokkatoo/my-java-application/build.gradle.kts index 39f7d236..e949eccf 100644 --- a/examples/java-example/dokkatoo/my-java-application/build.gradle.kts +++ b/examples/java-example/dokkatoo/my-java-application/build.gradle.kts @@ -14,5 +14,5 @@ dokkatoo { } application { - mainClass = "demo.MyJavaApplication" + mainClass.set("demo.MyJavaApplication") } diff --git a/examples/java-example/dokkatoo/my-java-features/build.gradle.kts b/examples/java-example/dokkatoo/my-java-features/build.gradle.kts index 54bef3f5..94e1aefb 100644 --- a/examples/java-example/dokkatoo/my-java-features/build.gradle.kts +++ b/examples/java-example/dokkatoo/my-java-features/build.gradle.kts @@ -9,12 +9,12 @@ dokkatoo { } dokkatooSourceSets.javaMain { - displayName = "Java" + displayName.set("Java") } // non-main source sets are suppressed by default dokkatooSourceSets.javaMongodbSupport { - suppress = false - displayName = "MongoDB" + suppress.set(false) + displayName.set("MongoDB") } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0f275f36..25921122 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,6 +44,7 @@ kotest-datatest = { module = "io.kotest:kotest-framework-datatest" } kotest-junit5Runner = { module = "io.kotest:kotest-runner-junit5" } kotest-assertionsCore = { module = "io.kotest:kotest-assertions-core" } kotest-assertionsJson = { module = "io.kotest:kotest-assertions-json" } +kotest-property = { module = "io.kotest:kotest-property" } ### Gradle plugins ### diff --git a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CompositeBuildExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CompositeBuildExampleTest.kt index cf52d0b5..10bfb4de 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CompositeBuildExampleTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CompositeBuildExampleTest.kt @@ -3,11 +3,11 @@ package dev.adamko.dokkatoo.tests.examples import dev.adamko.dokkatoo.utils.* import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.exampleProjectDataPath import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.asClue import io.kotest.assertions.withClue import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldContain -import io.kotest.matchers.string.shouldNotContain import java.io.File import kotlin.io.path.walk @@ -57,7 +57,7 @@ class CompositeBuildExampleTest : FunSpec({ context("Gradle caching") { - test("expect Dokkatoo is compatible with Gradle Build Cache") { + test("expect Dokkatoo is compatible with Build Cache") { dokkatooProject.runner .addArguments( "clean", @@ -82,13 +82,17 @@ class CompositeBuildExampleTest : FunSpec({ "> Task :module-kea:dokkatooGenerateModuleHtml UP-TO-DATE", "> Task :docs:dokkatooGeneratePublicationHtml UP-TO-DATE", "BUILD SUCCESSFUL", - // expect "1 executed" because :checkKotlinGradlePluginConfigurationErrors always runs (fixed KGP in 2.0?) - "14 actionable tasks: 1 executed, 13 up-to-date", ) + + output shouldContain when { + // expect "1 executed" because :checkKotlinGradlePluginConfigurationErrors always runs + dokkatooProject.versions.kgp < "2.0.0" -> "14 actionable tasks: 1 executed, 13 up-to-date" + else -> "14 actionable tasks: 14 up-to-date" + } } } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject .findFiles { val isCCDir = it.invariantSeparatorsPath.endsWith(".gradle/configuration-cache") @@ -110,8 +114,11 @@ class CompositeBuildExampleTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CustomFormatExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CustomFormatExampleTest.kt index bd5008c0..ffcb8bf6 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CustomFormatExampleTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/CustomFormatExampleTest.kt @@ -2,6 +2,7 @@ package dev.adamko.dokkatoo.tests.examples import dev.adamko.dokkatoo.internal.DokkatooConstants.DOKKA_VERSION import dev.adamko.dokkatoo.utils.* +import io.kotest.assertions.asClue import io.kotest.assertions.withClue import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.file.shouldBeAFile @@ -81,7 +82,7 @@ class CustomFormatExampleTest : FunSpec({ context("Gradle caching") { - test("expect Dokkatoo is compatible with Gradle Build Cache") { + test("expect Dokkatoo is compatible with Build Cache") { dokkatooProject.runner .addArguments( "clean", @@ -121,7 +122,7 @@ class CustomFormatExampleTest : FunSpec({ } } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject.file(".gradle/configuration-cache").toFile().deleteRecursively() dokkatooProject.file("build/reports/configuration-cache").toFile().deleteRecursively() @@ -139,8 +140,11 @@ class CustomFormatExampleTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } @@ -148,6 +152,11 @@ class CustomFormatExampleTest : FunSpec({ configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" output shouldContain "Configuration cache entry reused" + +// configurationCacheReport().asClue { report -> +// report.cacheAction shouldBe "reused" +// report.totalProblemCount shouldBe 0 +// } } } } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/GradleExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/GradleExampleTest.kt index 1e8b382f..203a523e 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/GradleExampleTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/GradleExampleTest.kt @@ -3,6 +3,7 @@ package dev.adamko.dokkatoo.tests.examples import dev.adamko.dokkatoo.internal.DokkatooConstants.DOKKA_VERSION import dev.adamko.dokkatoo.utils.* import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.asClue import io.kotest.assertions.withClue import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.file.shouldBeAFile @@ -82,7 +83,7 @@ class GradleExampleTest : FunSpec({ context("Gradle caching") { - test("expect Dokkatoo is compatible with Gradle Build Cache") { + test("expect Dokkatoo is compatible with Build Cache") { dokkatooProject.runner .addArguments( "clean", @@ -123,7 +124,7 @@ class GradleExampleTest : FunSpec({ } } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject.file(".gradle/configuration-cache").toFile().deleteRecursively() dokkatooProject.file("build/reports/configuration-cache").toFile().deleteRecursively() @@ -141,8 +142,11 @@ class GradleExampleTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } @@ -150,6 +154,10 @@ class GradleExampleTest : FunSpec({ configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" output shouldContain "Configuration cache entry reused" +// configurationCacheReport().asClue { report -> +// report.cacheAction shouldBe "reused" +// report.totalProblemCount shouldBe 0 +// } } } } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/JavaExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/JavaExampleTest.kt index f91e0a67..eeec224e 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/JavaExampleTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/JavaExampleTest.kt @@ -3,11 +3,11 @@ package dev.adamko.dokkatoo.tests.examples import dev.adamko.dokkatoo.utils.* import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.exampleProjectDataPath import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.asClue import io.kotest.assertions.withClue import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldContain -import io.kotest.matchers.string.shouldNotContain import java.io.File import kotlin.io.path.walk @@ -57,7 +57,7 @@ class JavaExampleTest : FunSpec({ context("Gradle caching") { - test("expect Dokkatoo is compatible with Gradle Build Cache") { + test("expect Dokkatoo is compatible with Build Cache") { dokkatooProject.runner .addArguments( "clean", @@ -83,13 +83,16 @@ class JavaExampleTest : FunSpec({ "> Task :my-java-library:dokkatooGenerateModuleHtml UP-TO-DATE", "> Task :dokkatooGeneratePublicationHtml UP-TO-DATE", "BUILD SUCCESSFUL", - // expect "1 executed" because :checkKotlinGradlePluginConfigurationErrors always runs (fixed KGP in 2.0?) - "18 actionable tasks: 1 executed, 17 up-to-date", ) + output shouldContain when { + // expect "1 executed" because :checkKotlinGradlePluginConfigurationErrors always runs + dokkatooProject.versions.gradle < "8.0" -> "20 actionable tasks: 20 up-to-date" + else -> "18 actionable tasks: 18 up-to-date" + } } } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject .findFiles { val isCCDir = it.invariantSeparatorsPath.endsWith(".gradle/configuration-cache") @@ -111,8 +114,10 @@ class JavaExampleTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/KotlinMultiplatformExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/KotlinMultiplatformExampleTest.kt index 18aaa295..61f330fa 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/KotlinMultiplatformExampleTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/KotlinMultiplatformExampleTest.kt @@ -2,6 +2,7 @@ package dev.adamko.dokkatoo.tests.examples import dev.adamko.dokkatoo.utils.* import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.asClue import io.kotest.assertions.withClue import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.file.shouldBeAFile @@ -88,7 +89,7 @@ class KotlinMultiplatformExampleTest : FunSpec({ context("Gradle caching") { - context("expect Dokkatoo is compatible with Gradle Build Cache") { + context("expect Dokkatoo is compatible with Build Cache") { dokkatooProject.runner .addArguments( "clean", @@ -137,7 +138,7 @@ class KotlinMultiplatformExampleTest : FunSpec({ } } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject.file(".gradle/configuration-cache").toFile().deleteRecursively() dokkatooProject.file("build/reports/configuration-cache").toFile().deleteRecursively() @@ -155,8 +156,11 @@ class KotlinMultiplatformExampleTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/MultimoduleExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/MultimoduleExampleTest.kt index dc0e71f4..0a9f2d41 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/MultimoduleExampleTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/MultimoduleExampleTest.kt @@ -3,6 +3,7 @@ package dev.adamko.dokkatoo.tests.examples import dev.adamko.dokkatoo.internal.DokkatooConstants.DOKKA_VERSION import dev.adamko.dokkatoo.utils.* import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.asClue import io.kotest.core.spec.style.FunSpec import io.kotest.inspectors.shouldForAll import io.kotest.matchers.collections.shouldHaveSize @@ -91,7 +92,7 @@ class MultimoduleExampleTest : FunSpec({ context("Gradle caching") { - context("expect Dokkatoo is compatible with Gradle Build Cache") { + context("expect Dokkatoo is compatible with Build Cache") { dokkatooProject.runner .addArguments( "clean", @@ -147,7 +148,7 @@ class MultimoduleExampleTest : FunSpec({ } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject.file(".gradle/configuration-cache").toFile().deleteRecursively() dokkatooProject.file("build/reports/configuration-cache").toFile().deleteRecursively() @@ -165,8 +166,11 @@ class MultimoduleExampleTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testFixtures/kotlin/templateProjectUtils.kt b/modules/dokkatoo-plugin-integration-tests/src/testFixtures/kotlin/templateProjectUtils.kt index 9b9a3a73..44800fc3 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testFixtures/kotlin/templateProjectUtils.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testFixtures/kotlin/templateProjectUtils.kt @@ -1,17 +1,71 @@ package dev.adamko.dokkatoo.utils +import java.nio.file.Path +import kotlin.io.path.* fun GradleProjectTest.copyExampleProject(path: String) { - GradleProjectTest.exampleProjectsDir - .resolve(path) - .toFile() - .copyRecursively(projectDir.toFile(), overwrite = true) { _, _ -> OnErrorAction.SKIP } + copy( + src = GradleProjectTest.exampleProjectsDir.resolve(path), + dest = projectDir + ) } - fun GradleProjectTest.copyIntegrationTestProject(path: String) { - GradleProjectTest.integrationTestProjectsDir - .resolve(path) - .toFile() - .copyRecursively(projectDir.toFile(), overwrite = true) { _, _ -> OnErrorAction.SKIP } + copy( + src = GradleProjectTest.integrationTestProjectsDir.resolve(path), + dest = projectDir + ) +} + +private fun GradleProjectTest.copy(src: Path, dest: Path) { + dest.createDirectories() + src.copyToRecursively(dest, followLinks = false, overwrite = true) + + dest.walk() + .filter { it.isRegularFile() } + .forEach { f -> + f.updateKgpVersion(version = versions.kgp) + f.updateAgpVersion(version = versions.agp) + + if (versions.gradle <= "8.0") + f.writeText( + f.readText() + .replace( + """providers.gradleProperty("testMavenRepo")""", + """providers.gradleProperty("testMavenRepo").forUseAtConfigurationTime()""", + ) + ) + } +} + +private fun Path.updateKgpVersion(version: Version) { + writeText( + readText() + .replace( + """implementation\("org\.jetbrains\.kotlin:kotlin-gradle-plugin:[^"]+"\)""".toRegex(), + """implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$version")""", + ) + .replace("""kotlin\("(?[^"\s]+)"\) version "?[^"\s]+"?""".toRegex()) { mr -> + val type = mr.groups["type"]!!.value + """kotlin("$type") version "$version"""" + } + .replace( + """dokka_it_kotlin_version=.+""".toRegex(), + """dokka_it_kotlin_version=$version""", + ) + ) +} + +private fun Path.updateAgpVersion(version: Version) { + writeText( + readText() + .replace("""id\("com.android(?[^"\s]*)"\) version "?[^"\s]+"?""".toRegex()) { mr -> + val type = mr.groups["type"]!!.value + """id("com.android$type") version "$version"""" + } + .replace( + """dokka_it_android_gradle_plugin_version=.+""".toRegex(), + """dokka_it_android_gradle_plugin_version=$version""", + ) + ) } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/AndroidProjectIntegrationTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/AndroidProjectIntegrationTest.kt index 277ea634..ef78c70f 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/AndroidProjectIntegrationTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/AndroidProjectIntegrationTest.kt @@ -1,6 +1,7 @@ package dev.adamko.dokkatoo.tests.integration import dev.adamko.dokkatoo.utils.* +import io.kotest.assertions.asClue import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.file.shouldBeAFile import io.kotest.matchers.file.shouldHaveSameStructureAndContentAs @@ -185,7 +186,7 @@ class AndroidProjectIntegrationTest : FunSpec({ } } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject.file(".gradle/configuration-cache").toFile().deleteRecursively() dokkatooProject.file("build/reports/configuration-cache").toFile().deleteRecursively() @@ -203,8 +204,11 @@ class AndroidProjectIntegrationTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } @@ -224,11 +228,11 @@ private fun initDokkaProject( return GradleProjectTest(destinationDir.toPath()).apply { copyIntegrationTestProject("it-android-0/dokka") - gradleProperties = gradleProperties - .replace( - "dokka_it_android_gradle_plugin_version=4.2.2", - "dokka_it_android_gradle_plugin_version=8.0.2", - ) +// gradleProperties = gradleProperties +// .replace( +// "dokka_it_android_gradle_plugin_version=4.2.2", +// "dokka_it_android_gradle_plugin_version=8.0.2", +// ) file("src/main/AndroidManifest.xml").deleteIfExists() diff --git a/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt index e6462a0e..9b150b33 100644 --- a/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt @@ -2,6 +2,7 @@ package dev.adamko.dokkatoo.tests.integration import dev.adamko.dokkatoo.utils.* import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.asClue import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.file.shouldBeAFile import io.kotest.matchers.file.shouldHaveSameStructureAndContentAs @@ -95,7 +96,7 @@ class BasicProjectIntegrationTest : FunSpec({ } } - context("expect Dokkatoo is compatible with Gradle Configuration Cache") { + context("expect Dokkatoo is compatible with Configuration Cache") { dokkatooProject.file(".gradle/configuration-cache").toFile().deleteRecursively() dokkatooProject.file("build/reports/configuration-cache").toFile().deleteRecursively() @@ -113,8 +114,11 @@ class BasicProjectIntegrationTest : FunSpec({ test("first build should store the configuration cache") { configCacheRunner.build { output shouldContain "BUILD SUCCESSFUL" - output shouldContain "Configuration cache entry stored" - output shouldNotContain "problems were found storing the configuration cache" + + configurationCacheReport().asClue { report -> + report.cacheAction shouldBe "storing" + report.totalProblemCount shouldBe 0 + } } } diff --git a/modules/dokkatoo-plugin/build.gradle.kts b/modules/dokkatoo-plugin/build.gradle.kts index 9aef14dd..6162f0bf 100644 --- a/modules/dokkatoo-plugin/build.gradle.kts +++ b/modules/dokkatoo-plugin/build.gradle.kts @@ -41,16 +41,17 @@ dependencies { testFixturesImplementation(gradleTestKit()) testFixturesCompileOnly(libs.kotlin.dokkaCore) + testFixturesImplementation(platform(libs.kotlinxSerialization.bom)) testFixturesImplementation(libs.kotlinxSerialization.json) - testFixturesCompileOnly(libs.kotlin.dokkaCore) - testFixturesApi(platform(libs.kotest.bom)) testFixturesApi(libs.kotest.junit5Runner) testFixturesApi(libs.kotest.assertionsCore) testFixturesApi(libs.kotest.assertionsJson) testFixturesApi(libs.kotest.datatest) + testFixturesApi(libs.kotest.property) + // don't define test dependencies here, instead define them in the testing.suites {} configuration below } diff --git a/modules/dokkatoo-plugin/src/main/kotlin/dependencies/FormatDependenciesManager.kt b/modules/dokkatoo-plugin/src/main/kotlin/dependencies/FormatDependenciesManager.kt index 0219b115..8cc6f5e0 100644 --- a/modules/dokkatoo-plugin/src/main/kotlin/dependencies/FormatDependenciesManager.kt +++ b/modules/dokkatoo-plugin/src/main/kotlin/dependencies/FormatDependenciesManager.kt @@ -18,8 +18,8 @@ import org.gradle.api.attributes.LibraryElements.JAR import org.gradle.api.attributes.LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE import org.gradle.api.attributes.Usage.JAVA_RUNTIME import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE -import org.gradle.api.attributes.java.TargetJvmEnvironment.STANDARD_JVM -import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE +//import org.gradle.api.attributes.java.TargetJvmEnvironment.STANDARD_JVM +//import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE import org.gradle.api.model.ObjectFactory import org.gradle.kotlin.dsl.* @@ -60,7 +60,7 @@ class FormatDependenciesManager( attribute(USAGE_ATTRIBUTE, objects.named(AttributeHackPrefix + JAVA_RUNTIME)) attribute(CATEGORY_ATTRIBUTE, objects.named(AttributeHackPrefix + LIBRARY)) attribute(BUNDLING_ATTRIBUTE, objects.named(AttributeHackPrefix + EXTERNAL)) - attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, objects.named(AttributeHackPrefix + STANDARD_JVM)) +// attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, objects.named(AttributeHackPrefix + STANDARD_JVM)) attribute(LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(AttributeHackPrefix + JAR)) } diff --git a/modules/dokkatoo-plugin/src/main/kotlin/dependencies/attributesHack.kt b/modules/dokkatoo-plugin/src/main/kotlin/dependencies/attributesHack.kt index 4eca729e..4a46272f 100644 --- a/modules/dokkatoo-plugin/src/main/kotlin/dependencies/attributesHack.kt +++ b/modules/dokkatoo-plugin/src/main/kotlin/dependencies/attributesHack.kt @@ -6,8 +6,8 @@ import org.gradle.api.attributes.Bundling.BUNDLING_ATTRIBUTE import org.gradle.api.attributes.Category.CATEGORY_ATTRIBUTE import org.gradle.api.attributes.LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE -import org.gradle.api.attributes.java.TargetJvmEnvironment -import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE +//import org.gradle.api.attributes.java.TargetJvmEnvironment +//import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE import org.gradle.kotlin.dsl.* /** @@ -43,7 +43,7 @@ internal const val AttributeHackPrefix = "Dokkatoo~" internal class UsageHackRule : AttributeHackCompatibilityRule() internal class CategoryHackRule : AttributeHackCompatibilityRule() internal class BundlingHackRule : AttributeHackCompatibilityRule() -internal class TargetJvmEnvironmentHackRule : AttributeHackCompatibilityRule() +//internal class TargetJvmEnvironmentHackRule : AttributeHackCompatibilityRule() internal class LibraryElementsHackRule : AttributeHackCompatibilityRule() /** @@ -60,9 +60,9 @@ internal fun DependencyHandlerScope.applyAttributeHacks() { attribute(BUNDLING_ATTRIBUTE) { compatibilityRules.add(BundlingHackRule::class) } - attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE) { - compatibilityRules.add(TargetJvmEnvironmentHackRule::class) - } +// attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE) { +// compatibilityRules.add(TargetJvmEnvironmentHackRule::class) +// } attribute(LIBRARY_ELEMENTS_ATTRIBUTE) { compatibilityRules.add(LibraryElementsHackRule::class) } diff --git a/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooHtmlPlugin.kt b/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooHtmlPlugin.kt index 0ec54eb8..af169da4 100644 --- a/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooHtmlPlugin.kt +++ b/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooHtmlPlugin.kt @@ -4,7 +4,9 @@ import dev.adamko.dokkatoo.dokka.plugins.DokkaHtmlPluginParameters import dev.adamko.dokkatoo.dokka.plugins.DokkaHtmlPluginParameters.Companion.DOKKA_HTML_PARAMETERS_NAME import dev.adamko.dokkatoo.dokka.plugins.DokkaVersioningPluginParameters import dev.adamko.dokkatoo.dokka.plugins.DokkaVersioningPluginParameters.Companion.DOKKA_VERSIONING_PLUGIN_PARAMETERS_NAME +import dev.adamko.dokkatoo.internal.CurrentGradleVersion import dev.adamko.dokkatoo.internal.DokkatooInternalApi +import dev.adamko.dokkatoo.internal.compareTo import dev.adamko.dokkatoo.internal.uppercaseFirstChar import dev.adamko.dokkatoo.tasks.DokkatooGeneratePublicationTask import dev.adamko.dokkatoo.tasks.LogHtmlPublicationLinkTask @@ -120,10 +122,13 @@ constructor( ) : Action { private val checkEnabled: Boolean - get() = providers - .gradleProperty(HTML_MODULE_AGGREGATION_CHECK_ENABLED) - .map(String::toBoolean) - .getOrElse(true) + get() = + CurrentGradleVersion >= "8.0" // avoid CC error 'GradleProperties has not been loaded yet' + && + providers + .gradleProperty(HTML_MODULE_AGGREGATION_CHECK_ENABLED) + .map(String::toBoolean) + .getOrElse(true) override fun execute(task: Task) { if (!checkEnabled) { diff --git a/modules/dokkatoo-plugin/src/main/kotlin/tasks/LogHtmlPublicationLinkTask.kt b/modules/dokkatoo-plugin/src/main/kotlin/tasks/LogHtmlPublicationLinkTask.kt index 24db80f8..eb32b9b5 100644 --- a/modules/dokkatoo-plugin/src/main/kotlin/tasks/LogHtmlPublicationLinkTask.kt +++ b/modules/dokkatoo-plugin/src/main/kotlin/tasks/LogHtmlPublicationLinkTask.kt @@ -1,7 +1,9 @@ package dev.adamko.dokkatoo.tasks +import dev.adamko.dokkatoo.internal.CurrentGradleVersion import dev.adamko.dokkatoo.internal.DokkatooInternalApi import dev.adamko.dokkatoo.internal.appendPath +import dev.adamko.dokkatoo.internal.compareTo import dev.adamko.dokkatoo.tasks.LogHtmlPublicationLinkTask.Companion.ENABLE_TASK_PROPERTY_NAME import java.net.URI import java.net.http.HttpClient @@ -91,7 +93,9 @@ constructor( .orElse(true) super.onlyIf("task is enabled via property") { - logHtmlPublicationLinkTaskEnabled.get() + CurrentGradleVersion >= "8.0" // avoid CC error 'GradleProperties has not been loaded yet' + && + logHtmlPublicationLinkTaskEnabled.get() } super.onlyIf("${::serverUri.name} is present") { diff --git a/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt b/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt index f6ec6b6a..3c4168fa 100644 --- a/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt +++ b/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt @@ -24,6 +24,10 @@ class GradleProjectTest( baseDir: Path = funcTestTempDir, ) : this(projectDir = baseDir.resolve(testProjectName)) + val versions = Versions() + fun versions(configure: Versions.() -> Unit): GradleProjectTest = + apply { versions.configure() } + /** Args that will be added to every [runner] */ val defaultRunnerArgs: MutableList = mutableListOf( // disable the logging task so the tests work consistently on local machines and CI/CD @@ -33,6 +37,7 @@ class GradleProjectTest( val runner: GradleRunner get() = GradleRunner.create() .withProjectDir(projectDir.toFile()) + .withGradleVersion(versions.gradle.toString().substringBeforeLast(".0")) .withJvmArguments( "-XX:MaxMetaspaceSize=512m", "-XX:+AlwaysPreTouch", // https://github.com/gradle/gradle/issues/3093#issuecomment-387259298 @@ -61,6 +66,22 @@ class GradleProjectTest( } +data class Versions( + var kgp: Version = +// v("2.0.0"), + v("1.9.24"), + var agp: Version = v("7.4.0"), + var gradle: Version = +// v("6.9.4"), +// v("7.6.4"), + v("8.4"), +) { + operator fun invoke(configure: Versions.() -> Unit) { + apply(configure) + } +} + + ///** // * Load a project from the [GradleProjectTest.dokkaSrcIntegrationTestProjectsDir] // */ diff --git a/modules/dokkatoo-plugin/src/testFixtures/kotlin/Version.kt b/modules/dokkatoo-plugin/src/testFixtures/kotlin/Version.kt new file mode 100644 index 00000000..8633d870 --- /dev/null +++ b/modules/dokkatoo-plugin/src/testFixtures/kotlin/Version.kt @@ -0,0 +1,56 @@ +package dev.adamko.dokkatoo.utils + + +fun v(version: String): Version = Version(version) + +fun Version(version: String): Version { + val match = semverRegex.matchEntire(version) ?: error("Version $version does not match SemVer") + val major = match.groups["major"]!!.value.toInt() + val minor = match.groups["minor"]?.value?.toInt() ?: 0 + val patch = match.groups["patch"]?.value?.toInt() ?: 0 + return Version(major = major, minor = minor, patch = patch) +} + +data class Version( + val major: Int, + val minor: Int, + val patch: Int, +) : Comparable { + +// private val encoded: BigInteger +// +// init { +// val base = maxOf(major, minor, patch) + 1 +// +// "$patch".toBigInteger(base) +// encoded = patch.toBigInteger() * base.pow(0) + +// minor.toBigInteger() * base.pow(1) + +// major.toBigInteger() * base.pow(2) +// } + + override operator fun compareTo(other: Version): Int = + when { + major != other.major -> major.compareTo(other.major) + minor != other.minor -> minor.compareTo(other.minor) + patch != other.patch -> patch.compareTo(other.patch) + else -> 0 + } + + operator fun compareTo(other: String): Int = + compareTo(Version(other)) + + override fun toString(): String = + "$major.$minor.$patch" + + fun coerceAtLeast(min: String): Version = coerceAtLeast(v(min)) + + companion object +} + + +// intentionally lenient because it's only for tests +private val semverRegex = Regex( + """ + (?\d+)\.(?\d+)\.?(?\d+)?[-+]?(?.*)? + """.trimIndent() +) diff --git a/modules/dokkatoo-plugin/src/testFixtures/kotlin/gradleConfigCache.kt b/modules/dokkatoo-plugin/src/testFixtures/kotlin/gradleConfigCache.kt new file mode 100644 index 00000000..ee45aec4 --- /dev/null +++ b/modules/dokkatoo-plugin/src/testFixtures/kotlin/gradleConfigCache.kt @@ -0,0 +1,45 @@ +package dev.adamko.dokkatoo.utils + +import io.kotest.matchers.string.shouldContain +import java.net.URI +import java.nio.file.Path +import kotlin.io.path.bufferedReader +import kotlin.io.path.toPath +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import org.gradle.testkit.runner.BuildResult + + +fun BuildResult.configurationCacheReport(): ConfigurationCacheReport { + output shouldContain "See the complete report at" + + val reportPath = output.lines() + .first { it.startsWith("See the complete report at") } + .substringAfter("See the complete report at") + .let { URI(it.trim()).toPath() } + + return parseReport(reportPath) +} + +private fun parseReport( + path: Path +): ConfigurationCacheReport { + val data = path.bufferedReader() + .lineSequence() + .dropWhile { !it.matches("// *begin-report-data.*".toRegex()) } + .drop(1) + .takeWhile { !it.matches("// *end-report-data.*".toRegex()) } + .joinToString("\n") + + return Json.decodeFromString(ConfigurationCacheReport.serializer(), data) +} + +@Serializable +data class ConfigurationCacheReport( + val diagnostics: JsonArray, + val totalProblemCount: Int, + val cacheAction: String, + val requestedTasks: String, + val documentationLink: String, +) diff --git a/modules/dokkatoo-plugin/src/testFixtures/kotlin/projects/MultiModuleProject.kt b/modules/dokkatoo-plugin/src/testFixtures/kotlin/projects/MultiModuleProject.kt index 13da09b9..c1bd6eb9 100644 --- a/modules/dokkatoo-plugin/src/testFixtures/kotlin/projects/MultiModuleProject.kt +++ b/modules/dokkatoo-plugin/src/testFixtures/kotlin/projects/MultiModuleProject.kt @@ -16,7 +16,9 @@ fun TestScope.initMultiModuleProject( .substringAfter("dev.adamko.dokkatoo.") // drop the package name .replaceNonAlphaNumeric() + return gradleKtsProjectTest("$baseDirName/multi-module-hello-goodbye/$testName") { + val versions = versions settingsGradleKts += """ | @@ -29,7 +31,7 @@ fun TestScope.initMultiModuleProject( |plugins { | // Kotlin plugin shouldn't be necessary here, but without it Dokka errors | // with ClassNotFound KotlinPluginExtension... very weird - | kotlin("jvm") version embeddedKotlinVersion apply false + | kotlin("jvm") version "${versions.kgp}" apply false | id("dev.adamko.dokkatoo") version "${DokkatooConstants.DOKKATOO_VERSION}" |} | @@ -43,7 +45,7 @@ fun TestScope.initMultiModuleProject( dir("subproject-hello") { buildGradleKts = """ |plugins { - | kotlin("jvm") version embeddedKotlinVersion + | kotlin("jvm") version "${versions.kgp}" | id("dev.adamko.dokkatoo") version "${DokkatooConstants.DOKKATOO_VERSION}" |} | @@ -70,7 +72,7 @@ fun TestScope.initMultiModuleProject( buildGradleKts = """ |plugins { - | kotlin("jvm") version embeddedKotlinVersion + | kotlin("jvm") version "${versions.kgp}" | id("dev.adamko.dokkatoo") version "${DokkatooConstants.DOKKATOO_VERSION}" |} | diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/AttributeHackTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/AttributeHackTest.kt index ec7f1fa8..331677c3 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/AttributeHackTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/AttributeHackTest.kt @@ -34,6 +34,7 @@ private fun initProject( config: GradleProjectTest.() -> Unit = {}, ): GradleProjectTest { return gradleKtsProjectTest("attribute-hack-test") { + val versions = versions settingsGradleKts += """ | @@ -45,7 +46,7 @@ private fun initProject( dir("subproject-with-dokkatoo") { buildGradleKts = """ |plugins { - | kotlin("multiplatform") version embeddedKotlinVersion + | kotlin("multiplatform") version "${versions.kgp}" | id("dev.adamko.dokkatoo-html") version "$DOKKATOO_VERSION" |} | @@ -65,8 +66,8 @@ private fun initProject( |import org.gradle.api.attributes.LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE |import org.gradle.api.attributes.Usage.JAVA_RUNTIME |import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE - |import org.gradle.api.attributes.java.TargetJvmEnvironment.STANDARD_JVM - |import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE + |//import org.gradle.api.attributes.java.TargetJvmEnvironment.STANDARD_JVM + |//import org.gradle.api.attributes.java.TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE | |plugins { | `java-library` @@ -75,13 +76,13 @@ private fun initProject( |val jarFiles: Configuration by configurations.creating { | isCanBeResolved = false | isCanBeConsumed = false - | isCanBeDeclared = true + | ${"isCanBeDeclared = true".takeIf { versions.gradle >= "8.0" } ?: ""} |} | |val jarFilesResolver: Configuration by configurations.creating { | isCanBeResolved = true | isCanBeConsumed = false - | isCanBeDeclared = false + | ${"isCanBeDeclared = true".takeIf { versions.gradle >= "8.0" } ?: ""} | extendsFrom(jarFiles) | attributes { | //attribute(USAGE_ATTRIBUTE, objects.named(JAVA_RUNTIME)) diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/DokkatooPluginFunctionalTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/DokkatooPluginFunctionalTest.kt index c679b5b8..bf53fbe9 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/DokkatooPluginFunctionalTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/DokkatooPluginFunctionalTest.kt @@ -18,6 +18,10 @@ class DokkatooPluginFunctionalTest : FunSpec({ """.trimMargin() } + testProject.versions { + gradle = v("8.6") // Gradle is bugged in newer versions https://github.com/gradle/gradle/issues/28733 + } + test("expect Dokka Plugin creates Dokka tasks") { testProject.runner .addArguments("tasks", "--group=dokkatoo", "-q") diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/DuplicateModulePathWarningTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/DuplicateModulePathWarningTest.kt index dc150bdd..f7696cf1 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/DuplicateModulePathWarningTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/DuplicateModulePathWarningTest.kt @@ -13,7 +13,7 @@ class DuplicateModulePathWarningTest : FunSpec({ buildGradleKts += """ | |dokkatoo { - | modulePath = "dupe" + | modulePath.set("dupe") |} | """.trimMargin() @@ -23,7 +23,7 @@ class DuplicateModulePathWarningTest : FunSpec({ buildGradleKts += """ | |dokkatoo { - | modulePath = "dupe" + | modulePath.set("dupe") |} | """.trimMargin() diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/HtmlAggregationWarningTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/HtmlAggregationWarningTest.kt index a633f011..b1b66ed2 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/HtmlAggregationWarningTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/HtmlAggregationWarningTest.kt @@ -40,7 +40,11 @@ class HtmlAggregationWarningTest : FunSpec({ context("when all-modules-page-plugin is present") { val project = initMultiModuleProject("with-all-pages-plugin") - project.runner + project + .versions { + gradle = gradle.coerceAtLeast("8.0") + } + .runner .addArguments( "clean", ":dokkatooGenerate", diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinDslAccessorsTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinDslAccessorsTest.kt index b4557789..f6c945bf 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinDslAccessorsTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinDslAccessorsTest.kt @@ -13,6 +13,9 @@ class KotlinDslAccessorsTest : FunSpec({ test("Dokkatoo DSL accessors do not trigger compilation warnings") { project + .versions { + gradle = gradle.coerceAtLeast("8.3") + } .runner .forwardOutput() .addArguments( diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinMultiplatformFunctionalTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinMultiplatformFunctionalTest.kt index c529ff6b..dd379e35 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinMultiplatformFunctionalTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinMultiplatformFunctionalTest.kt @@ -144,7 +144,7 @@ private fun initKotlinMultiplatformProject( buildGradleKts = """ |plugins { - | kotlin("multiplatform") version "1.8.22" + | kotlin("multiplatform") version "${versions.kgp}" | id("dev.adamko.dokkatoo") version "${DokkatooConstants.DOKKATOO_VERSION}" |} | diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/MultiModuleFunctionalTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/MultiModuleFunctionalTest.kt index e00be8d0..a7891cf5 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/MultiModuleFunctionalTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/MultiModuleFunctionalTest.kt @@ -99,7 +99,7 @@ class MultiModuleFunctionalTest : FunSpec({ context("Gradle caching") { - context("expect Dokkatoo is compatible with Gradle Build Cache") { + context("expect Dokkatoo is compatible with Build Cache") { val project = initMultiModuleProject("build-cache") test("expect clean is successful") { @@ -512,6 +512,22 @@ class MultiModuleFunctionalTest : FunSpec({ } } + if (project.versions.gradle <= "8.0") { + /* + FAILURE: Build failed with an exception. + + * Where: + Build file '/.../build.gradle.kts' line: 1 + + * What went wrong: + An exception occurred applying plugin request [id: 'dev.adamko.dokkatoo', version: '2.4.0-SNAPSHOT'] + > Failed to apply plugin class 'dev.adamko.dokkatoo.DokkatooBasePlugin'. + > Could not create plugin of type 'DokkatooBasePlugin'. + > kotlin/enums/EnumEntriesKt + */ + return@context + } + test("expect warning regarding KotlinProjectExtension") { project.runner .addArguments("clean") diff --git a/modules/dokkatoo-plugin/src/testFunctional/kotlin/tasks/LogHtmlPublicationLinkTaskTest.kt b/modules/dokkatoo-plugin/src/testFunctional/kotlin/tasks/LogHtmlPublicationLinkTaskTest.kt index 2870f6c1..c24c0367 100644 --- a/modules/dokkatoo-plugin/src/testFunctional/kotlin/tasks/LogHtmlPublicationLinkTaskTest.kt +++ b/modules/dokkatoo-plugin/src/testFunctional/kotlin/tasks/LogHtmlPublicationLinkTaskTest.kt @@ -100,7 +100,7 @@ private fun initDokkatooProject( return gradleKtsProjectTest("log-html-publication-link-task") { buildGradleKts = """ |plugins { - | kotlin("jvm") version "1.8.22" + | kotlin("jvm") version "${versions.kgp}" | id("dev.adamko.dokkatoo") version "${DokkatooConstants.DOKKATOO_VERSION}" |} |