diff options
author | sebastian.sellmair <sebastian.sellmair@jetbrains.com> | 2020-09-04 12:54:49 +0200 |
---|---|---|
committer | Paweł Marks <Kordyjan@users.noreply.github.com> | 2020-09-04 14:32:57 +0200 |
commit | 5341805076ca6e2777548a2aed0cc4b12b67a00e (patch) | |
tree | 9a16c86142ce865c3c1cf5b6b2824905ea70b672 | |
parent | cc3d4872f70cfebaf5d85c72af0030f526671915 (diff) | |
download | dokka-5341805076ca6e2777548a2aed0cc4b12b67a00e.tar.gz dokka-5341805076ca6e2777548a2aed0cc4b12b67a00e.tar.bz2 dokka-5341805076ca6e2777548a2aed0cc4b12b67a00e.zip |
Support multiple publication channels at once
4 files changed, 47 insertions, 13 deletions
diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt index 05593b40..059c79ea 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt @@ -1,3 +1,5 @@ +@file:Suppress("LocalVariableName") + package org.jetbrains import org.gradle.api.GradleException @@ -18,16 +20,40 @@ internal enum class DokkaPublicationChannel { SpaceDokkaDev -> false BintrayKotlinDev, BintrayKotlinEap, BintrayKotlinDokka -> true } -} -internal val Project.publicationChannel: DokkaPublicationChannel - get() { - val dokka_publication_channel: String by this - return when (dokka_publication_channel) { + companion object { + fun fromPropertyString(value: String): DokkaPublicationChannel = when (value) { "space-dokka-dev" -> SpaceDokkaDev "bintray-kotlin-dev" -> BintrayKotlinDev "bintray-kotlin-eap" -> BintrayKotlinEap "bintray-kotlin-dokka" -> BintrayKotlinDokka - else -> throw GradleException("Unknown dokka_publication_channel=$dokka_publication_channel") + else -> throw IllegalArgumentException("Unknown dokka_publication_channel=$value") + } + } +} + +internal val Project.publicationChannels: Set<DokkaPublicationChannel> + 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/ValidatePublications.kt b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt index 317e5152..4659f669 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt @@ -32,7 +32,7 @@ open class ValidatePublications : DefaultTask() { .filterIsInstance<MavenPublication>() .filter { it.version == project.dokkaVersion } .forEach { publication -> - if (project.publicationChannel.isBintrayRepository) { + if (project.publicationChannels.any { it.isBintrayRepository }) { checkPublicationIsConfiguredForBintray(subProject, publication) } checkProjectDependenciesArePublished(subProject) diff --git a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt index b4259978..291e3f15 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/publication.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/publication.kt @@ -42,7 +42,7 @@ fun Project.registerDokkaArtifactPublication(publicationName: String, configure: } fun Project.configureSpacePublicationIfNecessary(vararg publications: String) { - if (publicationChannel.isSpaceRepository) { + if (SpaceDokkaDev in this.publicationChannels) { configure<PublishingExtension> { repositories { /* already registered */ @@ -73,17 +73,17 @@ fun Project.configureSpacePublicationIfNecessary(vararg publications: String) { fun Project.createDokkaPublishTaskIfNecessary() { tasks.maybeCreate("dokkaPublish").run { - if (publicationChannel.isSpaceRepository) { + if (publicationChannels.any { it.isSpaceRepository }) { dependsOn(tasks.named("publish")) } - if (publicationChannel.isBintrayRepository) { + if (publicationChannels.any { it.isBintrayRepository }) { dependsOn(tasks.named("bintrayUpload")) } } } fun Project.configureBintrayPublicationIfNecessary(vararg publications: String) { - if (publicationChannel.isBintrayRepository) { + if (publicationChannels.any { it.isBintrayRepository }) { configureBintrayPublication(*publications) } } @@ -95,12 +95,20 @@ private fun Project.configureBintrayPublication(vararg publications: String) { dryRun = System.getenv("BINTRAY_DRY_RUN") == "true" || project.properties["bintray_dry_run"] == "true" pkg = PackageConfig().apply { - repo = when (publicationChannel) { + val bintrayPublicationChannels = publicationChannels.filter { it.isBintrayRepository } + if (bintrayPublicationChannels.size > 1) { + throw IllegalArgumentException( + "Only a single bintray repository can be used for publishing at once. Found $publicationChannels" + ) + } + + repo = when (bintrayPublicationChannels.single()) { SpaceDokkaDev -> throw IllegalStateException("$SpaceDokkaDev is not a bintray repository") BintrayKotlinDev -> "kotlin-dev" BintrayKotlinEap -> "kotlin-eap" BintrayKotlinDokka -> "dokka" } + name = "dokka" userOrg = "kotlin" desc = "Dokka, the Kotlin documentation tool" diff --git a/gradle.properties b/gradle.properties index c9bc0ec9..7088ba55 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project Settings dokka_version_base=1.4.10 -dokka_publication_channel=space-dokka-dev +dokka_publication_channels=bintray-kotlin-dev&space-dokka-dev dokka_integration_test_parallelism=2 # Versions kotlin_version=1.4.0 |