From dea90fcf8695eb7da9d46c7caa8a1afe77728162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Wed, 2 Dec 2020 16:44:09 +0100 Subject: [PATCH 01/14] Add OSSRH repositories --- build.gradle.kts | 6 +-- .../org/jetbrains/DokkaPublicationChannel.kt | 14 +++++- .../org/jetbrains/ValidatePublications.kt | 2 +- .../main/kotlin/org/jetbrains/publication.kt | 47 +++++++++++++++---- runners/gradle-plugin/build.gradle.kts | 22 ++++----- 5 files changed, 61 insertions(+), 30 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index dca6b9d93b..2f355e0b9d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -58,12 +58,8 @@ subprojects { outputDirectory.set(file(dokkaOutputDir)) } - val deleteDokkaOutputDir by registering(Delete::class) { - delete(dokkaOutputDir) - } - register("javadocJar") { - dependsOn(deleteDokkaOutputDir, dokkaHtml) + dependsOn(dokkaHtml) archiveClassifier.set("javadoc") from(dokkaOutputDir) } diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt index 42af6e8e2d..d157445b0a 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt @@ -8,14 +8,22 @@ internal enum class DokkaPublicationChannel { SpaceDokkaDev, BintrayKotlinDev, BintrayKotlinEap, - BintrayKotlinDokka; + BintrayKotlinDokka, + MavenCentral, + MavenCentralSnapshot; val isSpaceRepository get() = this == SpaceDokkaDev val isBintrayRepository get() = when (this) { - SpaceDokkaDev -> false BintrayKotlinDev, BintrayKotlinEap, BintrayKotlinDokka -> true + else -> false + } + + val isMavenRepository + get() = when (this) { + MavenCentral, MavenCentralSnapshot -> true + else -> false } companion object { @@ -24,6 +32,8 @@ internal enum class DokkaPublicationChannel { "bintray-kotlin-dev" -> BintrayKotlinDev "bintray-kotlin-eap" -> BintrayKotlinEap "bintray-kotlin-dokka" -> BintrayKotlinDokka + "maven-central-release" -> MavenCentral + "maven-central-snapshot" -> MavenCentralSnapshot else -> throw IllegalArgumentException("Unknown dokka_publication_channel=$value") } } diff --git a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt index 4659f6695f..22fac0d3b5 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt @@ -19,7 +19,7 @@ open class ValidatePublications : DefaultTask() { class UnpublishedProjectDependencyException( project: Project, dependencyProject: Project ) : GradleException( - "Published project ${project.path} cannot depend on unpublished projed ${dependencyProject.path}" + "Published project ${project.path} cannot depend on unpublished project ${dependencyProject.path}" ) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt index 821024676b..4a69733be8 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt @@ -4,7 +4,6 @@ import com.github.jengelman.gradle.plugins.shadow.ShadowExtension import com.jfrog.bintray.gradle.BintrayExtension import kotlinx.validation.ApiValidationExtension import org.gradle.api.Project -import org.gradle.api.provider.Provider import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.tasks.PublishToMavenRepository @@ -26,24 +25,25 @@ class DokkaPublicationBuilder { fun Project.registerDokkaArtifactPublication(publicationName: String, configure: DokkaPublicationBuilder.() -> Unit) { configure { publications { - val publicationProvider = register(publicationName) { + register(publicationName) { val builder = DokkaPublicationBuilder().apply(configure) artifactId = builder.artifactId when (builder.component) { DokkaPublicationBuilder.Component.Java -> from(components["java"]) DokkaPublicationBuilder.Component.Shadow -> run { - artifact(tasks["sourcesJar"]) extensions.getByType(ShadowExtension::class.java).component(this) + artifact(tasks["sourcesJar"]) } } + artifact(tasks["javadocJar"]) configurePom("Dokka ${project.name}") } - signPublicationIfKeyPresent(publicationProvider) } } configureBintrayPublicationIfNecessary(publicationName) configureSpacePublicationIfNecessary(publicationName) + configureSonatypePublicationIfNecessary(publicationName) createDokkaPublishTaskIfNecessary() registerBinaryCompatibilityCheck(publicationName) } @@ -80,7 +80,7 @@ fun Project.configureSpacePublicationIfNecessary(vararg publications: String) { fun Project.createDokkaPublishTaskIfNecessary() { tasks.maybeCreate("dokkaPublish").run { - if (publicationChannels.any { it.isSpaceRepository }) { + if (publicationChannels.any { it.isSpaceRepository } || publicationChannels.any { it.isMavenRepository }) { dependsOn(tasks.named("publish")) } if (publicationChannels.any { it.isBintrayRepository }) { @@ -110,7 +110,7 @@ private fun Project.configureBintrayPublication(vararg publications: String) { } repo = when (bintrayPublicationChannels.single()) { - SpaceDokkaDev -> throw IllegalStateException("$SpaceDokkaDev is not a bintray repository") + SpaceDokkaDev, MavenCentral, MavenCentralSnapshot -> throw IllegalStateException("${bintrayPublicationChannels.single()} is not a bintray repository") BintrayKotlinDev -> "kotlin-dev" BintrayKotlinEap -> "kotlin-eap" BintrayKotlinDokka -> "dokka" @@ -129,6 +129,30 @@ private fun Project.configureBintrayPublication(vararg publications: String) { } } +fun Project.configureSonatypePublicationIfNecessary(vararg publications: String) { + if (publicationChannels.any { it.isMavenRepository }) { + configureSonatypePublication(*publications) + signPublicationsIfKeyPresent(*publications) + } +} + +private fun Project.configureSonatypePublication(vararg publications: String) { + configure { + repositories { + maven { + if (MavenCentral in publicationChannels) { + url = URI("https://oss.sonatype.org/service/local/staging/deploy/maven2/") + } else if (MavenCentralSnapshot in publicationChannels) { + url = URI("https://oss.sonatype.org/content/repositories/snapshots/") + } + credentials { + username = System.getenv("SONATYPE_USER") + password = System.getenv("SONATYPE_PASSWORD") + } + } + } + } +} private fun MavenPublication.configurePom(projectName: String) { pom { @@ -161,14 +185,19 @@ private fun MavenPublication.configurePom(projectName: String) { } @Suppress("UnstableApiUsage") -private fun Project.signPublicationIfKeyPresent(publicationProvider: Provider) { +private fun Project.signPublicationsIfKeyPresent(vararg publications: String) { + val signingKeyId = System.getenv("SIGN_KEY_ID") val signingKey = System.getenv("SIGN_KEY") val signingKeyPassphrase = System.getenv("SIGN_KEY_PASSPHRASE") if (!signingKey.isNullOrBlank()) { extensions.configure("signing") { - useInMemoryPgpKeys(signingKey, signingKeyPassphrase) - sign(publicationProvider.get()) + useInMemoryPgpKeys(signingKeyId, signingKey, signingKeyPassphrase) + publications.forEach { publicationName -> + extensions.findByType(PublishingExtension::class)!!.publications.findByName(publicationName)?.let { + sign(it) + } + } } } } diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts index 8d374a35f8..8134b00136 100644 --- a/runners/gradle-plugin/build.gradle.kts +++ b/runners/gradle-plugin/build.gradle.kts @@ -1,11 +1,8 @@ -import org.jetbrains.configureBintrayPublicationIfNecessary -import org.jetbrains.configureSpacePublicationIfNecessary -import org.jetbrains.createDokkaPublishTaskIfNecessary -import org.jetbrains.dokkaVersion +import org.jetbrains.* plugins { `java-gradle-plugin` - id("com.gradle.plugin-publish") version "0.10.1" + id("com.gradle.plugin-publish") version "0.12.0" } repositories { @@ -43,6 +40,8 @@ gradlePlugin { plugins { create("dokkaGradlePlugin") { id = "org.jetbrains.dokka" + displayName = "Dokka plugin" + description = "Dokka, the Kotlin documentation tool" implementationClass = "org.jetbrains.dokka.gradle.DokkaPlugin" version = dokkaVersion } @@ -52,14 +51,7 @@ gradlePlugin { pluginBundle { website = "https://www.kotlinlang.org/" vcsUrl = "https://github.com/kotlin/dokka.git" - description = "Dokka, the Kotlin documentation tool" - tags = listOf("dokka", "kotlin", "kdoc", "android") - - plugins { - getByName("dokkaGradlePlugin") { - displayName = "Dokka plugin" - } - } + tags = listOf("dokka", "kotlin", "kdoc", "android", "documentation") mavenCoordinates { groupId = "org.jetbrains.dokka" @@ -81,8 +73,12 @@ publishing { } } +tasks.withType().configureEach { + onlyIf { publication != publishing.publications["dokkaGradlePluginForIntegrationTests"] } +} configureSpacePublicationIfNecessary("dokkaGradlePluginPluginMarkerMaven", "pluginMaven") configureBintrayPublicationIfNecessary("dokkaGradlePluginPluginMarkerMaven", "pluginMaven") +configureSonatypePublicationIfNecessary("dokkaGradlePluginPluginMarkerMaven", "pluginMaven") createDokkaPublishTaskIfNecessary() From d971d6c927b4bf8c67257b2d50c196bff0e7f479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Tue, 15 Dec 2020 15:32:55 +0100 Subject: [PATCH 02/14] Rewrite Gradle plugin publication --- build.gradle.kts | 2 +- .../org/jetbrains/DokkaPublicationChannel.kt | 4 ++-- .../src/main/kotlin/org/jetbrains/publication.kt | 14 +++++++++----- gradle.properties | 2 +- runners/gradle-plugin/build.gradle.kts | 13 ++++--------- runners/maven-plugin/src/main/kotlin/DokkaMojo.kt | 1 - 6 files changed, 17 insertions(+), 19 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2f355e0b9d..65c7f07371 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") apply false id("java") - id("org.jetbrains.dokka") version "1.4.10.2" + id("org.jetbrains.dokka") version "1.4.20" } val dokka_version: String by project diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt index d157445b0a..853267f742 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt @@ -4,7 +4,7 @@ package org.jetbrains import org.gradle.api.Project -internal enum class DokkaPublicationChannel { +enum class DokkaPublicationChannel { SpaceDokkaDev, BintrayKotlinDev, BintrayKotlinEap, @@ -39,7 +39,7 @@ internal enum class DokkaPublicationChannel { } } -internal val Project.publicationChannels: Set +val Project.publicationChannels: Set get() { val publicationChannel = this.properties["dokka_publication_channel"]?.toString() val publicationChannels = this.properties["dokka_publication_channels"]?.toString() diff --git a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt index 4a69733be8..79e90cdc34 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt @@ -154,7 +154,7 @@ private fun Project.configureSonatypePublication(vararg publications: String) { } } -private fun MavenPublication.configurePom(projectName: String) { +fun MavenPublication.configurePom(projectName: String) { pom { name.set(projectName) description.set("Dokka is a documentation engine for Kotlin and Java, performing the same function as Javadoc for Java") @@ -186,13 +186,17 @@ private fun MavenPublication.configurePom(projectName: String) { @Suppress("UnstableApiUsage") private fun Project.signPublicationsIfKeyPresent(vararg publications: String) { - val signingKeyId = System.getenv("SIGN_KEY_ID") - val signingKey = System.getenv("SIGN_KEY") - val signingKeyPassphrase = System.getenv("SIGN_KEY_PASSPHRASE") + 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") { - useInMemoryPgpKeys(signingKeyId, signingKey, signingKeyPassphrase) + 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/gradle.properties b/gradle.properties index f82dc91e28..fa922836c3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,5 +13,5 @@ language_version=1.4 # Code style kotlin.code.style=official # Gradle settings -org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g +org.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=2g org.gradle.parallel=true \ No newline at end of file diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts index 8134b00136..c65f51c5ea 100644 --- a/runners/gradle-plugin/build.gradle.kts +++ b/runners/gradle-plugin/build.gradle.kts @@ -44,6 +44,7 @@ gradlePlugin { description = "Dokka, the Kotlin documentation tool" implementationClass = "org.jetbrains.dokka.gradle.DokkaPlugin" version = dokkaVersion + isAutomatedPublishing = false // This will probably have to be fixed for Gradle Plugin Portal release } } } @@ -61,10 +62,6 @@ pluginBundle { publishing { publications { - register("pluginMaven") { - artifactId = "dokka-gradle-plugin" - } - register("dokkaGradlePluginForIntegrationTests") { artifactId = "dokka-gradle-plugin" from(components["java"]) @@ -77,8 +74,6 @@ tasks.withType().configureEach { onlyIf { publication != publishing.publications["dokkaGradlePluginForIntegrationTests"] } } -configureSpacePublicationIfNecessary("dokkaGradlePluginPluginMarkerMaven", "pluginMaven") -configureBintrayPublicationIfNecessary("dokkaGradlePluginPluginMarkerMaven", "pluginMaven") -configureSonatypePublicationIfNecessary("dokkaGradlePluginPluginMarkerMaven", "pluginMaven") -createDokkaPublishTaskIfNecessary() - +registerDokkaArtifactPublication("dokkaGradleMavenPlugin") { + artifactId = "dokka-gradle-plugin" +} diff --git a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt b/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt index 5228f44b21..58039ab970 100644 --- a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt +++ b/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt @@ -22,7 +22,6 @@ import org.jetbrains.dokka.* import org.jetbrains.dokka.DokkaConfiguration.ExternalDocumentationLink import java.io.File import java.net.URL -import java.util.stream.Collectors class SourceLinkMapItem { @Parameter(name = "path", required = true) From 915f59ce6382f9b882a2cd7008b906b2c3305820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Mon, 22 Feb 2021 16:33:32 +0100 Subject: [PATCH 03/14] Add publication version assertion --- .../kotlin/org/jetbrains/DokkaPublicationChannel.kt | 10 ++++++++++ .../src/main/kotlin/org/jetbrains/DokkaVersion.kt | 4 ++++ .../main/kotlin/org/jetbrains/DokkaVersionType.kt | 5 +++++ .../src/main/kotlin/org/jetbrains/publication.kt | 12 ++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt index 853267f742..c4f22a9083 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt @@ -26,6 +26,16 @@ enum class DokkaPublicationChannel { else -> false } + val acceptedDokkaVersionTypes: List + get() = when(this) { + MavenCentral -> listOf(DokkaVersionType.Release) + MavenCentralSnapshot -> listOf(DokkaVersionType.Snapshot) + SpaceDokkaDev -> listOf(DokkaVersionType.Release, DokkaVersionType.Dev, DokkaVersionType.MC, DokkaVersionType.Snapshot) + BintrayKotlinDev -> listOf(DokkaVersionType.Dev, DokkaVersionType.MC, DokkaVersionType.Snapshot) + BintrayKotlinEap -> listOf(DokkaVersionType.MC) + BintrayKotlinDokka -> listOf(DokkaVersionType.Release) + } + companion object { fun fromPropertyString(value: String): DokkaPublicationChannel = when (value) { "space-dokka-dev" -> SpaceDokkaDev diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt index 2a5c21a73f..3ee348c017 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt @@ -24,3 +24,7 @@ private fun dokkaVersionFromBase(baseVersion: String): String { val Project.dokkaVersion: String get() = configureDokkaVersion() + +val Project.dokkaVersionType: DokkaVersionType + get() = DokkaVersionType.values().find { it.suffix.matches(dokkaVersion.substringAfter("-")) } + ?: throw IllegalStateException("Unrecognized version type: $dokkaVersion") diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt new file mode 100644 index 0000000000..dbf2d31264 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersionType.kt @@ -0,0 +1,5 @@ +package org.jetbrains + +enum class DokkaVersionType(val suffix: Regex) { + Release("^$".toRegex()), Snapshot("SNAPSHOT".toRegex()), Dev("dev-\\d+".toRegex()), MC("mc-\\d+".toRegex()) +} diff --git a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt index 79e90cdc34..b6e3e475e0 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt @@ -41,6 +41,7 @@ fun Project.registerDokkaArtifactPublication(publicationName: String, configure: } } + assertPublicationVersion() configureBintrayPublicationIfNecessary(publicationName) configureSpacePublicationIfNecessary(publicationName) configureSonatypePublicationIfNecessary(publicationName) @@ -154,6 +155,17 @@ private fun Project.configureSonatypePublication(vararg publications: String) { } } +private fun Project.assertPublicationVersion() { + if (System.getenv("SKIP_VERSION_CHECK")?.contains("true", ignoreCase = true) == true) + return + + if (!publicationChannels.all { publicationChannel -> + publicationChannel.acceptedDokkaVersionTypes.any { acceptedVersionType -> + acceptedVersionType == dokkaVersionType + } + }) { throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels") } +} + fun MavenPublication.configurePom(projectName: String) { pom { name.set(projectName) From 48cf2db40d0bcd9b593222e0ddb74ed2a190008f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Tue, 23 Feb 2021 16:39:09 +0100 Subject: [PATCH 04/14] Use Nexus publish plugin for publishing to Sonatype --- build.gradle.kts | 15 +++++++++ buildSrc/build.gradle.kts | 1 + .../main/kotlin/org/jetbrains/DokkaVersion.kt | 2 +- .../main/kotlin/org/jetbrains/publication.kt | 31 ++++++------------- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 65c7f07371..318ae70b63 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,11 +1,13 @@ import org.jetbrains.ValidatePublications import org.jetbrains.configureDokkaVersion import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.publicationChannels plugins { kotlin("jvm") apply false id("java") id("org.jetbrains.dokka") version "1.4.20" + id("io.github.gradle-nexus.publish-plugin") } val dokka_version: String by project @@ -76,3 +78,16 @@ tasks.whenTaskAdded { println("Publication version: $dokka_version") tasks.register("validatePublications") + +nexusPublishing { + repositories { + sonatype { + username.set(System.getenv("SONATYPE_USER")) + password.set(System.getenv("SONATYPE_PASSWORD")) + } + } +} + +tasks.maybeCreate("dokkaPublish").run { + finalizedBy(tasks.named("closeAndReleaseSonatypeStagingRepository")) +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 75d59e8f65..1f1faaabfe 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -10,4 +10,5 @@ dependencies { implementation("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4") implementation("com.github.jengelman.gradle.plugins:shadow:2.0.4") implementation("org.jetbrains.kotlinx:binary-compatibility-validator:0.4.0") + implementation("io.github.gradle-nexus:publish-plugin:1.0.0") } diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt index 3ee348c017..4cedd4576d 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt @@ -26,5 +26,5 @@ val Project.dokkaVersion: String get() = configureDokkaVersion() val Project.dokkaVersionType: DokkaVersionType - get() = DokkaVersionType.values().find { it.suffix.matches(dokkaVersion.substringAfter("-")) } + get() = DokkaVersionType.values().find { it.suffix.matches(dokkaVersion.substringAfter("-", "")) } ?: throw IllegalStateException("Unrecognized version type: $dokkaVersion") diff --git a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt index b6e3e475e0..e7a5a0652c 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt @@ -10,6 +10,7 @@ import org.gradle.api.publish.maven.tasks.PublishToMavenRepository import org.gradle.kotlin.dsl.* import org.gradle.plugins.signing.SigningExtension import org.jetbrains.DokkaPublicationChannel.* +import io.github.gradlenexus.publishplugin.NexusPublishExtension import java.net.URI class DokkaPublicationBuilder { @@ -81,9 +82,14 @@ fun Project.configureSpacePublicationIfNecessary(vararg publications: String) { fun Project.createDokkaPublishTaskIfNecessary() { tasks.maybeCreate("dokkaPublish").run { - if (publicationChannels.any { it.isSpaceRepository } || publicationChannels.any { it.isMavenRepository }) { + if (publicationChannels.any { it.isSpaceRepository }) { dependsOn(tasks.named("publish")) } + + if (publicationChannels.any { it.isMavenRepository }) { + dependsOn(tasks.named("publishToSonatype")) + } + if (publicationChannels.any { it.isBintrayRepository }) { dependsOn(tasks.named("bintrayUpload")) } @@ -132,29 +138,10 @@ private fun Project.configureBintrayPublication(vararg publications: String) { fun Project.configureSonatypePublicationIfNecessary(vararg publications: String) { if (publicationChannels.any { it.isMavenRepository }) { - configureSonatypePublication(*publications) signPublicationsIfKeyPresent(*publications) } } -private fun Project.configureSonatypePublication(vararg publications: String) { - configure { - repositories { - maven { - if (MavenCentral in publicationChannels) { - url = URI("https://oss.sonatype.org/service/local/staging/deploy/maven2/") - } else if (MavenCentralSnapshot in publicationChannels) { - url = URI("https://oss.sonatype.org/content/repositories/snapshots/") - } - credentials { - username = System.getenv("SONATYPE_USER") - password = System.getenv("SONATYPE_PASSWORD") - } - } - } - } -} - private fun Project.assertPublicationVersion() { if (System.getenv("SKIP_VERSION_CHECK")?.contains("true", ignoreCase = true) == true) return @@ -163,7 +150,9 @@ private fun Project.assertPublicationVersion() { publicationChannel.acceptedDokkaVersionTypes.any { acceptedVersionType -> acceptedVersionType == dokkaVersionType } - }) { throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels") } + }) { + throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels") + } } fun MavenPublication.configurePom(projectName: String) { From 8200b0f7696198ce8251b0d314c6696895fe389d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Mon, 8 Mar 2021 12:47:14 +0100 Subject: [PATCH 05/14] Remove explicit publishing from s3 tests --- .github/workflows/s3-snapshots.yml | 9 --------- gradle.properties | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/s3-snapshots.yml b/.github/workflows/s3-snapshots.yml index 847e9d7eb5..f698a0eedf 100644 --- a/.github/workflows/s3-snapshots.yml +++ b/.github/workflows/s3-snapshots.yml @@ -19,9 +19,6 @@ jobs: with: java-version: 12 - - name: Publish dokka locally - run: ./gradlew clean publishToMavenLocal --stacktrace - - name: Document stdlib run: ./gradlew :integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.StdlibGradleIntegrationTest --stacktrace env: @@ -52,9 +49,6 @@ jobs: with: java-version: 12 - - name: Publish dokka locally - run: ./gradlew clean publishToMavenLocal --stacktrace - - name: Document serialization run: ./gradlew :integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.SerializationGradleIntegrationTest --stacktrace env: @@ -85,9 +79,6 @@ jobs: with: java-version: 12 - - name: Publish dokka locally - run: ./gradlew clean publishToMavenLocal --stacktrace - - name: Document biojava-core run: ./gradlew :integration-tests:maven:integrationTest --tests org.jetbrains.dokka.it.maven.BiojavaIntegrationTest --stacktrace env: diff --git a/gradle.properties b/gradle.properties index fa922836c3..77b0a4dc45 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,5 +13,5 @@ language_version=1.4 # Code style kotlin.code.style=official # Gradle settings -org.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=2g +org.gradle.jvmargs=-Xmx10g -XX:MaxMetaspaceSize=2g org.gradle.parallel=true \ No newline at end of file From 4735c3adbe6932be5ddef94220185f7440de6c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Mon, 8 Mar 2021 14:53:42 +0100 Subject: [PATCH 06/14] Don't document Dokka for local publication --- build.gradle.kts | 10 +++++----- buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 318ae70b63..fa1d3d4956 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,5 @@ -import org.jetbrains.ValidatePublications -import org.jetbrains.configureDokkaVersion +import org.jetbrains.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -import org.jetbrains.publicationChannels plugins { kotlin("jvm") apply false @@ -61,9 +59,11 @@ subprojects { } register("javadocJar") { - dependsOn(dokkaHtml) archiveClassifier.set("javadoc") - from(dokkaOutputDir) + if (isLocalPublication) { + dependsOn(dokkaHtml) + from(dokkaOutputDir) + } } } } diff --git a/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt b/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt index ef9c5e6aac..46bf29ff5e 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt @@ -1,5 +1,6 @@ package org.jetbrains +import org.gradle.api.Project import org.gradle.api.Task fun Task.dependsOnMavenLocalPublication() { @@ -11,3 +12,6 @@ fun Task.dependsOnMavenLocalPublication() { } } } + +val Project.isLocalPublication: Boolean + get() = gradle.startParameter.taskNames.contains("publishToMavenLocal") From b84d5e1d0dc48cacb3ebf3956c1c75f5f162167d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Mon, 15 Mar 2021 18:55:21 +0100 Subject: [PATCH 07/14] Fix a bug with closing Sonatype repository --- build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fa1d3d4956..e7ce0e32a2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -89,5 +89,7 @@ nexusPublishing { } tasks.maybeCreate("dokkaPublish").run { - finalizedBy(tasks.named("closeAndReleaseSonatypeStagingRepository")) + if (publicationChannels.any { it.isMavenRepository }) { + finalizedBy(tasks.named("closeAndReleaseSonatypeStagingRepository")) + } } From f312a892e0ff328adb550b77d55e9c4dbd48bded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Mon, 15 Mar 2021 22:11:01 +0100 Subject: [PATCH 08/14] Bump internal Dokka version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e7ce0e32a2..de984ae34f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") apply false id("java") - id("org.jetbrains.dokka") version "1.4.20" + id("org.jetbrains.dokka") version "1.4.30" id("io.github.gradle-nexus.publish-plugin") } From 95644a095e83f5db9115368d0619e09de8ae7e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Thu, 18 Mar 2021 13:23:50 +0100 Subject: [PATCH 09/14] Move publication version check to the validate task --- .../src/main/kotlin/org/jetbrains/DokkaVersion.kt | 3 +-- .../kotlin/org/jetbrains/ValidatePublications.kt | 14 ++++++++++++++ .../src/main/kotlin/org/jetbrains/publication.kt | 14 -------------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt index 4cedd4576d..05585d0682 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt @@ -25,6 +25,5 @@ private fun dokkaVersionFromBase(baseVersion: String): String { val Project.dokkaVersion: String get() = configureDokkaVersion() -val Project.dokkaVersionType: DokkaVersionType +val Project.dokkaVersionType: DokkaVersionType? get() = DokkaVersionType.values().find { it.suffix.matches(dokkaVersion.substringAfter("-", "")) } - ?: throw IllegalStateException("Unrecognized version type: $dokkaVersion") diff --git a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt index 22fac0d3b5..4b97d74a4a 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt @@ -36,6 +36,7 @@ open class ValidatePublications : DefaultTask() { checkPublicationIsConfiguredForBintray(subProject, publication) } checkProjectDependenciesArePublished(subProject) + subProject.assertPublicationVersion() } } } @@ -72,6 +73,19 @@ open class ValidatePublications : DefaultTask() { } } + private fun Project.assertPublicationVersion() { + if (System.getenv("SKIP_VERSION_CHECK")?.contains("true", ignoreCase = true) == true) + return + + if (!publicationChannels.all { publicationChannel -> + publicationChannel.acceptedDokkaVersionTypes.any { acceptedVersionType -> + acceptedVersionType == dokkaVersionType + } + }) { + throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels") + } + } + init { group = "verification" project.tasks.named("check") { diff --git a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt index e7a5a0652c..bb4f3ad3d7 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt @@ -42,7 +42,6 @@ fun Project.registerDokkaArtifactPublication(publicationName: String, configure: } } - assertPublicationVersion() configureBintrayPublicationIfNecessary(publicationName) configureSpacePublicationIfNecessary(publicationName) configureSonatypePublicationIfNecessary(publicationName) @@ -142,19 +141,6 @@ fun Project.configureSonatypePublicationIfNecessary(vararg publications: String) } } -private fun Project.assertPublicationVersion() { - if (System.getenv("SKIP_VERSION_CHECK")?.contains("true", ignoreCase = true) == true) - return - - if (!publicationChannels.all { publicationChannel -> - publicationChannel.acceptedDokkaVersionTypes.any { acceptedVersionType -> - acceptedVersionType == dokkaVersionType - } - }) { - throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels") - } -} - fun MavenPublication.configurePom(projectName: String) { pom { name.set(projectName) From 43dccefeaa6181a35fda9ace07e8fd6397c36480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Thu, 18 Mar 2021 14:25:29 +0100 Subject: [PATCH 10/14] Fix Gradle plugin publication --- gradle.properties | 4 ++-- runners/gradle-plugin/build.gradle.kts | 14 +++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 77b0a4dc45..0714c6e7b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project Settings dokka_version_base=1.5.0 -dokka_publication_channels=bintray-kotlin-dev&space-dokka-dev +dokka_publication_channels=maven-central-snapshot&space-dokka-dev dokka_integration_test_parallelism=2 # Versions kotlin_version=1.5.0 @@ -14,4 +14,4 @@ language_version=1.4 kotlin.code.style=official # Gradle settings org.gradle.jvmargs=-Xmx10g -XX:MaxMetaspaceSize=2g -org.gradle.parallel=true \ No newline at end of file +org.gradle.parallel=true diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts index c65f51c5ea..e56fe282c2 100644 --- a/runners/gradle-plugin/build.gradle.kts +++ b/runners/gradle-plugin/build.gradle.kts @@ -44,7 +44,7 @@ gradlePlugin { description = "Dokka, the Kotlin documentation tool" implementationClass = "org.jetbrains.dokka.gradle.DokkaPlugin" version = dokkaVersion - isAutomatedPublishing = false // This will probably have to be fixed for Gradle Plugin Portal release + isAutomatedPublishing = true } } } @@ -67,6 +67,11 @@ publishing { from(components["java"]) version = "for-integration-tests-SNAPSHOT" } + + register("pluginMaven") { + configurePom("Dokka ${project.name}") + artifactId = "dokka-gradle-plugin" + } } } @@ -74,6 +79,9 @@ tasks.withType().configureEach { onlyIf { publication != publishing.publications["dokkaGradlePluginForIntegrationTests"] } } -registerDokkaArtifactPublication("dokkaGradleMavenPlugin") { - artifactId = "dokka-gradle-plugin" +afterEvaluate { // Workaround for interesting design choice https://github.com/gradle/gradle/blob/c4f935f77377f1783f70ec05381c8182b3ade3ea/subprojects/plugin-development/src/main/java/org/gradle/plugin/devel/plugins/MavenPluginPublishPlugin.java#L49 + configureBintrayPublicationIfNecessary("pluginMaven", "dokkaGradlePluginPluginMarkerMaven") + configureSpacePublicationIfNecessary("pluginMaven", "dokkaGradlePluginPluginMarkerMaven") + configureSonatypePublicationIfNecessary("pluginMaven", "dokkaGradlePluginPluginMarkerMaven") + createDokkaPublishTaskIfNecessary() } From 67d66589d999feaf457e9046eb315d63b366a64d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Tue, 22 Jun 2021 15:47:05 +0200 Subject: [PATCH 11/14] Bump Dokka and gradle plugin-publish versions --- build.gradle.kts | 4 ++-- runners/gradle-plugin/build.gradle.kts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index de984ae34f..5c0093bdb1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") apply false id("java") - id("org.jetbrains.dokka") version "1.4.30" + id("org.jetbrains.dokka") version "1.4.32" id("io.github.gradle-nexus.publish-plugin") } @@ -60,7 +60,7 @@ subprojects { register("javadocJar") { archiveClassifier.set("javadoc") - if (isLocalPublication) { + if (!isLocalPublication) { dependsOn(dokkaHtml) from(dokkaOutputDir) } diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts index e56fe282c2..d44a2a4a39 100644 --- a/runners/gradle-plugin/build.gradle.kts +++ b/runners/gradle-plugin/build.gradle.kts @@ -2,7 +2,7 @@ import org.jetbrains.* plugins { `java-gradle-plugin` - id("com.gradle.plugin-publish") version "0.12.0" + id("com.gradle.plugin-publish") version "0.15.0" } repositories { From 4158245458efd8a53a97eb55708f7717da052979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Tue, 22 Jun 2021 17:27:55 +0200 Subject: [PATCH 12/14] Do not run Dokka for test tasks --- build.gradle.kts | 7 +++---- buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt | 7 ++++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 5c0093bdb1..b702669332 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,15 +55,14 @@ subprojects { val dokkaOutputDir = "$buildDir/dokka" dokkaHtml { + onlyIf { !isLocalPublication } outputDirectory.set(file(dokkaOutputDir)) } register("javadocJar") { archiveClassifier.set("javadoc") - if (!isLocalPublication) { - dependsOn(dokkaHtml) - from(dokkaOutputDir) - } + dependsOn(dokkaHtml) + from(dokkaOutputDir) } } } diff --git a/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt b/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt index 46bf29ff5e..261d1663cd 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/taskUtils.kt @@ -14,4 +14,9 @@ fun Task.dependsOnMavenLocalPublication() { } val Project.isLocalPublication: Boolean - get() = gradle.startParameter.taskNames.contains("publishToMavenLocal") + 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) + } From f2cc44d298c3a492603e85d2a1f34d0ef6ddb151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Tue, 22 Jun 2021 20:23:59 +0200 Subject: [PATCH 13/14] Do not fail all runs in a workflow --- .github/workflows/gradle-test.pr.yml | 1 + plugins/base/build.gradle.kts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/.github/workflows/gradle-test.pr.yml b/.github/workflows/gradle-test.pr.yml index 2471033724..cacfdbb739 100644 --- a/.github/workflows/gradle-test.pr.yml +++ b/.github/workflows/gradle-test.pr.yml @@ -19,6 +19,7 @@ jobs: strategy: matrix: version: [ 11, 15, 16 ] + fail-fast: false runs-on: windows-latest steps: - uses: actions/checkout@v2 diff --git a/plugins/base/build.gradle.kts b/plugins/base/build.gradle.kts index b3f002ef52..3a4ee539de 100644 --- a/plugins/base/build.gradle.kts +++ b/plugins/base/build.gradle.kts @@ -44,6 +44,10 @@ tasks { dependsOn(copyFrontend) } + sourcesJar { + dependsOn(processResources) + } + test { maxHeapSize = "4G" } From 2856d30df72491b1f35715f29823501b1332e7f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Doleg=C5=82o?= Date: Tue, 22 Jun 2021 20:38:01 +0200 Subject: [PATCH 14/14] Reduce JVM memory limit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0714c6e7b4..0532c422a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,5 +13,5 @@ language_version=1.4 # Code style kotlin.code.style=official # Gradle settings -org.gradle.jvmargs=-Xmx10g -XX:MaxMetaspaceSize=2g +org.gradle.jvmargs=-Xmx6g -XX:MaxMetaspaceSize=2g org.gradle.parallel=true