From e99be615ce7c2c2b5c3ee5e3f8941c41c1e7a944 Mon Sep 17 00:00:00 2001 From: Kamil Doległo Date: Fri, 31 Jan 2020 00:37:29 +0100 Subject: Bump Gradle version, migrate to Kotlin DSL, refactor publishing --- .../src/main/kotlin/org/jetbrains/DokkaVersion.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt (limited to 'buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt') diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt new file mode 100644 index 00000000..5bd35415 --- /dev/null +++ b/buildSrc/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 + +fun Project.configureDokkaVersion(): String { + var dokka_version: String? by this.extra + if (dokka_version == null) { + val buildNumber = System.getenv("BUILD_NUMBER") + val dokka_version_base: String by this + dokka_version = dokka_version_base + if (buildNumber == null || System.getenv("FORCE_SNAPSHOT") != null) { + "-SNAPSHOT" + } else { + "-$buildNumber" + } + } + return dokka_version!! +} \ No newline at end of file -- cgit From 012190fbfd049f56637b1039f4ae1f69becea881 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 1 Jul 2020 17:38:49 +0200 Subject: Gradle integration tests: Use dokka_it_kotlin_version over kotlin_version --- .../src/main/kotlin/org/jetbrains/DokkaVersion.kt | 20 ++++++++++++-------- .../testData/androidApp/app/build.gradle | 2 +- .../gradle/projects/it-basic/build.gradle.kts | 4 +--- .../gradle/projects/it-basic/gradle.properties | 1 + .../gradle/projects/it-basic/settings.gradle.kts | 4 ++-- .../dokka/it/gradle/AbstractGradleIntegrationTest.kt | 6 +++++- 6 files changed, 22 insertions(+), 15 deletions(-) create mode 100644 integration-tests/gradle/projects/it-basic/gradle.properties (limited to 'buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt') diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt index 5bd35415..d5fd3e78 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt @@ -7,13 +7,17 @@ import org.gradle.kotlin.dsl.provideDelegate fun Project.configureDokkaVersion(): String { var dokka_version: String? by this.extra if (dokka_version == null) { - val buildNumber = System.getenv("BUILD_NUMBER") val dokka_version_base: String by this - dokka_version = dokka_version_base + if (buildNumber == null || System.getenv("FORCE_SNAPSHOT") != null) { - "-SNAPSHOT" - } else { - "-$buildNumber" - } + dokka_version = dokkaVersionFromBase(dokka_version_base) } - return dokka_version!! -} \ No newline at end of file + return checkNotNull(dokka_version) +} + +private fun dokkaVersionFromBase(baseVersion: String): String { + val buildNumber = System.getenv("BUILD_NUMBER") + val forceSnapshot = System.getenv("FORCE_SNAPSHOT") != null + if (forceSnapshot || buildNumber == null) { + return "$baseVersion-SNAPSHOT" + } + return "$baseVersion-$buildNumber" +} diff --git a/integration-tests/gradle-integration-tests/testData/androidApp/app/build.gradle b/integration-tests/gradle-integration-tests/testData/androidApp/app/build.gradle index 2420107c..0092b76c 100644 --- a/integration-tests/gradle-integration-tests/testData/androidApp/app/build.gradle +++ b/integration-tests/gradle-integration-tests/testData/androidApp/app/build.gradle @@ -42,4 +42,4 @@ android { dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$test_kotlin_version" dokkaRuntime files(dokka_fatjar) -} \ No newline at end of file +} diff --git a/integration-tests/gradle/projects/it-basic/build.gradle.kts b/integration-tests/gradle/projects/it-basic/build.gradle.kts index 3e451fd3..80c2bbea 100644 --- a/integration-tests/gradle/projects/it-basic/build.gradle.kts +++ b/integration-tests/gradle/projects/it-basic/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.dokka.gradle.dokka - plugins { kotlin("jvm") id("org.jetbrains.dokka") @@ -18,5 +16,5 @@ dependencies { afterEvaluate { logger.quiet("Gradle version: ${gradle.gradleVersion}") - logger.quiet("Kotlin version: ${findProperty("kotlin_version")}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") } diff --git a/integration-tests/gradle/projects/it-basic/gradle.properties b/integration-tests/gradle/projects/it-basic/gradle.properties new file mode 100644 index 00000000..7ebac3ad --- /dev/null +++ b/integration-tests/gradle/projects/it-basic/gradle.properties @@ -0,0 +1 @@ +dokka_it_kotlin_version=1.3.72 diff --git a/integration-tests/gradle/projects/it-basic/settings.gradle.kts b/integration-tests/gradle/projects/it-basic/settings.gradle.kts index 9bfd026f..10447365 100644 --- a/integration-tests/gradle/projects/it-basic/settings.gradle.kts +++ b/integration-tests/gradle/projects/it-basic/settings.gradle.kts @@ -1,11 +1,11 @@ @file:Suppress("LocalVariableName", "UnstableApiUsage") pluginManagement { - val kotlin_version = "1.3.72" + val dokka_it_kotlin_version: String by settings val dokka_version = "0.11.0-SNAPSHOT" plugins { - id("org.jetbrains.kotlin.jvm") version kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version id("org.jetbrains.dokka") version dokka_version } diff --git a/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt b/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt index 34114c74..d8a9a60f 100644 --- a/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt @@ -23,7 +23,11 @@ abstract class AbstractGradleIntegrationTest { .withProjectDir(projectDir) .withGradleVersion(buildVersions.gradleVersion) .forwardOutput() - .withArguments("-Pkotlin_version=${buildVersions.kotlinVersion}", *arguments) + .withArguments( + "-Pkotlin_version=${buildVersions.kotlinVersion}", + "-Pdokka_it_kotlin_version=${buildVersions.kotlinVersion}", + * arguments + ) .withDebug(true) } -- cgit From 1b8030d4b8d4b83e35c91632694fb32fcb58a02d Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 8 Jul 2020 17:09:41 +0200 Subject: Implement PublicationValidation --- build.gradle.kts | 6 +- .../main/kotlin/org/jetbrains/BintrayPublishing.kt | 4 +- .../src/main/kotlin/org/jetbrains/DokkaVersion.kt | 3 + .../kotlin/org/jetbrains/ValidatePublications.kt | 79 ++++++++++++++++++++++ plugins/gfm/build.gradle.kts | 4 ++ plugins/javadoc/build.gradle.kts | 1 - plugins/jekyll/build.gradle.kts | 6 +- plugins/mathjax/build.gradle.kts | 6 +- runners/gradle-plugin/build.gradle.kts | 2 +- 9 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt (limited to 'buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt') diff --git a/build.gradle.kts b/build.gradle.kts index ee17ba75..7cc0394f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,4 @@ +import org.jetbrains.ValidatePublications import org.jetbrains.configureDokkaVersion import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -45,8 +46,6 @@ subprojects { } } -println("Publication version: $dokka_version") - // Workaround for https://github.com/bintray/gradle-bintray-plugin/issues/267 // Manually disable bintray tasks added to the root project tasks.whenTaskAdded { @@ -54,3 +53,6 @@ tasks.whenTaskAdded { enabled = false } } + +println("Publication version: $dokka_version") +tasks.register("validatePublications") diff --git a/buildSrc/src/main/kotlin/org/jetbrains/BintrayPublishing.kt b/buildSrc/src/main/kotlin/org/jetbrains/BintrayPublishing.kt index c3d21d88..4180c445 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/BintrayPublishing.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/BintrayPublishing.kt @@ -10,7 +10,8 @@ fun Project.configureBintrayPublication(vararg publications: String) { extensions.configure("bintray") { user = System.getenv("BINTRAY_USER") key = System.getenv("BINTRAY_KEY") - + dryRun = System.getenv("BINTRAY_DRY_RUN") == "true" || + project.properties["bintray_dry_run"] == "true" pkg = PackageConfig().apply { repo = dokka_publication_channel name = "dokka" @@ -25,3 +26,4 @@ fun Project.configureBintrayPublication(vararg publications: String) { setPublications(*publications) } } + diff --git a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt index d5fd3e78..2a5c21a7 100644 --- a/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt +++ b/buildSrc/src/main/kotlin/org/jetbrains/DokkaVersion.kt @@ -21,3 +21,6 @@ private fun dokkaVersionFromBase(baseVersion: String): String { } return "$baseVersion-$buildNumber" } + +val Project.dokkaVersion: String + get() = configureDokkaVersion() diff --git a/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt new file mode 100644 index 00000000..84c48b96 --- /dev/null +++ b/buildSrc/src/main/kotlin/org/jetbrains/ValidatePublications.kt @@ -0,0 +1,79 @@ +package org.jetbrains + +import com.jfrog.bintray.gradle.BintrayExtension +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.Project +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 +import org.gradle.kotlin.dsl.provideDelegate + +open class ValidatePublications : DefaultTask() { + class MissingBintrayPublicationException(project: Project, publication: MavenPublication) : GradleException( + "Project ${project.path} has publication ${publication.name} that is not configured for bintray publication" + ) + + class UnpublishedProjectDependencyException( + project: Project, dependencyProject: Project + ) : GradleException( + "Published project ${project.path} cannot depend on unpublished projed ${dependencyProject.path}" + ) + + + @TaskAction + fun validatePublicationConfiguration() { + @Suppress("LocalVariableName") + project.subprojects.forEach { subProject -> + val publishing = subProject.extensions.findByType() ?: return@forEach + publishing.publications + .filterIsInstance() + .filter { it.version == project.dokkaVersion } + .forEach { publication -> + checkPublicationIsConfiguredForBintray(subProject, publication) + checkProjectDependenciesArePublished(subProject) + } + } + } + + private fun checkPublicationIsConfiguredForBintray(project: Project, publication: MavenPublication) { + val bintrayExtension = project.extensions.findByType() + ?: throw MissingBintrayPublicationException(project, publication) + + val isPublicationConfiguredForBintray = bintrayExtension.publications.orEmpty() + .any { publicationName -> publicationName == publication.name } + + if (!isPublicationConfiguredForBintray) { + throw MissingBintrayPublicationException(project, publication) + } + } + + private fun checkProjectDependenciesArePublished(project: Project) { + (project.configurations.findByName("implementation")?.allDependencies.orEmpty() + + project.configurations.findByName("api")?.allDependencies.orEmpty()) + .filterIsInstance() + .forEach { projectDependency -> + val publishing = projectDependency.dependencyProject.extensions.findByType() + ?: throw UnpublishedProjectDependencyException( + project = project, dependencyProject = projectDependency.dependencyProject + ) + + val isPublished = publishing.publications.filterIsInstance() + .filter { it.version == project.dokkaVersion } + .any() + + if (!isPublished) { + throw UnpublishedProjectDependencyException(project, projectDependency.dependencyProject) + } + } + } + + init { + group = "verification" + project.tasks.named("check") { + dependsOn(this@ValidatePublications) + } + } +} diff --git a/plugins/gfm/build.gradle.kts b/plugins/gfm/build.gradle.kts index 2addd9c9..16b318fb 100644 --- a/plugins/gfm/build.gradle.kts +++ b/plugins/gfm/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.configureBintrayPublication + publishing { publications { register("gfmPlugin") { @@ -7,6 +9,8 @@ publishing { } } +configureBintrayPublication("gfmPlugin") + dependencies { compileOnly(project(":plugins:base")) testImplementation(project(":plugins:base")) diff --git a/plugins/javadoc/build.gradle.kts b/plugins/javadoc/build.gradle.kts index 4c5c22b0..ebf79f8f 100644 --- a/plugins/javadoc/build.gradle.kts +++ b/plugins/javadoc/build.gradle.kts @@ -1,5 +1,4 @@ import org.jetbrains.configureBintrayPublication -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile publishing { publications { diff --git a/plugins/jekyll/build.gradle.kts b/plugins/jekyll/build.gradle.kts index a5c10fa0..b47633db 100644 --- a/plugins/jekyll/build.gradle.kts +++ b/plugins/jekyll/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.configureBintrayPublication + publishing { publications { register("jekyllPlugin") { @@ -7,7 +9,9 @@ publishing { } } +configureBintrayPublication("jekyllPlugin") + dependencies { compileOnly(project(":plugins:base")) implementation(project(":plugins:gfm")) -} \ No newline at end of file +} diff --git a/plugins/mathjax/build.gradle.kts b/plugins/mathjax/build.gradle.kts index 0e9a16d0..67f4822f 100644 --- a/plugins/mathjax/build.gradle.kts +++ b/plugins/mathjax/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.configureBintrayPublication + publishing { publications { register("mathjaxPlugin") { @@ -5,4 +7,6 @@ publishing { from(components["java"]) } } -} \ No newline at end of file +} + +configureBintrayPublication("mathjaxPlugin") diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts index 77fbe4a7..a8345652 100644 --- a/runners/gradle-plugin/build.gradle.kts +++ b/runners/gradle-plugin/build.gradle.kts @@ -81,4 +81,4 @@ pluginBundle { } } -configureBintrayPublication("dokkaGradlePlugin", "dokkaGradlePluginPluginMarkerMaven") +configureBintrayPublication("dokkaGradlePlugin", "pluginMaven", "dokkaGradlePluginPluginMarkerMaven") -- cgit