From 3ea414251d32108dab8b14d41a672e9834824690 Mon Sep 17 00:00:00 2001 From: Goooler Date: Mon, 13 Mar 2023 21:51:31 +0800 Subject: Migrate buildSrc to composite build (#2912) --- build-logic/README.md | 7 + build-logic/build.gradle.kts | 31 +++++ build-logic/settings.gradle.kts | 17 +++ .../main/kotlin/org/jetbrains/CrossPlatformExec.kt | 63 +++++++++ .../org/jetbrains/DokkaPublicationChannel.kt | 62 +++++++++ .../src/main/kotlin/org/jetbrains/DokkaVersion.kt | 19 +++ .../main/kotlin/org/jetbrains/DokkaVersionType.kt | 8 ++ .../src/main/kotlin/org/jetbrains/SetupMaven.kt | 45 ++++++ .../kotlin/org/jetbrains/ValidatePublications.kt | 79 +++++++++++ .../org/jetbrains/conventions/base-java.gradle.kts | 22 +++ .../org/jetbrains/conventions/base.gradle.kts | 12 ++ .../conventions/dokka-integration-test.gradle.kts | 75 ++++++++++ .../org/jetbrains/conventions/dokka.gradle.kts | 13 ++ .../jetbrains/conventions/kotlin-jvm.gradle.kts | 32 +++++ .../jetbrains/conventions/maven-publish.gradle.kts | 30 ++++ .../src/main/kotlin/org/jetbrains/projectUtils.kt | 16 +++ .../src/main/kotlin/org/jetbrains/publication.kt | 152 +++++++++++++++++++++ .../src/main/kotlin/org/jetbrains/taskUtils.kt | 22 +++ build.gradle.kts | 10 +- buildSrc/build.gradle.kts | 32 ----- buildSrc/settings.gradle.kts | 17 --- .../main/kotlin/org/jetbrains/CrossPlatformExec.kt | 63 --------- .../org/jetbrains/DokkaPublicationChannel.kt | 62 --------- .../src/main/kotlin/org/jetbrains/DokkaVersion.kt | 19 --- .../main/kotlin/org/jetbrains/DokkaVersionType.kt | 8 -- .../src/main/kotlin/org/jetbrains/SetupMaven.kt | 45 ------ .../kotlin/org/jetbrains/ValidatePublications.kt | 79 ----------- .../org/jetbrains/conventions/base-java.gradle.kts | 22 --- .../org/jetbrains/conventions/base.gradle.kts | 12 -- .../conventions/dokka-integration-test.gradle.kts | 75 ---------- .../org/jetbrains/conventions/dokka.gradle.kts | 13 -- .../jetbrains/conventions/kotlin-jvm.gradle.kts | 32 ----- .../jetbrains/conventions/maven-publish.gradle.kts | 30 ---- .../src/main/kotlin/org/jetbrains/projectUtils.kt | 16 --- .../src/main/kotlin/org/jetbrains/publication.kt | 152 --------------------- .../src/main/kotlin/org/jetbrains/taskUtils.kt | 22 --- core/build.gradle.kts | 4 +- core/content-matcher-test-utils/build.gradle.kts | 2 +- core/test-api/build.gradle.kts | 4 +- integration-tests/build.gradle.kts | 2 +- integration-tests/cli/build.gradle.kts | 2 +- integration-tests/gradle/build.gradle.kts | 2 +- integration-tests/maven/build.gradle.kts | 2 +- kotlin-analysis/build.gradle.kts | 4 +- .../compiler-dependency/build.gradle.kts | 4 +- .../intellij-dependency/build.gradle.kts | 4 +- plugins/all-modules-page/build.gradle.kts | 4 +- plugins/android-documentation/build.gradle.kts | 4 +- plugins/base/base-test-utils/build.gradle.kts | 4 +- plugins/base/build.gradle.kts | 4 +- plugins/gfm/build.gradle.kts | 4 +- .../gfm/gfm-template-processing/build.gradle.kts | 4 +- plugins/javadoc/build.gradle.kts | 4 +- plugins/jekyll/build.gradle.kts | 4 +- .../jekyll-template-processing/build.gradle.kts | 4 +- plugins/kotlin-as-java/build.gradle.kts | 4 +- plugins/mathjax/build.gradle.kts | 4 +- plugins/templating/build.gradle.kts | 4 +- plugins/versioning/build.gradle.kts | 4 +- runners/cli/build.gradle.kts | 4 +- runners/gradle-plugin/build.gradle.kts | 4 +- runners/maven-plugin/build.gradle.kts | 4 +- settings.gradle.kts | 1 + test-utils/build.gradle.kts | 2 +- 64 files changed, 759 insertions(+), 752 deletions(-) create mode 100644 build-logic/README.md create mode 100644 build-logic/build.gradle.kts create mode 100644 build-logic/settings.gradle.kts create mode 100644 build-logic/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/SetupMaven.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts create mode 100644 build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts create mode 100644 build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts create mode 100644 build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts create mode 100644 build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts create mode 100644 build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts create mode 100644 build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/publication.kt create mode 100644 build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt delete mode 100644 buildSrc/build.gradle.kts delete mode 100644 buildSrc/settings.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/SetupMaven.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/projectUtils.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/publication.kt delete mode 100644 buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt diff --git a/build-logic/README.md b/build-logic/README.md new file mode 100644 index 00000000..e8d18cbd --- /dev/null +++ b/build-logic/README.md @@ -0,0 +1,7 @@ +# About build-logic Module + +This module aims to share common build logic for whole projects, previously we were using [buildSrc](https://docs.gradle.org/7.6/userguide/organizing_gradle_projects.html#sec:build_sources), +but for some reasons like "A change in buildSrc causes the whole project to become out-of-date", we are migrating to [composite builds](https://docs.gradle.org/7.6/userguide/composite_builds.html), +which avoids the side effects of buildSrc. + +For more information, you can ref https://proandroiddev.com/stop-using-gradle-buildsrc-use-composite-builds-instead-3c38ac7a2ab3. \ No newline at end of file diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 00000000..0c054c5c --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,31 @@ +import java.util.* + +plugins { + `kotlin-dsl` +} + +kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + +// TODO define versions in Gradle Version Catalog https://github.com/Kotlin/dokka/pull/2884 +val properties = file("../gradle.properties").inputStream().use { + Properties().apply { load(it) } +} + +val kotlinVersion = properties["kotlin_version"] + +dependencies { + // Import Gradle Plugins that will be used in the buildSrc pre-compiled script plugins, and any `build.gradle.kts` + // files in the project. + // Use their Maven coordinates (plus versions), not Gradle plugin IDs! + // This should be the only place that Gradle plugin versions are defined, so they are aligned across all build scripts + + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + implementation("gradle.plugin.com.github.johnrengelman:shadow:7.1.2") + implementation("org.jetbrains.kotlinx:binary-compatibility-validator:0.12.1") + implementation("io.github.gradle-nexus:publish-plugin:1.1.0") + implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.8.10") +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 00000000..55dfe5c1 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "build-logic" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + google() + gradlePluginPortal() + } +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt b/build-logic/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt new file mode 100644 index 00000000..715dde2f --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt @@ -0,0 +1,63 @@ +package org.jetbrains + +import org.gradle.api.tasks.AbstractExecTask +import org.gradle.internal.os.OperatingSystem +import java.io.File +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths + +open class CrossPlatformExec : AbstractExecTask(CrossPlatformExec::class.java) { + private val windowsExtensions = listOf(".bat", ".cmd", ".exe") + private val unixExtensions = listOf("", ".sh") + + private val isWindows = OperatingSystem.current().isWindows + + override fun exec() { + val commandLine: MutableList = this.commandLine + + if (commandLine.isNotEmpty()) { + commandLine[0] = findCommand(commandLine[0]) + } + + if (isWindows && commandLine.isNotEmpty() && commandLine[0].isNotBlank()) { + this.commandLine = listOf("cmd", "/c") + commandLine + } else { + this.commandLine = commandLine + } + + super.exec() + } + + private fun findCommand(command: String): String { + val normalizedCommand = normalizeCommandPaths(command) + val extensions = if (isWindows) windowsExtensions else unixExtensions + + return extensions.map { extension -> + resolveCommandFromFile(Paths.get("$normalizedCommand$extension")) + }.firstOrNull { it.isNotBlank() } ?: normalizedCommand + } + + private fun resolveCommandFromFile(commandFile: Path) = + if (!Files.isExecutable(commandFile)) { + "" + } else { + commandFile.toAbsolutePath().normalize().toString() + } + + + private fun normalizeCommandPaths(command: String): String { + // need to escape backslash so it works with regex + val backslashSeparator = "\\" + val forwardSlashSeparator = "/" + + // get the actual separator + val separator = if (File.separatorChar == '\\') backslashSeparator else File.separator + + return command + // first replace all of the backslashes with forward slashes + .replace(backslashSeparator, forwardSlashSeparator) + // then replace all forward slashes with whatever the separator actually is + .replace(forwardSlashSeparator, separator) + } +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt b/build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt new file mode 100644 index 00000000..03f607e8 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt @@ -0,0 +1,62 @@ +@file:Suppress("LocalVariableName") + +package org.jetbrains + +import org.gradle.api.Project + +enum class DokkaPublicationChannel { + SPACE_DOKKA_DEV, + MAVEN_CENTRAL, + MAVEN_CENTRAL_SNAPSHOT, + GRADLE_PLUGIN_PORTAL; + + val acceptedDokkaVersionTypes: List + get() = when(this) { + MAVEN_CENTRAL -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC) + MAVEN_CENTRAL_SNAPSHOT -> listOf(DokkaVersionType.SNAPSHOT) + SPACE_DOKKA_DEV -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC, DokkaVersionType.DEV, DokkaVersionType.SNAPSHOT) + GRADLE_PLUGIN_PORTAL -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC) + } + + fun isSpaceRepository() = this == SPACE_DOKKA_DEV + + fun isMavenRepository() = this == MAVEN_CENTRAL || this == MAVEN_CENTRAL_SNAPSHOT + + fun isGradlePluginPortal() = this == GRADLE_PLUGIN_PORTAL + + companion object { + fun fromPropertyString(value: String): DokkaPublicationChannel = when (value) { + "space-dokka-dev" -> SPACE_DOKKA_DEV + "maven-central-release" -> MAVEN_CENTRAL + "maven-central-snapshot" -> MAVEN_CENTRAL_SNAPSHOT + "gradle-plugin-portal" -> GRADLE_PLUGIN_PORTAL + else -> throw IllegalArgumentException("Unknown dokka_publication_channel=$value") + } + } +} + +val Project.publicationChannels: Set + get() { + val publicationChannel = this.properties["dokka_publication_channel"]?.toString() + val publicationChannels = this.properties["dokka_publication_channels"]?.toString() + if (publicationChannel != null && publicationChannels != null) { + throw IllegalArgumentException( + "Only one of dokka_publication_channel and dokka_publication_channel*s* can be set. Found: \n" + + "dokka_publication_channel=$publicationChannel\n" + + "dokka_publication_channels=$publicationChannels" + ) + } + + if (publicationChannel != null) { + return setOf(DokkaPublicationChannel.fromPropertyString(publicationChannel)) + } + + if (publicationChannels != null) { + return publicationChannels.split("&").map { channel -> + DokkaPublicationChannel.fromPropertyString(channel) + }.toSet() + } + + return emptySet() + } + diff --git a/build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt new file mode 100644 index 00000000..517c7731 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt @@ -0,0 +1,19 @@ +package org.jetbrains + +import org.gradle.api.Project +import org.gradle.kotlin.dsl.extra +import org.gradle.kotlin.dsl.provideDelegate + +@Suppress("LocalVariableName") // property name with underscore as taken from gradle.properties +fun Project.configureDokkaVersion(): String { + val dokka_version: String? by this.extra + return checkNotNull(dokka_version) +} + +val Project.dokkaVersion: String + get() = configureDokkaVersion() + +val Project.dokkaVersionType: DokkaVersionType? + get() = DokkaVersionType.values().find { + it.suffix.matches(dokkaVersion.substringAfter("-", "")) + } diff --git a/build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt b/build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt new file mode 100644 index 00000000..077cd854 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt @@ -0,0 +1,8 @@ +package org.jetbrains + +enum class DokkaVersionType(val suffix: Regex) { + RELEASE("^$".toRegex()), + RC("RC\\d?".toRegex()), + SNAPSHOT("SNAPSHOT".toRegex()), + DEV("dev-\\d+".toRegex()); +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/SetupMaven.kt b/build-logic/src/main/kotlin/org/jetbrains/SetupMaven.kt new file mode 100644 index 00000000..a1b59a50 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/SetupMaven.kt @@ -0,0 +1,45 @@ +package org.jetbrains + +import org.gradle.api.artifacts.Configuration +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Sync +import org.gradle.kotlin.dsl.creating +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getValue +import java.io.File + +@Suppress("LeakingThis") +open class SetupMaven : Sync() { + @get:Input + var mavenVersion = "3.5.0" + + @get:Input + var mavenPluginToolsVersion = "3.5.2" + + @get:Internal + val mavenBuildDir = "${project.buildDir}/maven" + + @get:Internal + val mavenBinDir = "${project.buildDir}/maven-bin" + + @get:Internal + val mvn = File(mavenBinDir, "apache-maven-$mavenVersion/bin/mvn") + + private val mavenBinaryConfiguration: Configuration by project.configurations.creating { + project.dependencies { + this@creating.invoke( + group = "org.apache.maven", + name = "apache-maven", + version = mavenVersion, + classifier = "bin", ext = "zip" + ) + } + } + + init { + from(mavenBinaryConfiguration.map { file -> project.zipTree(file) }) + into(mavenBinDir) + } + +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt b/build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt new file mode 100644 index 00000000..af35a847 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt @@ -0,0 +1,79 @@ +package org.jetbrains + +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.Project +import org.gradle.api.artifacts.Dependency +import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.findByType + +open class ValidatePublications : DefaultTask() { + + init { + group = "verification" + project.tasks.named("check") { + dependsOn(this@ValidatePublications) + } + } + + @TaskAction + fun validatePublicationConfiguration() { + project.subprojects.forEach { subProject -> + val publishing = subProject.extensions.findByType() ?: return@forEach + publishing.publications + .filterIsInstance() + .filter { it.version == project.dokkaVersion } + .forEach { _ -> + checkProjectDependenciesArePublished(subProject) + subProject.assertPublicationVersion() + } + } + } + + private fun checkProjectDependenciesArePublished(project: Project) { + val implementationDependencies = project.findDependenciesByName("implementation") + val apiDependencies = project.findDependenciesByName("api") + + val allDependencies = implementationDependencies + apiDependencies + + allDependencies + .filterIsInstance() + .forEach { projectDependency -> + val publishing = projectDependency.dependencyProject.extensions.findByType() + ?: throw UnpublishedProjectDependencyException( + project = project, dependencyProject = projectDependency.dependencyProject + ) + + val isPublished = publishing.publications.filterIsInstance() + .any { it.version == project.dokkaVersion } + + if (!isPublished) { + throw UnpublishedProjectDependencyException(project, projectDependency.dependencyProject) + } + } + } + + private fun Project.findDependenciesByName(name: String): Set { + return configurations.findByName(name)?.allDependencies.orEmpty() + } + + private fun Project.assertPublicationVersion() { + val versionTypeMatchesPublicationChannels = publicationChannels.all { publicationChannel -> + publicationChannel.acceptedDokkaVersionTypes.any { acceptedVersionType -> + acceptedVersionType == dokkaVersionType + } + } + if (!versionTypeMatchesPublicationChannels) { + throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels") + } + } + + private class UnpublishedProjectDependencyException( + project: Project, dependencyProject: Project + ): GradleException( + "Published project ${project.path} cannot depend on unpublished project ${dependencyProject.path}" + ) +} 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 new file mode 100644 index 00000000..2073f9a2 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -0,0 +1,22 @@ +package org.jetbrains.conventions + +/** + * Base configuration for Java projects. + * + * This convention plugin contains shared Java config for both the [KotlinJvmPlugin] convention plugin and + * the Gradle Plugin subproject (which cannot have the `kotlin("jvm")` plugin applied). + */ + +plugins { + java +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + +java { + withSourcesJar() +} 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 new file mode 100644 index 00000000..c4352d16 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts @@ -0,0 +1,12 @@ +package org.jetbrains.conventions + +plugins { + base +} + +// common Gradle configuration that should be applied to all projects + +if (project != rootProject) { + project.group = rootProject.group + project.version = rootProject.version +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts new file mode 100644 index 00000000..f9edb68e --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts @@ -0,0 +1,75 @@ +package org.jetbrains.conventions + +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.api.tasks.testing.logging.TestLogEvent + +plugins { + id("org.jetbrains.conventions.kotlin-jvm") +} + +val integrationTestSourceSet: SourceSet = sourceSets.create("integrationTest") { + compileClasspath += sourceSets.main.get().output + runtimeClasspath += sourceSets.main.get().output +} + +val integrationTestImplementation: Configuration by configurations.getting { + extendsFrom(configurations.implementation.get()) +} + +val integrationTestRuntimeOnly: Configuration by configurations.getting { + extendsFrom(configurations.runtimeOnly.get()) +} + +/** + * Dokka's integration test task is not cacheable because the HTML outputs + * it produces when running the tests are used for showcasing resulting documentation, + * which does not work well with caching. + * + * At the moment there are two problems that do not allow to make it cacheable: + * + * 1. The task's inputs are such that changes in Dokka's code do not invalidate the cache, + * because it is run with the same version of Dokka (`"DOKKA_VERSION"`) on the same + * test project inputs. + * 2. The tests generate HTML output which is then used to showcase documentation. + * The outputs are usually copied to a location from which it will be served. + * However, if the test is cacheable, it produces no outputs, so no documentation + * to showcase. It needs to be broken into two separate tasks: one cacheable for running + * the tests and producing HTML output, and another non-cacheable for copying the output. + * + * @see [org.jetbrains.dokka.it.TestOutputCopier] for more details on showcasing documentation + */ +@DisableCachingByDefault(because = "Contains incorrect inputs/outputs configuration, see the KDoc for details") +abstract class NonCacheableIntegrationTest : Test() + +val integrationTest by tasks.registering(NonCacheableIntegrationTest::class) { + maxHeapSize = "2G" + description = "Runs integration tests." + group = "verification" + useJUnit() + + testClassesDirs = integrationTestSourceSet.output.classesDirs + classpath = integrationTestSourceSet.runtimeClasspath + + setForkEvery(1) + project.properties["dokka_integration_test_parallelism"]?.toString()?.toIntOrNull()?.let { parallelism -> + maxParallelForks = parallelism + } + environment( + "isExhaustive", + project.properties["dokka_integration_test_is_exhaustive"]?.toString()?.toBoolean() + ?: System.getenv("DOKKA_INTEGRATION_TEST_IS_EXHAUSTIVE")?.toBoolean() + ?: false.toString() + ) + + testLogging { + exceptionFormat = TestExceptionFormat.FULL + events(TestLogEvent.SKIPPED, TestLogEvent.FAILED) + showExceptions = true + showCauses = true + showStackTraces = true + } +} + +tasks.check { + dependsOn(integrationTest) +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts new file mode 100644 index 00000000..9a193cbb --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts @@ -0,0 +1,13 @@ +package org.jetbrains.conventions + +import org.gradle.kotlin.dsl.invoke +import org.jetbrains.isLocalPublication + +plugins { + id("org.jetbrains.dokka") +} + +tasks.dokkaHtml { + onlyIf { !isLocalPublication } + outputDirectory.set(layout.buildDirectory.dir("dokka").map { it.asFile }) +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts new file mode 100644 index 00000000..c40ce57c --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts @@ -0,0 +1,32 @@ +package org.jetbrains.conventions + +import org.jetbrains.configureDokkaVersion +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id("org.jetbrains.conventions.base") + id("org.jetbrains.conventions.base-java") + kotlin("jvm") +} + +configureDokkaVersion() + +val language_version: String by project + +tasks.withType().configureEach { + compilerOptions { + freeCompilerArgs.addAll( + listOf( + "-opt-in=kotlin.RequiresOptIn", + "-Xjsr305=strict", + "-Xskip-metadata-version-check", + // need 1.4 support, otherwise there might be problems with Gradle 6.x (it's bundling Kotlin 1.4) + "-Xsuppress-version-warnings" + ) + ) + allWarningsAsErrors.set(true) + languageVersion.set(KotlinVersion.fromVersion(language_version)) + apiVersion.set(KotlinVersion.fromVersion(language_version)) + } +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts new file mode 100644 index 00000000..7007fd9e --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts @@ -0,0 +1,30 @@ +package org.jetbrains.conventions + +plugins { + id("org.jetbrains.conventions.base") + `maven-publish` + signing + id("org.jetbrains.conventions.dokka") +} + +val javadocJar by tasks.registering(Jar::class) { + group = JavaBasePlugin.DOCUMENTATION_GROUP + description = "Assembles a Javadoc JAR using Dokka HTML" + archiveClassifier.set("javadoc") + from(tasks.dokkaHtml) +} + +publishing { + repositories { + // Publish to a project-local Maven directory, for verification. To test, run: + // ./gradlew publishAllPublicationsToMavenProjectLocalRepository + // and check $rootDir/build/maven-project-local + maven(rootProject.layout.buildDirectory.dir("maven-project-local")) { + name = "MavenProjectLocal" + } + } + + publications.withType().configureEach { + artifact(javadocJar) + } +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt b/build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt new file mode 100644 index 00000000..46d803a5 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt @@ -0,0 +1,16 @@ +package org.jetbrains + +import org.gradle.api.Project + +fun Project.whenEvaluated(action: Project.() -> Unit) { + if (state.executed) { + action() + } else { + afterEvaluate { action() } + } +} + +fun Project.invokeWhenEvaluated(action: (project: Project) -> Unit) { + whenEvaluated { action(this) } +} + diff --git a/build-logic/src/main/kotlin/org/jetbrains/publication.kt b/build-logic/src/main/kotlin/org/jetbrains/publication.kt new file mode 100644 index 00000000..60d91c33 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/publication.kt @@ -0,0 +1,152 @@ +package org.jetbrains + +import com.github.jengelman.gradle.plugins.shadow.ShadowExtension +import org.gradle.api.Project +import org.gradle.api.plugins.JavaBasePlugin +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.publish.maven.tasks.PublishToMavenRepository +import org.gradle.api.tasks.TaskContainer +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.* +import org.gradle.plugins.signing.SigningExtension +import org.jetbrains.DokkaPublicationChannel.* +import java.net.URI + +class DokkaPublicationBuilder { + enum class Component { + Java, Shadow + } + + var artifactId: String? = null + var component: Component = Component.Java +} + + +fun Project.registerDokkaArtifactPublication(publicationName: String, configure: DokkaPublicationBuilder.() -> Unit) { + configure { + publications { + register(publicationName) { + val builder = DokkaPublicationBuilder().apply(configure) + artifactId = builder.artifactId + when (builder.component) { + DokkaPublicationBuilder.Component.Java -> from(components["java"]) + DokkaPublicationBuilder.Component.Shadow -> run { + extensions.getByType(ShadowExtension::class.java).component(this) + artifact(tasks["sourcesJar"]) + } + } + configurePom("Dokka ${project.name}") + } + } + } + + configureSpacePublicationIfNecessary(publicationName) + configureSonatypePublicationIfNecessary(publicationName) + createDokkaPublishTaskIfNecessary() +} + +fun Project.configureSpacePublicationIfNecessary(vararg publications: String) { + if (SPACE_DOKKA_DEV in this.publicationChannels) { + configure { + repositories { + /* already registered */ + findByName(SPACE_DOKKA_DEV.name)?.let { return@repositories } + maven { + name = SPACE_DOKKA_DEV.name + url = URI.create("https://maven.pkg.jetbrains.space/kotlin/p/dokka/dev") + credentials { + username = System.getenv("SPACE_PACKAGES_USER") + password = System.getenv("SPACE_PACKAGES_SECRET") + } + } + } + } + } + + whenEvaluated { + tasks.withType { + if (this.repository.name == SPACE_DOKKA_DEV.name) { + this.isEnabled = this.isEnabled && publication.name in publications + if (!this.isEnabled) { + this.group = "disabled" + } + } + } + } +} + +fun Project.createDokkaPublishTaskIfNecessary() { + tasks.maybeCreate("dokkaPublish").run { + if (publicationChannels.any { it.isSpaceRepository() }) { + dependsOn(tasks.named("publish")) + } + + if (publicationChannels.any { it.isMavenRepository() }) { + dependsOn(tasks.named("publishToSonatype")) + } + + if (publicationChannels.any { it.isGradlePluginPortal() }) { + dependsOn(tasks.named("publishPlugins")) + } + } +} + +fun Project.configureSonatypePublicationIfNecessary(vararg publications: String) { + if (publicationChannels.any { it.isMavenRepository() }) { + signPublicationsIfKeyPresent(*publications) + } +} + +fun MavenPublication.configurePom(projectName: String) { + pom { + name.set(projectName) + description.set("Dokka is an API documentation engine for Kotlin and Java, performing the same function as Javadoc for Java") + url.set("https://github.com/Kotlin/dokka") + + licenses { + license { + name.set("The Apache Software License, Version 2.0") + url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") + distribution.set("repo") + } + } + + developers { + developer { + id.set("JetBrains") + name.set("JetBrains Team") + organization.set("JetBrains") + organizationUrl.set("http://www.jetbrains.com") + } + } + + scm { + connection.set("scm:git:git://github.com/Kotlin/dokka.git") + url.set("https://github.com/Kotlin/dokka/tree/master") + } + } +} + +@Suppress("UnstableApiUsage") +private fun Project.signPublicationsIfKeyPresent(vararg publications: String) { + val signingKeyId: String? = System.getenv("SIGN_KEY_ID") + val signingKey: String? = System.getenv("SIGN_KEY") + val signingKeyPassphrase: String? = System.getenv("SIGN_KEY_PASSPHRASE") + + if (!signingKey.isNullOrBlank()) { + extensions.configure("signing") { + if (signingKeyId?.isNotBlank() == true) { + useInMemoryPgpKeys(signingKeyId, signingKey, signingKeyPassphrase) + } else { + useInMemoryPgpKeys(signingKey, signingKeyPassphrase) + } + publications.forEach { publicationName -> + extensions.findByType(PublishingExtension::class)!!.publications.findByName(publicationName)?.let { + sign(it) + } + } + } + } +} diff --git a/build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt b/build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt new file mode 100644 index 00000000..261d1663 --- /dev/null +++ b/build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt @@ -0,0 +1,22 @@ +package org.jetbrains + +import org.gradle.api.Project +import org.gradle.api.Task + +fun Task.dependsOnMavenLocalPublication() { + project.rootProject.allprojects.forEach { otherProject -> + otherProject.invokeWhenEvaluated { evaluatedProject -> + evaluatedProject.tasks.findByName("publishToMavenLocal")?.let { publishingTask -> + this.dependsOn(publishingTask) + } + } + } +} + +val Project.isLocalPublication: Boolean + get() = gradle.startParameter.taskNames.any { + it.endsWith("publishToMavenLocal", ignoreCase = true) || + it.endsWith("integrationTest", ignoreCase = true) || + it.endsWith("check", ignoreCase = true) || + it.endsWith("test", ignoreCase = true) + } diff --git a/build.gradle.kts b/build.gradle.kts index 08373920..76067b75 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,11 +2,11 @@ import org.jetbrains.ValidatePublications import org.jetbrains.publicationChannels plugins { - org.jetbrains.conventions.base - id("org.jetbrains.dokka") - id("io.github.gradle-nexus.publish-plugin") - - id("org.jetbrains.kotlinx.binary-compatibility-validator") + id("org.jetbrains.conventions.base") apply false + id("org.jetbrains.dokka") version "1.8.10" + id("io.github.gradle-nexus.publish-plugin") version "1.1.0" + id("com.gradle.plugin-publish") version "0.20.0" + id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.12.1" } val dokka_version: String by project diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index 00733d64..00000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,32 +0,0 @@ -import java.util.* - -plugins { - `kotlin-dsl` -} - -kotlin { - jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(8)) - } -} - -// TODO define versions in Gradle Version Catalog https://github.com/Kotlin/dokka/pull/2884 -val properties = file("../gradle.properties").inputStream().use { - Properties().apply { load(it) } -} - -val kotlinVersion = properties["kotlin_version"] - -dependencies { - // Import Gradle Plugins that will be used in the buildSrc pre-compiled script plugins, and any `build.gradle.kts` - // files in the project. - // Use their Maven coordinates (plus versions), not Gradle plugin IDs! - // This should be the only place that Gradle plugin versions are defined, so they are aligned across all build scripts - - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - implementation("gradle.plugin.com.github.johnrengelman:shadow:7.1.2") - implementation("org.jetbrains.kotlinx:binary-compatibility-validator:0.12.1") - implementation("io.github.gradle-nexus:publish-plugin:1.1.0") - implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.8.10") - implementation("com.gradle.publish:plugin-publish-plugin:0.20.0") -} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts deleted file mode 100644 index 2144de34..00000000 --- a/buildSrc/settings.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -rootProject.name = "buildSrc" - -pluginManagement { - repositories { - gradlePluginPortal() - mavenCentral() - } -} - -@Suppress("UnstableApiUsage") -dependencyResolutionManagement { - repositories { - mavenCentral() - google() - gradlePluginPortal() - } -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt b/buildSrc/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt deleted file mode 100644 index 715dde2f..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/CrossPlatformExec.kt +++ /dev/null @@ -1,63 +0,0 @@ -package org.jetbrains - -import org.gradle.api.tasks.AbstractExecTask -import org.gradle.internal.os.OperatingSystem -import java.io.File -import java.nio.file.Files -import java.nio.file.Path -import java.nio.file.Paths - -open class CrossPlatformExec : AbstractExecTask(CrossPlatformExec::class.java) { - private val windowsExtensions = listOf(".bat", ".cmd", ".exe") - private val unixExtensions = listOf("", ".sh") - - private val isWindows = OperatingSystem.current().isWindows - - override fun exec() { - val commandLine: MutableList = this.commandLine - - if (commandLine.isNotEmpty()) { - commandLine[0] = findCommand(commandLine[0]) - } - - if (isWindows && commandLine.isNotEmpty() && commandLine[0].isNotBlank()) { - this.commandLine = listOf("cmd", "/c") + commandLine - } else { - this.commandLine = commandLine - } - - super.exec() - } - - private fun findCommand(command: String): String { - val normalizedCommand = normalizeCommandPaths(command) - val extensions = if (isWindows) windowsExtensions else unixExtensions - - return extensions.map { extension -> - resolveCommandFromFile(Paths.get("$normalizedCommand$extension")) - }.firstOrNull { it.isNotBlank() } ?: normalizedCommand - } - - private fun resolveCommandFromFile(commandFile: Path) = - if (!Files.isExecutable(commandFile)) { - "" - } else { - commandFile.toAbsolutePath().normalize().toString() - } - - - private fun normalizeCommandPaths(command: String): String { - // need to escape backslash so it works with regex - val backslashSeparator = "\\" - val forwardSlashSeparator = "/" - - // get the actual separator - val separator = if (File.separatorChar == '\\') backslashSeparator else File.separator - - return command - // first replace all of the backslashes with forward slashes - .replace(backslashSeparator, forwardSlashSeparator) - // then replace all forward slashes with whatever the separator actually is - .replace(forwardSlashSeparator, separator) - } -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt deleted file mode 100644 index 03f607e8..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt +++ /dev/null @@ -1,62 +0,0 @@ -@file:Suppress("LocalVariableName") - -package org.jetbrains - -import org.gradle.api.Project - -enum class DokkaPublicationChannel { - SPACE_DOKKA_DEV, - MAVEN_CENTRAL, - MAVEN_CENTRAL_SNAPSHOT, - GRADLE_PLUGIN_PORTAL; - - val acceptedDokkaVersionTypes: List - get() = when(this) { - MAVEN_CENTRAL -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC) - MAVEN_CENTRAL_SNAPSHOT -> listOf(DokkaVersionType.SNAPSHOT) - SPACE_DOKKA_DEV -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC, DokkaVersionType.DEV, DokkaVersionType.SNAPSHOT) - GRADLE_PLUGIN_PORTAL -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC) - } - - fun isSpaceRepository() = this == SPACE_DOKKA_DEV - - fun isMavenRepository() = this == MAVEN_CENTRAL || this == MAVEN_CENTRAL_SNAPSHOT - - fun isGradlePluginPortal() = this == GRADLE_PLUGIN_PORTAL - - companion object { - fun fromPropertyString(value: String): DokkaPublicationChannel = when (value) { - "space-dokka-dev" -> SPACE_DOKKA_DEV - "maven-central-release" -> MAVEN_CENTRAL - "maven-central-snapshot" -> MAVEN_CENTRAL_SNAPSHOT - "gradle-plugin-portal" -> GRADLE_PLUGIN_PORTAL - else -> throw IllegalArgumentException("Unknown dokka_publication_channel=$value") - } - } -} - -val Project.publicationChannels: Set - get() { - val publicationChannel = this.properties["dokka_publication_channel"]?.toString() - val publicationChannels = this.properties["dokka_publication_channels"]?.toString() - if (publicationChannel != null && publicationChannels != null) { - throw IllegalArgumentException( - "Only one of dokka_publication_channel and dokka_publication_channel*s* can be set. Found: \n" + - "dokka_publication_channel=$publicationChannel\n" + - "dokka_publication_channels=$publicationChannels" - ) - } - - if (publicationChannel != null) { - return setOf(DokkaPublicationChannel.fromPropertyString(publicationChannel)) - } - - if (publicationChannels != null) { - return publicationChannels.split("&").map { channel -> - DokkaPublicationChannel.fromPropertyString(channel) - }.toSet() - } - - return emptySet() - } - diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt deleted file mode 100644 index 517c7731..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.jetbrains - -import org.gradle.api.Project -import org.gradle.kotlin.dsl.extra -import org.gradle.kotlin.dsl.provideDelegate - -@Suppress("LocalVariableName") // property name with underscore as taken from gradle.properties -fun Project.configureDokkaVersion(): String { - val dokka_version: String? by this.extra - return checkNotNull(dokka_version) -} - -val Project.dokkaVersion: String - get() = configureDokkaVersion() - -val Project.dokkaVersionType: DokkaVersionType? - get() = DokkaVersionType.values().find { - it.suffix.matches(dokkaVersion.substringAfter("-", "")) - } diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt deleted file mode 100644 index 077cd854..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.jetbrains - -enum class DokkaVersionType(val suffix: Regex) { - RELEASE("^$".toRegex()), - RC("RC\\d?".toRegex()), - SNAPSHOT("SNAPSHOT".toRegex()), - DEV("dev-\\d+".toRegex()); -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/SetupMaven.kt b/buildSrc/src/main/kotlin/org/jetbrains/SetupMaven.kt deleted file mode 100644 index a1b59a50..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/SetupMaven.kt +++ /dev/null @@ -1,45 +0,0 @@ -package org.jetbrains - -import org.gradle.api.artifacts.Configuration -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.Sync -import org.gradle.kotlin.dsl.creating -import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.getValue -import java.io.File - -@Suppress("LeakingThis") -open class SetupMaven : Sync() { - @get:Input - var mavenVersion = "3.5.0" - - @get:Input - var mavenPluginToolsVersion = "3.5.2" - - @get:Internal - val mavenBuildDir = "${project.buildDir}/maven" - - @get:Internal - val mavenBinDir = "${project.buildDir}/maven-bin" - - @get:Internal - val mvn = File(mavenBinDir, "apache-maven-$mavenVersion/bin/mvn") - - private val mavenBinaryConfiguration: Configuration by project.configurations.creating { - project.dependencies { - this@creating.invoke( - group = "org.apache.maven", - name = "apache-maven", - version = mavenVersion, - classifier = "bin", ext = "zip" - ) - } - } - - init { - from(mavenBinaryConfiguration.map { file -> project.zipTree(file) }) - into(mavenBinDir) - } - -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt deleted file mode 100644 index af35a847..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt +++ /dev/null @@ -1,79 +0,0 @@ -package org.jetbrains - -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.Project -import org.gradle.api.artifacts.Dependency -import org.gradle.api.artifacts.ProjectDependency -import org.gradle.api.publish.PublishingExtension -import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.tasks.TaskAction -import org.gradle.kotlin.dsl.findByType - -open class ValidatePublications : DefaultTask() { - - init { - group = "verification" - project.tasks.named("check") { - dependsOn(this@ValidatePublications) - } - } - - @TaskAction - fun validatePublicationConfiguration() { - project.subprojects.forEach { subProject -> - val publishing = subProject.extensions.findByType() ?: return@forEach - publishing.publications - .filterIsInstance() - .filter { it.version == project.dokkaVersion } - .forEach { _ -> - checkProjectDependenciesArePublished(subProject) - subProject.assertPublicationVersion() - } - } - } - - private fun checkProjectDependenciesArePublished(project: Project) { - val implementationDependencies = project.findDependenciesByName("implementation") - val apiDependencies = project.findDependenciesByName("api") - - val allDependencies = implementationDependencies + apiDependencies - - allDependencies - .filterIsInstance() - .forEach { projectDependency -> - val publishing = projectDependency.dependencyProject.extensions.findByType() - ?: throw UnpublishedProjectDependencyException( - project = project, dependencyProject = projectDependency.dependencyProject - ) - - val isPublished = publishing.publications.filterIsInstance() - .any { it.version == project.dokkaVersion } - - if (!isPublished) { - throw UnpublishedProjectDependencyException(project, projectDependency.dependencyProject) - } - } - } - - private fun Project.findDependenciesByName(name: String): Set { - return configurations.findByName(name)?.allDependencies.orEmpty() - } - - private fun Project.assertPublicationVersion() { - val versionTypeMatchesPublicationChannels = publicationChannels.all { publicationChannel -> - publicationChannel.acceptedDokkaVersionTypes.any { acceptedVersionType -> - acceptedVersionType == dokkaVersionType - } - } - if (!versionTypeMatchesPublicationChannels) { - throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels") - } - } - - private class UnpublishedProjectDependencyException( - project: Project, dependencyProject: Project - ): GradleException( - "Published project ${project.path} cannot depend on unpublished project ${dependencyProject.path}" - ) -} 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 deleted file mode 100644 index 3addac74..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ /dev/null @@ -1,22 +0,0 @@ -package org.jetbrains.conventions - -/** - * Base configuration for Java projects. - * - * This convention plugin contains shared Java config for both the [KotlinJvmPlugin] convention plugin and - * the Gradle Plugin subproject (which cannot have the `kotlin("jvm")` plugin applied). - */ - -plugins { - `java` -} - -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(8)) - } -} - -java { - withSourcesJar() -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts deleted file mode 100644 index c4352d16..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -package org.jetbrains.conventions - -plugins { - base -} - -// common Gradle configuration that should be applied to all projects - -if (project != rootProject) { - project.group = rootProject.group - project.version = rootProject.version -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts deleted file mode 100644 index 612502cd..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts +++ /dev/null @@ -1,75 +0,0 @@ -package org.jetbrains.conventions - -import org.gradle.api.tasks.testing.logging.TestExceptionFormat -import org.gradle.api.tasks.testing.logging.TestLogEvent - -plugins { - id("org.jetbrains.conventions.kotlin-jvm") -} - -val integrationTestSourceSet = sourceSets.create("integrationTest") { - compileClasspath += sourceSets.main.get().output - runtimeClasspath += sourceSets.main.get().output -} - -val integrationTestImplementation by configurations.getting { - extendsFrom(configurations.implementation.get()) -} - -val integrationTestRuntimeOnly by configurations.getting { - extendsFrom(configurations.runtimeOnly.get()) -} - -/** - * Dokka's integration test task is not cacheable because the HTML outputs - * it produces when running the tests are used for showcasing resulting documentation, - * which does not work well with caching. - * - * At the moment there are two problems that do not allow to make it cacheable: - * - * 1. The task's inputs are such that changes in Dokka's code do not invalidate the cache, - * because it is run with the same version of Dokka (`"DOKKA_VERSION"`) on the same - * test project inputs. - * 2. The tests generate HTML output which is then used to showcase documentation. - * The outputs are usually copied to a location from which it will be served. - * However, if the test is cacheable, it produces no outputs, so no documentation - * to showcase. It needs to be broken into two separate tasks: one cacheable for running - * the tests and producing HTML output, and another non-cacheable for copying the output. - * - * @see [org.jetbrains.dokka.it.TestOutputCopier] for more details on showcasing documentation - */ -@DisableCachingByDefault(because = "Contains incorrect inputs/outputs configuration, see the KDoc for details") -abstract class NonCacheableIntegrationTest : Test() - -val integrationTest by tasks.registering(NonCacheableIntegrationTest::class) { - maxHeapSize = "2G" - description = "Runs integration tests." - group = "verification" - useJUnit() - - testClassesDirs = integrationTestSourceSet.output.classesDirs - classpath = integrationTestSourceSet.runtimeClasspath - - setForkEvery(1) - project.properties["dokka_integration_test_parallelism"]?.toString()?.toIntOrNull()?.let { parallelism -> - maxParallelForks = parallelism - } - environment( - "isExhaustive", - project.properties["dokka_integration_test_is_exhaustive"]?.toString()?.toBoolean() - ?: System.getenv("DOKKA_INTEGRATION_TEST_IS_EXHAUSTIVE")?.toBoolean() - ?: false.toString() - ) - - testLogging { - exceptionFormat = TestExceptionFormat.FULL - events(TestLogEvent.SKIPPED, TestLogEvent.FAILED) - showExceptions = true - showCauses = true - showStackTraces = true - } -} - -tasks.check { - dependsOn(integrationTest) -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts deleted file mode 100644 index 9a193cbb..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -package org.jetbrains.conventions - -import org.gradle.kotlin.dsl.invoke -import org.jetbrains.isLocalPublication - -plugins { - id("org.jetbrains.dokka") -} - -tasks.dokkaHtml { - onlyIf { !isLocalPublication } - outputDirectory.set(layout.buildDirectory.dir("dokka").map { it.asFile }) -} 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 deleted file mode 100644 index c40ce57c..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts +++ /dev/null @@ -1,32 +0,0 @@ -package org.jetbrains.conventions - -import org.jetbrains.configureDokkaVersion -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - -plugins { - id("org.jetbrains.conventions.base") - id("org.jetbrains.conventions.base-java") - kotlin("jvm") -} - -configureDokkaVersion() - -val language_version: String by project - -tasks.withType().configureEach { - compilerOptions { - freeCompilerArgs.addAll( - listOf( - "-opt-in=kotlin.RequiresOptIn", - "-Xjsr305=strict", - "-Xskip-metadata-version-check", - // need 1.4 support, otherwise there might be problems with Gradle 6.x (it's bundling Kotlin 1.4) - "-Xsuppress-version-warnings" - ) - ) - allWarningsAsErrors.set(true) - languageVersion.set(KotlinVersion.fromVersion(language_version)) - apiVersion.set(KotlinVersion.fromVersion(language_version)) - } -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts b/buildSrc/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts deleted file mode 100644 index 7007fd9e..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts +++ /dev/null @@ -1,30 +0,0 @@ -package org.jetbrains.conventions - -plugins { - id("org.jetbrains.conventions.base") - `maven-publish` - signing - id("org.jetbrains.conventions.dokka") -} - -val javadocJar by tasks.registering(Jar::class) { - group = JavaBasePlugin.DOCUMENTATION_GROUP - description = "Assembles a Javadoc JAR using Dokka HTML" - archiveClassifier.set("javadoc") - from(tasks.dokkaHtml) -} - -publishing { - repositories { - // Publish to a project-local Maven directory, for verification. To test, run: - // ./gradlew publishAllPublicationsToMavenProjectLocalRepository - // and check $rootDir/build/maven-project-local - maven(rootProject.layout.buildDirectory.dir("maven-project-local")) { - name = "MavenProjectLocal" - } - } - - publications.withType().configureEach { - artifact(javadocJar) - } -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/projectUtils.kt b/buildSrc/src/main/kotlin/org/jetbrains/projectUtils.kt deleted file mode 100644 index 46d803a5..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/projectUtils.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.jetbrains - -import org.gradle.api.Project - -fun Project.whenEvaluated(action: Project.() -> Unit) { - if (state.executed) { - action() - } else { - afterEvaluate { action() } - } -} - -fun Project.invokeWhenEvaluated(action: (project: Project) -> Unit) { - whenEvaluated { action(this) } -} - diff --git a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt deleted file mode 100644 index 60d91c33..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt +++ /dev/null @@ -1,152 +0,0 @@ -package org.jetbrains - -import com.github.jengelman.gradle.plugins.shadow.ShadowExtension -import org.gradle.api.Project -import org.gradle.api.plugins.JavaBasePlugin -import org.gradle.api.publish.PublishingExtension -import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.publish.maven.tasks.PublishToMavenRepository -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.Jar -import org.gradle.kotlin.dsl.* -import org.gradle.plugins.signing.SigningExtension -import org.jetbrains.DokkaPublicationChannel.* -import java.net.URI - -class DokkaPublicationBuilder { - enum class Component { - Java, Shadow - } - - var artifactId: String? = null - var component: Component = Component.Java -} - - -fun Project.registerDokkaArtifactPublication(publicationName: String, configure: DokkaPublicationBuilder.() -> Unit) { - configure { - publications { - register(publicationName) { - val builder = DokkaPublicationBuilder().apply(configure) - artifactId = builder.artifactId - when (builder.component) { - DokkaPublicationBuilder.Component.Java -> from(components["java"]) - DokkaPublicationBuilder.Component.Shadow -> run { - extensions.getByType(ShadowExtension::class.java).component(this) - artifact(tasks["sourcesJar"]) - } - } - configurePom("Dokka ${project.name}") - } - } - } - - configureSpacePublicationIfNecessary(publicationName) - configureSonatypePublicationIfNecessary(publicationName) - createDokkaPublishTaskIfNecessary() -} - -fun Project.configureSpacePublicationIfNecessary(vararg publications: String) { - if (SPACE_DOKKA_DEV in this.publicationChannels) { - configure { - repositories { - /* already registered */ - findByName(SPACE_DOKKA_DEV.name)?.let { return@repositories } - maven { - name = SPACE_DOKKA_DEV.name - url = URI.create("https://maven.pkg.jetbrains.space/kotlin/p/dokka/dev") - credentials { - username = System.getenv("SPACE_PACKAGES_USER") - password = System.getenv("SPACE_PACKAGES_SECRET") - } - } - } - } - } - - whenEvaluated { - tasks.withType { - if (this.repository.name == SPACE_DOKKA_DEV.name) { - this.isEnabled = this.isEnabled && publication.name in publications - if (!this.isEnabled) { - this.group = "disabled" - } - } - } - } -} - -fun Project.createDokkaPublishTaskIfNecessary() { - tasks.maybeCreate("dokkaPublish").run { - if (publicationChannels.any { it.isSpaceRepository() }) { - dependsOn(tasks.named("publish")) - } - - if (publicationChannels.any { it.isMavenRepository() }) { - dependsOn(tasks.named("publishToSonatype")) - } - - if (publicationChannels.any { it.isGradlePluginPortal() }) { - dependsOn(tasks.named("publishPlugins")) - } - } -} - -fun Project.configureSonatypePublicationIfNecessary(vararg publications: String) { - if (publicationChannels.any { it.isMavenRepository() }) { - signPublicationsIfKeyPresent(*publications) - } -} - -fun MavenPublication.configurePom(projectName: String) { - pom { - name.set(projectName) - description.set("Dokka is an API documentation engine for Kotlin and Java, performing the same function as Javadoc for Java") - url.set("https://github.com/Kotlin/dokka") - - licenses { - license { - name.set("The Apache Software License, Version 2.0") - url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") - distribution.set("repo") - } - } - - developers { - developer { - id.set("JetBrains") - name.set("JetBrains Team") - organization.set("JetBrains") - organizationUrl.set("http://www.jetbrains.com") - } - } - - scm { - connection.set("scm:git:git://github.com/Kotlin/dokka.git") - url.set("https://github.com/Kotlin/dokka/tree/master") - } - } -} - -@Suppress("UnstableApiUsage") -private fun Project.signPublicationsIfKeyPresent(vararg publications: String) { - val signingKeyId: String? = System.getenv("SIGN_KEY_ID") - val signingKey: String? = System.getenv("SIGN_KEY") - val signingKeyPassphrase: String? = System.getenv("SIGN_KEY_PASSPHRASE") - - if (!signingKey.isNullOrBlank()) { - extensions.configure("signing") { - if (signingKeyId?.isNotBlank() == true) { - useInMemoryPgpKeys(signingKeyId, signingKey, signingKeyPassphrase) - } else { - useInMemoryPgpKeys(signingKey, signingKeyPassphrase) - } - publications.forEach { publicationName -> - extensions.findByType(PublishingExtension::class)!!.publications.findByName(publicationName)?.let { - sign(it) - } - } - } - } -} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt b/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt deleted file mode 100644 index 261d1663..00000000 --- a/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.jetbrains - -import org.gradle.api.Project -import org.gradle.api.Task - -fun Task.dependsOnMavenLocalPublication() { - project.rootProject.allprojects.forEach { otherProject -> - otherProject.invokeWhenEvaluated { evaluatedProject -> - evaluatedProject.tasks.findByName("publishToMavenLocal")?.let { publishingTask -> - this.dependsOn(publishingTask) - } - } - } -} - -val Project.isLocalPublication: Boolean - get() = gradle.startParameter.taskNames.any { - it.endsWith("publishToMavenLocal", ignoreCase = true) || - it.endsWith("integrationTest", ignoreCase = true) || - it.endsWith("check", ignoreCase = true) || - it.endsWith("test", ignoreCase = true) - } diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 1d7c1f17..a59bb0a5 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -2,8 +2,8 @@ import org.jetbrains.dokkaVersion import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/core/content-matcher-test-utils/build.gradle.kts b/core/content-matcher-test-utils/build.gradle.kts index 1a95f1cd..4ddba0fb 100644 --- a/core/content-matcher-test-utils/build.gradle.kts +++ b/core/content-matcher-test-utils/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - org.jetbrains.conventions.`kotlin-jvm` + id("org.jetbrains.conventions.kotlin-jvm") } dependencies { diff --git a/core/test-api/build.gradle.kts b/core/test-api/build.gradle.kts index b3f57010..b9137009 100644 --- a/core/test-api/build.gradle.kts +++ b/core/test-api/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/integration-tests/build.gradle.kts b/integration-tests/build.gradle.kts index 80c07b37..fd1d7746 100644 --- a/integration-tests/build.gradle.kts +++ b/integration-tests/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - org.jetbrains.conventions.`kotlin-jvm` + id("org.jetbrains.conventions.kotlin-jvm") } dependencies { diff --git a/integration-tests/cli/build.gradle.kts b/integration-tests/cli/build.gradle.kts index 71d36a9b..c0cb46ee 100644 --- a/integration-tests/cli/build.gradle.kts +++ b/integration-tests/cli/build.gradle.kts @@ -1,7 +1,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { - org.jetbrains.conventions.`dokka-integration-test` + id("org.jetbrains.conventions.dokka-integration-test") id("com.github.johnrengelman.shadow") } diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index 3f3be54b..f47ef670 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.dependsOnMavenLocalPublication plugins { - org.jetbrains.conventions.`dokka-integration-test` + id("org.jetbrains.conventions.dokka-integration-test") } dependencies { diff --git a/integration-tests/maven/build.gradle.kts b/integration-tests/maven/build.gradle.kts index 0a2cb7c4..4b8b6011 100644 --- a/integration-tests/maven/build.gradle.kts +++ b/integration-tests/maven/build.gradle.kts @@ -2,7 +2,7 @@ import org.jetbrains.SetupMaven import org.jetbrains.dependsOnMavenLocalPublication plugins { - org.jetbrains.conventions.`dokka-integration-test` + id("org.jetbrains.conventions.dokka-integration-test") } evaluationDependsOn(":runners:maven-plugin") diff --git a/kotlin-analysis/build.gradle.kts b/kotlin-analysis/build.gradle.kts index e2cb50e0..36dc58c4 100644 --- a/kotlin-analysis/build.gradle.kts +++ b/kotlin-analysis/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") id("com.github.johnrengelman.shadow") } diff --git a/kotlin-analysis/compiler-dependency/build.gradle.kts b/kotlin-analysis/compiler-dependency/build.gradle.kts index bbea28dd..f18b6f49 100644 --- a/kotlin-analysis/compiler-dependency/build.gradle.kts +++ b/kotlin-analysis/compiler-dependency/build.gradle.kts @@ -2,8 +2,8 @@ import org.jetbrains.DokkaPublicationBuilder.Component.Shadow import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") id("com.github.johnrengelman.shadow") } diff --git a/kotlin-analysis/intellij-dependency/build.gradle.kts b/kotlin-analysis/intellij-dependency/build.gradle.kts index 732b9d80..ad9d74e8 100644 --- a/kotlin-analysis/intellij-dependency/build.gradle.kts +++ b/kotlin-analysis/intellij-dependency/build.gradle.kts @@ -2,8 +2,8 @@ import org.jetbrains.DokkaPublicationBuilder.Component.Shadow import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") id("com.github.johnrengelman.shadow") } diff --git a/plugins/all-modules-page/build.gradle.kts b/plugins/all-modules-page/build.gradle.kts index cd07d9b3..ef91b9ee 100644 --- a/plugins/all-modules-page/build.gradle.kts +++ b/plugins/all-modules-page/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } registerDokkaArtifactPublication("dokkaAllModulesPage") { diff --git a/plugins/android-documentation/build.gradle.kts b/plugins/android-documentation/build.gradle.kts index e1293520..e0766ab4 100644 --- a/plugins/android-documentation/build.gradle.kts +++ b/plugins/android-documentation/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/base/base-test-utils/build.gradle.kts b/plugins/base/base-test-utils/build.gradle.kts index b7d02115..36ff2011 100644 --- a/plugins/base/base-test-utils/build.gradle.kts +++ b/plugins/base/base-test-utils/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/base/build.gradle.kts b/plugins/base/build.gradle.kts index 089e26d1..2bbfaa8c 100644 --- a/plugins/base/build.gradle.kts +++ b/plugins/base/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/gfm/build.gradle.kts b/plugins/gfm/build.gradle.kts index bb97cdd3..8892362b 100644 --- a/plugins/gfm/build.gradle.kts +++ b/plugins/gfm/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/gfm/gfm-template-processing/build.gradle.kts b/plugins/gfm/gfm-template-processing/build.gradle.kts index 450b33a2..41790b44 100644 --- a/plugins/gfm/gfm-template-processing/build.gradle.kts +++ b/plugins/gfm/gfm-template-processing/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/javadoc/build.gradle.kts b/plugins/javadoc/build.gradle.kts index c41256ca..f2920730 100644 --- a/plugins/javadoc/build.gradle.kts +++ b/plugins/javadoc/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/jekyll/build.gradle.kts b/plugins/jekyll/build.gradle.kts index 483c58b3..1291c56d 100644 --- a/plugins/jekyll/build.gradle.kts +++ b/plugins/jekyll/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/jekyll/jekyll-template-processing/build.gradle.kts b/plugins/jekyll/jekyll-template-processing/build.gradle.kts index 9845a993..6cfb48f2 100644 --- a/plugins/jekyll/jekyll-template-processing/build.gradle.kts +++ b/plugins/jekyll/jekyll-template-processing/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/kotlin-as-java/build.gradle.kts b/plugins/kotlin-as-java/build.gradle.kts index 1b759efb..97989697 100644 --- a/plugins/kotlin-as-java/build.gradle.kts +++ b/plugins/kotlin-as-java/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/mathjax/build.gradle.kts b/plugins/mathjax/build.gradle.kts index 07ac053b..4219a66b 100644 --- a/plugins/mathjax/build.gradle.kts +++ b/plugins/mathjax/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } dependencies { diff --git a/plugins/templating/build.gradle.kts b/plugins/templating/build.gradle.kts index d4909d9b..c4d91993 100644 --- a/plugins/templating/build.gradle.kts +++ b/plugins/templating/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } registerDokkaArtifactPublication("templating-plugin") { diff --git a/plugins/versioning/build.gradle.kts b/plugins/versioning/build.gradle.kts index 0c7ee0a4..eafd094f 100644 --- a/plugins/versioning/build.gradle.kts +++ b/plugins/versioning/build.gradle.kts @@ -1,8 +1,8 @@ import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } registerDokkaArtifactPublication("versioning-plugin") { diff --git a/runners/cli/build.gradle.kts b/runners/cli/build.gradle.kts index b522dbdd..5461837e 100644 --- a/runners/cli/build.gradle.kts +++ b/runners/cli/build.gradle.kts @@ -2,8 +2,8 @@ import org.jetbrains.DokkaPublicationBuilder.Component.Shadow import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") id("com.github.johnrengelman.shadow") } diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts index 0b6908d4..5ce70dcc 100644 --- a/runners/gradle-plugin/build.gradle.kts +++ b/runners/gradle-plugin/build.gradle.kts @@ -2,8 +2,8 @@ import org.jetbrains.* plugins { `kotlin-dsl` - org.jetbrains.conventions.`maven-publish` - org.jetbrains.conventions.`base-java` + id("org.jetbrains.conventions.maven-publish") + id("org.jetbrains.conventions.base-java") id("com.gradle.plugin-publish") } diff --git a/runners/maven-plugin/build.gradle.kts b/runners/maven-plugin/build.gradle.kts index 6cd0395e..f8badf8e 100644 --- a/runners/maven-plugin/build.gradle.kts +++ b/runners/maven-plugin/build.gradle.kts @@ -3,8 +3,8 @@ import org.jetbrains.SetupMaven import org.jetbrains.registerDokkaArtifactPublication plugins { - org.jetbrains.conventions.`kotlin-jvm` - org.jetbrains.conventions.`maven-publish` + id("org.jetbrains.conventions.kotlin-jvm") + id("org.jetbrains.conventions.maven-publish") } val setupMaven by tasks.register("setupMaven") diff --git a/settings.gradle.kts b/settings.gradle.kts index 91023501..9794dd18 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -39,6 +39,7 @@ include( ":mkdocs", ) +includeBuild("build-logic") val isCiBuild = System.getenv("GITHUB_ACTIONS") != null || System.getenv("TEAMCITY_VERSION") != null diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index c80472fd..6bd501b7 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - org.jetbrains.conventions.`kotlin-jvm` + id("org.jetbrains.conventions.kotlin-jvm") } dependencies { -- cgit