From e021943d1c638d415aa87f493ab8a5c8b5654d51 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Mon, 13 Mar 2023 11:27:59 +0100 Subject: [PATCH 01/15] Fix test runtime Java versions - Create DokkaBuildProperties extension for convenient sharing values used to configure the Dokka build (only contains 3 values now, but this will be expanded later) - update base-java convention to set the test Java launcher - update GitHub workflow to set the java-version via DokkaBuildProperties --- .github/workflows/gradle-test.pr.yml | 12 +++-- .../org/jetbrains/DokkaBuildProperties.kt | 53 +++++++++++++++++++ .../conventions/base-java.gradle.kts | 9 +++- .../org/jetbrains/conventions/base.gradle.kts | 12 ++++- .../conventions/kotlin-jvm.gradle.kts | 7 +-- .../org/jetbrains/internal/accessors.kt | 25 +++++++++ gradle.properties | 4 +- 7 files changed, 110 insertions(+), 12 deletions(-) create mode 100644 buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt create mode 100644 buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt diff --git a/.github/workflows/gradle-test.pr.yml b/.github/workflows/gradle-test.pr.yml index 627304b8ed..743182bb7e 100644 --- a/.github/workflows/gradle-test.pr.yml +++ b/.github/workflows/gradle-test.pr.yml @@ -10,23 +10,25 @@ jobs: test-ubuntu: strategy: matrix: - version: [ 8, 11, 17 ] + javaVersion: [ 8, 11, 17 ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: distribution: 'zulu' - java-version: ${{ matrix.version }} + java-version: ${{ matrix.javaVersion }} cache: 'maven' - uses: gradle/gradle-build-action@v2 + env: + ORG_GRADLE_PROJECT_org.jetbrains.dokka.javaToolchain.test: ${{ matrix.javaVersion }} with: arguments: clean test --stacktrace test-windows: strategy: matrix: - version: [ 11, 17 ] + javaVersion: [ 11, 17 ] fail-fast: false runs-on: windows-latest steps: @@ -34,8 +36,10 @@ jobs: - uses: actions/setup-java@v3 with: distribution: 'zulu' - java-version: ${{ matrix.version }} + java-version: ${{ matrix.javaVersion }} cache: 'maven' - uses: gradle/gradle-build-action@v2 + env: + ORG_GRADLE_PROJECT_org.jetbrains.dokka.javaToolchain.test: ${{ matrix.javaVersion }} with: arguments: clean test --stacktrace --no-daemon --parallel --max-workers=1 diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt new file mode 100644 index 0000000000..4b4c37118d --- /dev/null +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt @@ -0,0 +1,53 @@ +package org.jetbrains + +import org.gradle.api.provider.Provider +import org.gradle.api.provider.ProviderFactory +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import javax.inject.Inject + +/** + * Common build properties used to build Dokka subprojects. + * + * This is an extension created by the [org.jetbrains.conventions.Base_gradle] convention plugin. + * + * Default values are set in the root `gradle.properties`, and can be overridden via + * [CLI args, system properties, and environment variables](https://docs.gradle.org/current/userguide/build_environment.html#sec:project_properties) + */ +abstract class DokkaBuildProperties @Inject constructor( + private val providers: ProviderFactory, +) { + + /** + * The main version of Java that should be used to build Dokka source code. + * + * Updating the Java target is a breaking change. + */ + val mainJavaVersion: Provider = + dokkaProperty("javaToolchain.mainCompiler") { JavaLanguageVersion.of(it) } + + /** + * The version of Java that should be used to run Dokka tests. + * + * This value is set in CI/CD environments to make sure that Dokka still works with different + * versions of Java. + */ + val testJavaLauncherVErsion: Provider = + dokkaProperty("javaToolchain.testLauncher") { JavaLanguageVersion.of(it) } + + /** + * The Kotlin language level that Dokka artifacts are compiled to support. + * + * Updating the language level is a breaking change. + */ + val kotlinLanguageLevel: Provider = + dokkaProperty("kotlinLanguageLevel") { KotlinVersion.fromVersion(it) } + + + private fun dokkaProperty(name: String, convert: (String) -> T) = + providers.gradleProperty("org.jetbrains.dokka.$name").map(convert) + + companion object { + const val EXTENSION_NAME = "dokkaBuild" + } +} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts index 3addac741a..51ac945a26 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ b/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -8,15 +8,22 @@ package org.jetbrains.conventions */ plugins { + id("org.jetbrains.conventions.base") `java` } java { toolchain { - languageVersion.set(JavaLanguageVersion.of(8)) + languageVersion.set(dokkaBuild.mainJavaVersion) } } java { withSourcesJar() } + +tasks.withType().configureEach { + javaLauncher.set(javaToolchains.launcherFor { + languageVersion.set(dokkaBuild.testJavaLauncherVErsion) + }) +} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts index c4352d1664..b18ca6a435 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts +++ b/buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts @@ -1,10 +1,20 @@ package org.jetbrains.conventions +import org.jetbrains.DokkaBuildProperties + +/** + * A convention plugin that sets up common config and sensible defaults for all subprojects. + * + * It provides the [DokkaBuildProperties] extension, for accessing common build properties. + */ + plugins { base } -// common Gradle configuration that should be applied to all projects +val dokkaBuildProperties = + extensions.create(DokkaBuildProperties.EXTENSION_NAME) + if (project != rootProject) { project.group = rootProject.group diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts index c40ce57c04..c07fc0921b 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts +++ b/buildSrc/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts @@ -1,7 +1,6 @@ package org.jetbrains.conventions import org.jetbrains.configureDokkaVersion -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -12,8 +11,6 @@ plugins { configureDokkaVersion() -val language_version: String by project - tasks.withType().configureEach { compilerOptions { freeCompilerArgs.addAll( @@ -26,7 +23,7 @@ tasks.withType().configureEach { ) ) allWarningsAsErrors.set(true) - languageVersion.set(KotlinVersion.fromVersion(language_version)) - apiVersion.set(KotlinVersion.fromVersion(language_version)) + languageVersion.set(dokkaBuild.kotlinLanguageLevel) + apiVersion.set(dokkaBuild.kotlinLanguageLevel) } } diff --git a/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt b/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt new file mode 100644 index 0000000000..9f1be7ad72 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt @@ -0,0 +1,25 @@ +package org.gradle.kotlin.dsl + +import org.gradle.api.Project +import org.jetbrains.DokkaBuildProperties + +/* + * Utility functions for accessing Gradle extensions that are created by convention plugins. + * + * (Gradle can't generate the nice DSL accessors for the project that defines them) + * + * These functions should be marked `internal`, because they are not needed outside of the + * convention plugins project. + */ + +/** + * Retrieves the [dokkaBuild][org.jetbrains.DokkaBuildProperties] extension. + */ +internal val Project.dokkaBuild: DokkaBuildProperties + get() = extensions.getByType() + +/** + * Configures the [dokkaBuild][org.jetbrains.DokkaBuildProperties] extension. + */ +internal fun Project.dokkaBuild(configure: DokkaBuildProperties.() -> Unit) = + extensions.configure(configure) diff --git a/gradle.properties b/gradle.properties index a8eb1eff42..e4c0267b11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,8 @@ # Project Settings dokka_version=1.8.20-SNAPSHOT +org.jetbrains.dokka.javaToolchain.mainCompiler=8 +org.jetbrains.dokka.javaToolchain.testLauncher=8 +org.jetbrains.dokka.kotlinLanguageLevel=1.4 dokka_integration_test_parallelism=2 # Versions kotlin_version=1.8.10 @@ -8,7 +11,6 @@ kotlinx_html_version=0.7.5 kotlin_plugin_version=213-1.8.10-release-430-IJ6777.52 jsoup_version=1.15.3 idea_version=213.6777.52 -language_version=1.4 # jackson 2.13.X does not support kotlin language version 1.4, check before updating jackson_version=2.12.7 # fixes CVE-2022-42003 From c3221733e532234236dcd1dec4057c37a70180e2 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:13:23 +0100 Subject: [PATCH 02/15] suppress PackageDirectoryMismatch in accessors util --- buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt b/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt index 9f1be7ad72..9f1d20c09e 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt @@ -1,4 +1,6 @@ -package org.gradle.kotlin.dsl +@file:Suppress("PackageDirectoryMismatch") + +package org.gradle.kotlin.dsl // for convenience use a default package for gradle.kts scripts import org.gradle.api.Project import org.jetbrains.DokkaBuildProperties From fcd57d13caa5cebde13793c06fb9291d70649bcd Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:13:43 +0100 Subject: [PATCH 03/15] rename accessors file --- .../internal/{accessors.kt => gradleKotlinDslAccessors.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename buildSrc/src/main/kotlin/org/jetbrains/internal/{accessors.kt => gradleKotlinDslAccessors.kt} (100%) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt b/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt similarity index 100% rename from buildSrc/src/main/kotlin/org/jetbrains/internal/accessors.kt rename to buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt From d5ab847e57530b23b5c9bf2ce382dc83cbfa6990 Mon Sep 17 00:00:00 2001 From: aSemy <897017+aSemy@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:14:48 +0100 Subject: [PATCH 04/15] fix Version typo Co-authored-by: Goooler --- buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt | 2 +- .../main/kotlin/org/jetbrains/conventions/base-java.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt index 4b4c37118d..ff2c17c469 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt @@ -32,7 +32,7 @@ abstract class DokkaBuildProperties @Inject constructor( * This value is set in CI/CD environments to make sure that Dokka still works with different * versions of Java. */ - val testJavaLauncherVErsion: Provider = + val testJavaLauncherVersion: Provider = dokkaProperty("javaToolchain.testLauncher") { JavaLanguageVersion.of(it) } /** diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts index 51ac945a26..283b6078cf 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ b/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -24,6 +24,6 @@ java { tasks.withType().configureEach { javaLauncher.set(javaToolchains.launcherFor { - languageVersion.set(dokkaBuild.testJavaLauncherVErsion) + languageVersion.set(dokkaBuild.testJavaLauncherVersion) }) } From f27fa8c2d467aa1040e3196bbc540aac01153f73 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:16:37 +0100 Subject: [PATCH 05/15] default testLauncher to mainJavaVersion --- buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt index ff2c17c469..755651994b 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt @@ -34,6 +34,7 @@ abstract class DokkaBuildProperties @Inject constructor( */ val testJavaLauncherVersion: Provider = dokkaProperty("javaToolchain.testLauncher") { JavaLanguageVersion.of(it) } + .orElse(mainJavaVersion) /** * The Kotlin language level that Dokka artifacts are compiled to support. From 66eb24334fee04ff64f3d3170201ace529421c61 Mon Sep 17 00:00:00 2001 From: aSemy <897017+aSemy@users.noreply.github.com> Date: Tue, 14 Mar 2023 16:05:44 +0100 Subject: [PATCH 06/15] use function references instead of lambdas Co-authored-by: Goooler --- .../src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt index 755651994b..57e20acdd8 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt @@ -24,7 +24,7 @@ abstract class DokkaBuildProperties @Inject constructor( * Updating the Java target is a breaking change. */ val mainJavaVersion: Provider = - dokkaProperty("javaToolchain.mainCompiler") { JavaLanguageVersion.of(it) } + dokkaProperty("javaToolchain.mainCompiler", JavaLanguageVersion::of) /** * The version of Java that should be used to run Dokka tests. @@ -33,7 +33,7 @@ abstract class DokkaBuildProperties @Inject constructor( * versions of Java. */ val testJavaLauncherVersion: Provider = - dokkaProperty("javaToolchain.testLauncher") { JavaLanguageVersion.of(it) } + dokkaProperty("javaToolchain.testLauncher", JavaLanguageVersion::of) .orElse(mainJavaVersion) /** @@ -42,7 +42,7 @@ abstract class DokkaBuildProperties @Inject constructor( * Updating the language level is a breaking change. */ val kotlinLanguageLevel: Provider = - dokkaProperty("kotlinLanguageLevel") { KotlinVersion.fromVersion(it) } + dokkaProperty("kotlinLanguageLevel", KotlinVersion::fromVersion) private fun dokkaProperty(name: String, convert: (String) -> T) = From bf47fd9126e946bd664b9b0abaeb0663022ee7a9 Mon Sep 17 00:00:00 2001 From: aSemy <897017+aSemy@users.noreply.github.com> Date: Tue, 14 Mar 2023 16:06:36 +0100 Subject: [PATCH 07/15] Remove explicit type arguments Co-authored-by: Goooler --- .../kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt b/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt index 9f1d20c09e..b789f97e2e 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt @@ -18,10 +18,10 @@ import org.jetbrains.DokkaBuildProperties * Retrieves the [dokkaBuild][org.jetbrains.DokkaBuildProperties] extension. */ internal val Project.dokkaBuild: DokkaBuildProperties - get() = extensions.getByType() + get() = extensions.getByType() /** * Configures the [dokkaBuild][org.jetbrains.DokkaBuildProperties] extension. */ internal fun Project.dokkaBuild(configure: DokkaBuildProperties.() -> Unit) = - extensions.configure(configure) + extensions.configure(configure) From 379ab750d4294469a55a0f4ccebc6601d747b019 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Tue, 14 Mar 2023 16:07:35 +0100 Subject: [PATCH 08/15] tidy up comment --- .../kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt b/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt index b789f97e2e..78bbc56898 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt @@ -10,8 +10,8 @@ import org.jetbrains.DokkaBuildProperties * * (Gradle can't generate the nice DSL accessors for the project that defines them) * - * These functions should be marked `internal`, because they are not needed outside of the - * convention plugins project. + * These functions are not needed outside the convention plugins project and should be marked as + * `internal` */ /** From 0dc471f82f4db4930d02c4188ba538b589fe5e17 Mon Sep 17 00:00:00 2001 From: aSemy <897017+aSemy@users.noreply.github.com> Date: Thu, 16 Mar 2023 13:33:30 +0100 Subject: [PATCH 09/15] Update build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts Co-authored-by: Goooler --- .../src/main/kotlin/org/jetbrains/conventions/base.gradle.kts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts index b18ca6a435..a1f6e28840 100644 --- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts @@ -12,8 +12,7 @@ plugins { base } -val dokkaBuildProperties = - extensions.create(DokkaBuildProperties.EXTENSION_NAME) +val dokkaBuildProperties: DokkaBuildProperties = extensions.create(DokkaBuildProperties.EXTENSION_NAME) if (project != rootProject) { From 62a38a102ed3caef6cb4b6c6016188f9a0fd0c1c Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 16 Mar 2023 13:42:18 +0100 Subject: [PATCH 10/15] tweak the 'kotlinx.coroutines requires Java 11' fix --- integration-tests/gradle/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index f47ef6709e..ffc025deef 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -22,6 +22,8 @@ tasks.integrationTest { javaLauncher.set(javaToolchains.launcherFor { // kotlinx.coroutines requires Java 11+ - languageVersion.set(JavaLanguageVersion.of(11)) + languageVersion.set(dokkaBuild.testJavaLauncherVersion.map { + maxOf(it, JavaLanguageVersion.of(11)) + }) }) } From 8f44842df66f5d8a62870841a8722d8bddc20e58 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 16 Mar 2023 13:52:06 +0100 Subject: [PATCH 11/15] set useJUnitPlatform() in base-java convention --- .../main/kotlin/org/jetbrains/conventions/base-java.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts index 51b47bf491..c5b3108ede 100644 --- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -23,6 +23,8 @@ java { } tasks.withType().configureEach { + useJUnitPlatform() + javaLauncher.set(javaToolchains.launcherFor { languageVersion.set(dokkaBuild.testJavaLauncherVersion) }) From a586e250b981dce7745d1820363f8d9dfc0caf99 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 16 Mar 2023 14:11:57 +0100 Subject: [PATCH 12/15] add JUnit engines for both JUnit 4 and 5 --- test-utils/build.gradle.kts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index 6bd501b7aa..463aa6ca10 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -4,4 +4,9 @@ plugins { dependencies { api(kotlin("test-junit")) + + api(platform("org.junit:junit-bom:5.9.2")) + // support both JUnit 4 and JUnit 5 tests + api("org.junit.jupiter:junit-jupiter-engine") + api("org.junit.vintage:junit-vintage-engine") } From a7c81decc21039b5b01d5b29f6018ec577280298 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 16 Mar 2023 14:22:17 +0100 Subject: [PATCH 13/15] replace `useJUnitPlatform()` with `useJUnit()` - aligning and updating the tests would be a big change that should be done in another PR --- .../kotlin/org/jetbrains/conventions/base-java.gradle.kts | 2 +- test-utils/build.gradle.kts | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts index c5b3108ede..f5a74f6e0e 100644 --- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -23,7 +23,7 @@ java { } tasks.withType().configureEach { - useJUnitPlatform() + useJUnit() javaLauncher.set(javaToolchains.launcherFor { languageVersion.set(dokkaBuild.testJavaLauncherVersion) diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index 463aa6ca10..6bd501b7aa 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -4,9 +4,4 @@ plugins { dependencies { api(kotlin("test-junit")) - - api(platform("org.junit:junit-bom:5.9.2")) - // support both JUnit 4 and JUnit 5 tests - api("org.junit.jupiter:junit-jupiter-engine") - api("org.junit.vintage:junit-vintage-engine") } From 8f0ab249e2682576c4ed872c042318c49fccb542 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:21:53 +0100 Subject: [PATCH 14/15] use JUnit Platform & add necessary runtime dependencies --- .../jetbrains/conventions/base-java.gradle.kts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts index f5a74f6e0e..fbddecdaae 100644 --- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -23,9 +23,22 @@ java { } tasks.withType().configureEach { - useJUnit() + useJUnitPlatform() javaLauncher.set(javaToolchains.launcherFor { languageVersion.set(dokkaBuild.testJavaLauncherVersion) }) } + +dependencies { + testImplementation(platform("org.junit:junit-bom:5.9.2")) + // TODO Upgrade all subprojects to use JUnit Jupiter https://github.com/Kotlin/dokka/issues/2924 + // Ideally convention plugins should only provide sensible defaults that can be overridden by subprojects. + // If a convention plugin defines dependencies, these cannot be easily overridden by subprojects, and so + // this should be avoided. However, for now , both JUnit 4 and 5 must be supported, and since these are test + // runtime-only dependencies they are not going to have a significant impact subprojects. + // These dependencies should be revisited in #2924, and (for example) moved to each subproject (which is more + // repetitive, but more declarative and clear), or some other solution. + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") + testRuntimeOnly("org.junit.vintage:junit-vintage-engine") +} From bb39de7487699faf223e87ae21d7eb888100e054 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:31:39 +0100 Subject: [PATCH 15/15] update TODO comment with more info --- .../main/kotlin/org/jetbrains/conventions/base-java.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts index fbddecdaae..befec76fa9 100644 --- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -33,6 +33,8 @@ tasks.withType().configureEach { dependencies { testImplementation(platform("org.junit:junit-bom:5.9.2")) // TODO Upgrade all subprojects to use JUnit Jupiter https://github.com/Kotlin/dokka/issues/2924 + // Replace these dependencies with `testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")` + // See https://junit.org/junit5/docs/current/user-guide/#running-tests-build-gradle-engines-configure // Ideally convention plugins should only provide sensible defaults that can be overridden by subprojects. // If a convention plugin defines dependencies, these cannot be easily overridden by subprojects, and so // this should be avoided. However, for now , both JUnit 4 and 5 must be supported, and since these are test