From 1847485d2872684d343d2776cc212d6ec4107a60 Mon Sep 17 00:00:00 2001 From: cristiangarcia Date: Fri, 23 Feb 2024 15:23:05 +0100 Subject: [PATCH] Make maven publishing CC compatible Required for KTI-1553 --- build.gradle.kts | 2 - .../plugins/KotlinBuildPublishingPlugin.kt | 63 ++++++++++--------- .../src/main/kotlin/preparePublication.kt | 45 ------------- 3 files changed, 32 insertions(+), 78 deletions(-) delete mode 100644 repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/preparePublication.kt diff --git a/build.gradle.kts b/build.gradle.kts index 68e0b26f5b1..7dddd723de7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -659,8 +659,6 @@ allprojects { } } -preparePublication() - gradle.taskGraph.whenReady { fun Boolean.toOnOff(): String = if (this) "on" else "off" val profile = if (isTeamcityBuild) "CI" else "Local" diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt index 364eb8ee83a..4197c549312 100644 --- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt +++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt @@ -14,8 +14,6 @@ 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.plugins.MavenPublishPlugin -import org.gradle.api.publish.maven.tasks.PublishToMavenRepository -import org.gradle.api.tasks.TaskProvider import org.gradle.kotlin.dsl.* import org.gradle.plugins.signing.SigningExtension import org.gradle.plugins.signing.SigningPlugin @@ -145,7 +143,38 @@ fun Project.configureDefaultPublishing( repositories { maven { name = KotlinBuildPublishingPlugin.REPOSITORY_NAME - url = file("${project.rootDir}/build/repo").toURI() + + val repo: String? = project.properties["kotlin.build.deploy-repo"]?.toString() ?: project.properties["deploy-repo"]?.toString() + val repoProvider = when (repo) { + "sonatype-nexus-staging" -> "sonatype" + "sonatype-nexus-snapshots" -> "sonatype" + else -> repo + } + + val deployRepoUrl = (project.properties["kotlin.build.deploy-url"] ?: project.properties["deploy-url"])?.toString()?.takeIf { it.isNotBlank() } + + val sonatypeSnapshotsUrl = "https://oss.sonatype.org/content/repositories/snapshots/".takeIf { repo == "sonatype-nexus-snapshots" } + + val repoUrl: String by extra( + (deployRepoUrl ?: sonatypeSnapshotsUrl ?: "file://${ + project.rootProject.layout.buildDirectory.dir("repo").get().asFile + }").toString() + ) + + val username: String? by extra( + project.properties["kotlin.build.deploy-username"]?.toString() ?: project.properties["kotlin.${repoProvider}.user"]?.toString() + ) + val password: String? by extra( + project.properties["kotlin.build.deploy-password"]?.toString() ?: project.properties["kotlin.${repoProvider}.password"]?.toString() + ) + + setUrl(repoUrl) + if (url.scheme != "file" && username != null && password != null) { + credentials { + this.username = username + this.password = password + } + } } } } @@ -164,10 +193,6 @@ fun Project.configureDefaultPublishing( dependsOn(it) } } - - tasks.withType() - .matching { it.name.endsWith("PublicationTo${KotlinBuildPublishingPlugin.REPOSITORY_NAME}Repository") } - .all { configureRepository() } } private fun Project.getSensitiveProperty(name: String): String? { @@ -188,27 +213,3 @@ private fun Project.configureSigning() { } } } - -fun TaskProvider.configureRepository() = - configure { configureRepository() } - -private fun PublishToMavenRepository.configureRepository() { - dependsOn(project.rootProject.tasks.named("preparePublication")) - notCompatibleWithConfigurationCache("Uses Task.project and Task.extensions") - doFirst { - val preparePublication = project.rootProject.tasks.named("preparePublication").get() - val username: String? by preparePublication.extra - val password: String? by preparePublication.extra - val repoUrl: String by preparePublication.extra - - repository.apply { - url = project.uri(repoUrl) - if (url.scheme != "file" && username != null && password != null) { - credentials { - this.username = username - this.password = password - } - } - } - } -} \ No newline at end of file diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/preparePublication.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/preparePublication.kt deleted file mode 100644 index b9aa42a9d76..00000000000 --- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/preparePublication.kt +++ /dev/null @@ -1,45 +0,0 @@ -import org.gradle.api.Project -import org.gradle.kotlin.dsl.* - -/* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -fun Project.preparePublication() { - tasks.register("preparePublication") { - assert(project.version != "unspecified") - - val isRelease: Boolean by extra(!project.version.toString().contains("-SNAPSHOT")) - - val repo: String? = properties["kotlin.build.deploy-repo"]?.toString() ?: properties["deploy-repo"]?.toString() - val repoProvider = when (repo) { - "sonatype-nexus-staging" -> "sonatype" - "sonatype-nexus-snapshots" -> "sonatype" - else -> repo - } - - val deployRepoUrl = (properties["kotlin.build.deploy-url"] ?: properties["deploy-url"])?.toString()?.takeIf { it.isNotBlank() } - - val sonatypeSnapshotsUrl = "https://oss.sonatype.org/content/repositories/snapshots/".takeIf { repo == "sonatype-nexus-snapshots" } - - val repoUrl: String by extra( - (deployRepoUrl ?: sonatypeSnapshotsUrl ?: "file://${ - rootProject.layout.buildDirectory.dir("repo").get().asFile - }").toString() - ) - - val username: String? by extra( - properties["kotlin.build.deploy-username"]?.toString() ?: properties["kotlin.${repoProvider}.user"]?.toString() - ) - val password: String? by extra( - properties["kotlin.build.deploy-password"]?.toString() ?: properties["kotlin.${repoProvider}.password"]?.toString() - ) - - doLast { - logger.warn( - "Deploy. url: $repoUrl, provider: $repoProvider, username: $username, password: ${"***".takeIf { password != null }}" - ) - } - } -}