From 55f4a5b6dfb8adcd1573dab7e543bbd65e34168e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp?= Date: Fri, 14 Jul 2023 20:35:07 +0100 Subject: [PATCH 1/5] Fix #228: reduce parallelism in task and increase parallelism between tasks (#246) * Enable configuration cache * Remove parallelism inside compatTest tasks. * Remove kotlin-dsl and only use what is used in this project (kotlin-dsl dependency and sam with receiver). This prevents us from needing to fight with kotlin-dsl overriding language versions. * Move to new KGP DSL for setting up versions. (kotlinOptions to compilerOptions) * Make compatTest past without kotlin-dsl * Revert to kotlin-dsl, it does too many things apart from the forceful version. * Fix kotlin versioning * Simplify * Un-nest * Make a change to trigger rerun of tests --- build.gradle.kts | 59 ++++++++++++------- gradle.properties | 1 + .../publishplugin/TestExtensions.kt | 8 +-- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 714d7e78..c47bc67c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,7 @@ import org.gradle.initialization.IGradlePropertiesLoader.ENV_PROJECT_PROPERTIES_PREFIX import org.gradle.initialization.IGradlePropertiesLoader.SYSTEM_PROJECT_PROPERTIES_PREFIX -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { `kotlin-dsl` @@ -161,28 +162,44 @@ sourceSets { } } -tasks { - afterEvaluate { - // This needs to be in an afterEvaluate block, - // because otherwise KotlinDslCompilerPlugins would win, and override what we've set to Kotlin 1.8. - withType().configureEach { - kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString() - // Supporting Gradle 6.0+ needs to use Kotlin 1.3. - // See https://docs.gradle.org/current/userguide/compatibility.html - kotlinOptions.apiVersion = "1.3" - // Theoretically we could use newer language version here, - // but sadly the @kotlin.Metadata created on the classes would be incompatible with Kotlin 1.3 consumers. - kotlinOptions.languageVersion = "1.3" - doFirst { - if (kotlinOptions.apiVersion == "1.3") { - // Suppress "Language version 1.3 is deprecated and its support will be removed in a future version of Kotlin". - kotlinOptions.freeCompilerArgs += "-Xsuppress-version-warnings" - } else { - TODO("Remove -Xsuppress-version-warnings suppression, or change the condition to ${kotlinOptions.languageVersion}") - } +kotlin.target.compilations.configureEach { + // Supporting Gradle 6.0+ needs to use Kotlin 1.3. + // See https://docs.gradle.org/current/userguide/compatibility.html + // For future maintainer: Kotlin 1.9.0 dropped support for Kotlin 1.3, it'll only support 1.4+. + // This means Gradle 7.0 will be the lowest supportable version for plugins. + val usedKotlinVersion = @Suppress("DEPRECATION") KotlinVersion.KOTLIN_1_3 + + compilerOptions.configure { + // Gradle fully supports running on Java 8: https://docs.gradle.org/current/userguide/compatibility.html, + // so we should allow users to do that too. + jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_1_8.toString()) + + // Suppress "Language version 1.3 is deprecated and its support will be removed in a future version of Kotlin". + freeCompilerArgs.add("-Xsuppress-version-warnings") + } + compileTaskProvider.configure { + // These two (api & lang) needs to be here instead of in compilations.compilerOptions.configure { }, + // to prevent KotlinDslCompilerPlugins overriding to Kotlin 1.8. + compilerOptions.apiVersion = usedKotlinVersion + // Theoretically we could use newer language version here, + // but sadly the @kotlin.Metadata created on the classes would be incompatible with older consumers. + compilerOptions.languageVersion = usedKotlinVersion + + // Validate that we're using the right version. + doFirst { + val api = compilerOptions.apiVersion.get() + val language = compilerOptions.languageVersion.get() + if (api != usedKotlinVersion || language != usedKotlinVersion) { + TODO( + "There's mismatch between configured and actual versions:\n" + + "apiVersion=${api}, languageVersion=${language}, configured=${usedKotlinVersion}." + ) } } } +} + +tasks { shadowJar { exclude("META-INF/maven/**", "META-INF/proguard/**", "META-INF/*.kotlin_module") manifest { @@ -228,7 +245,7 @@ tasks { withType().configureEach { dependsOn(shadowJar) useJUnitPlatform() - maxParallelForks = 8 + maxParallelForks = if (name.startsWith("compatTest")) 1 else 8 } withType().matching { it.name.startsWith("compatTest") }.configureEach { systemProperty("plugin.version", project.version) diff --git a/gradle.properties b/gradle.properties index aec0a559..8c5fc5cf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,3 @@ org.gradle.caching=true org.gradle.parallel=true +org.gradle.configuration-cache=true diff --git a/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/TestExtensions.kt b/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/TestExtensions.kt index 0d39361e..3f3d9a8b 100644 --- a/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/TestExtensions.kt +++ b/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/TestExtensions.kt @@ -20,13 +20,13 @@ import java.nio.file.Files import java.nio.file.Path fun Path.write(text: String): Path { - Files.createDirectories(parent) - toFile().writeText(text) + Files.createDirectories(this.parent) + this.toFile().writeText(text) return this } fun Path.append(text: String): Path { - Files.createDirectories(parent) - toFile().appendText(text) + Files.createDirectories(this.parent) + this.toFile().appendText(text) return this } From 38aed1bf52a8c8420fb2604a8deb9477a117d6b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp?= Date: Sat, 15 Jul 2023 09:32:03 +0100 Subject: [PATCH 2/5] Random fixes (#245) * gradlew stutterWriteLocks to get Gradle 8.2.1 * Assumption always holds * Minor fixes in Readme * Fix platform type warnings in project * Simplify comment * Reduce "yellow" in build.gradle.kts * Break long lines * Never executed on Gradle 5.x any more. * Use simpler API * Remove outdated comment * Simplify ConfigurableFileCollection setup --- README.md | 4 +-- build.gradle.kts | 32 ++++++++++++------- .../BaseNexusPublishPluginTests.kt | 17 ++-------- stutter.lockfile | 6 ++-- 4 files changed, 29 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 50168a39..c906e93b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This Gradle plugin is a turn-key solution for publishing to Nexus. You can use it to publish your artifacts to any Nexus instance (internal or public). It is great for publishing your open source to Sonatype, and then to Maven Central, in a fully automated fashion. -Vanilla Gradle is great but it cannot fully automate publications to Nexus. This plugin enables isolation of staging repositories so that you can reliably publish from CI, and each publication uses a brand new, explicitly created staging repo ([more](https://github.com/gradle-nexus/publish-plugin/issues/63)). Moreover, the plugin provides tasks to close and release staging repositories, covering the whole releasing process to Maven Central. +Vanilla Gradle is great, but it cannot fully automate publications to Nexus. This plugin enables isolation of staging repositories so that you can reliably publish from CI, and each publication uses a brand new, explicitly created staging repo ([more](https://github.com/gradle-nexus/publish-plugin/issues/63)). Moreover, the plugin provides tasks to close and release staging repositories, covering the whole releasing process to Maven Central. This plugin is intended as a replacement of the [Gradle Nexus Staging Plugin](https://github.com/Codearte/gradle-nexus-staging-plugin/) and [Nexus Publish Plugin](https://github.com/marcphilipp/nexus-publish-plugin) duo. See a dedicated [migration guide](https://github.com/gradle-nexus/publish-plugin/wiki/Migration-from-gradle_nexus_staging-plugin---nexus_publish-plugin-duo). @@ -202,7 +202,7 @@ By default, `initialize${repository.name.capitalize()}StagingRepository` task ad The description can be customized via: * `io.github.gradlenexus.publishplugin.NexusPublishExtension.getRepositoryDescription` property (default: `$group:$module:$version` of the root project) * `io.github.gradlenexus.publishplugin.InitializeNexusStagingRepository.repositoryDescription` property -* `io.github.gradlenexus.publishplugin.FindStagingRepository.getDescriptionRegex` property (regex, default: `"\\b" + Regex.escape(repositoryDescription) + "(\\s|$)"`) +* `io.github.gradlenexus.publishplugin.FindStagingRepository.descriptionRegex` property (regex, default: `"\\b" + Regex.escape(repositoryDescription) + "(\\s|$)"`) So the steps to publish and release in different Gradle invocations are: 1. Publish the artifacts to the staging repository: `./gradlew publishToSonatype` diff --git a/build.gradle.kts b/build.gradle.kts index c47bc67c..c138310b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,5 @@ +@file:Suppress("UnstableApiUsage") // Property assignment is incubating in Gradle 8.1/8.2. + import org.gradle.initialization.IGradlePropertiesLoader.ENV_PROJECT_PROPERTIES_PREFIX import org.gradle.initialization.IGradlePropertiesLoader.SYSTEM_PROJECT_PROPERTIES_PREFIX import org.jetbrains.kotlin.gradle.dsl.JvmTarget @@ -6,8 +8,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { `kotlin-dsl` id("com.gradle.plugin-publish") version "1.2.0" - // From 6.14.0 onwards Spotless requires Gradle to be on Java 11, - // but we still use Java 8 in .github/workflows/java-versions.yml. id("com.diffplug.spotless") version "6.19.0" id("com.github.johnrengelman.shadow") version "8.1.1" id("org.jetbrains.gradle.plugin.idea-ext") @@ -131,7 +131,8 @@ stutter { } } -val e2eTest by sourceSets.creating { //separate infrastructure as compatTest is called multiple times with different Java versions +// Separate infrastructure as compatTest is called multiple times with different Java versions. +val e2eTest: SourceSet by sourceSets.creating { compileClasspath += sourceSets["compatTest"].output compileClasspath += sourceSets["main"].output runtimeClasspath += sourceSets["compatTest"].output @@ -214,25 +215,34 @@ tasks { dependsOn(shadowJar) } pluginUnderTestMetadata { - pluginClasspath.from.clear() - pluginClasspath.from(shadowJar) + pluginClasspath.setFrom(shadowJar) } register("e2eTest") { description = "Run E2E tests." group = "Verification" testClassesDirs = e2eTest.output.classesDirs classpath = e2eTest.runtimeClasspath - //pass E2E releasing properties to tests. Prefer environment variables which are not displayed with --info - // (unless non CI friendly properties with "." are used) - listOf("sonatypeUsername", "sonatypePassword", "signingKey", "signingPassword", "signing.gnupg.homeDir", "signing.gnupg.keyName", "signing.gnupg.passphrase").forEach { + // Pass E2E releasing properties to tests. + // Prefer environment variables which are not displayed with --info + // (unless non CI friendly properties with "." are used). + listOf( + "sonatypeUsername", + "sonatypePassword", + "signingKey", + "signingPassword", + "signing.gnupg.homeDir", + "signing.gnupg.keyName", + "signing.gnupg.passphrase" + ).forEach { val e2eName = "${it}E2E" val e2eEnvName = "${ENV_PROJECT_PROPERTIES_PREFIX}${e2eName}" - //properties defined using ORG_GRADLE_PROJECT_ are accessible in child process anyway + // Properties defined using ORG_GRADLE_PROJECT_ are accessible in child process anyway. if (project.hasProperty(e2eName) && System.getenv(e2eEnvName) == null) { + val e2eValue = project.property(e2eName)!! if (e2eName.contains(".")) { - systemProperties.put("${SYSTEM_PROJECT_PROPERTIES_PREFIX}${e2eName}", project.property(e2eName)) + systemProperty("${SYSTEM_PROJECT_PROPERTIES_PREFIX}${e2eName}", e2eValue) } else { - environment("$ENV_PROJECT_PROPERTIES_PREFIX${e2eName}", project.property(e2eName)!!) + environment("${ENV_PROJECT_PROPERTIES_PREFIX}${e2eName}", e2eValue) } } } diff --git a/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/BaseNexusPublishPluginTests.kt b/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/BaseNexusPublishPluginTests.kt index fdeba797..3f429764 100644 --- a/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/BaseNexusPublishPluginTests.kt +++ b/src/compatTest/kotlin/io/github/gradlenexus/publishplugin/BaseNexusPublishPluginTests.kt @@ -26,7 +26,6 @@ import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome import org.gradle.util.GradleVersion -import org.junit.jupiter.api.Assumptions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test @@ -60,7 +59,7 @@ abstract class BaseNexusPublishPluginTests { private val gson = Gson() - protected val gradleVersion = + protected val gradleVersion: GradleVersion = System.getProperty("compat.gradle.version")?.let { GradleVersion.version(it) } ?: GradleVersion.current() private val gradleRunner = GradleRunner.create() @@ -540,11 +539,6 @@ abstract class BaseNexusPublishPluginTests { @Test @Disabled("Fails on my Fedora...") fun `uses configured connect timeout`() { - Assumptions.assumeTrue( - gradleVersion >= GradleVersion.version("5.0"), - "Task timeouts were added in Gradle 5.0" - ) - // Taken from https://stackoverflow.com/a/904609/5866817 val nonRoutableAddress = "10.255.255.1" @@ -1037,15 +1031,10 @@ abstract class BaseNexusPublishPluginTests { gradleRunner(*arguments).buildAndFail() private fun gradleRunner(vararg arguments: String): GradleRunner { - val warnings = when { - // Failing only became an option at Gradle 5.6. - gradleVersion >= GradleVersion.version("5.6") -> "fail" - else -> "all" - } return gradleRunner -// .withDebug(true) +// .withDebug(true) .withProjectDir(projectDir.toFile()) - .withArguments(*arguments, "--stacktrace", "--warning-mode=$warnings") + .withArguments(*arguments, "--stacktrace", "--warning-mode=fail") .forwardOutput() } diff --git a/stutter.lockfile b/stutter.lockfile index e073792d..6f46d4df 100644 --- a/stutter.lockfile +++ b/stutter.lockfile @@ -1,4 +1,4 @@ # DO NOT MODIFY: Generated by Stutter plugin. -java11=6.0.1,6.9.4,7.0.2,7.6.2,8.0.2,8.2 -java17=7.3.3,7.6.2,8.0.2,8.2 -java8=6.0.1,6.9.4,7.0.2,7.6.2,8.0.2,8.2 +java11=6.0.1,6.9.4,7.0.2,7.6.2,8.0.2,8.2.1 +java17=7.3.3,7.6.2,8.0.2,8.2.1 +java8=6.0.1,6.9.4,7.0.2,7.6.2,8.0.2,8.2.1 From 700bd5f724abc2f6cb38a265670d38837bd421b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 15 Jul 2023 10:46:36 +0200 Subject: [PATCH 3/5] chore(deps): update plugin com.gradle.enterprise to v3.13.4 (#233) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index fc8a473b..45942be0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("com.gradle.enterprise") version "3.13.3" + id("com.gradle.enterprise") version "3.13.4" id("org.gradle.toolchains.foojay-resolver-convention") version "0.6.0" } From c7a82093be08a630c1056b02807cafd342fe806a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp=20=28TWiStErRob=29?= Date: Thu, 13 Jul 2023 09:56:05 +0100 Subject: [PATCH 4/5] Rename Task classes --- ....kt => CloseNexusStagingRepositoryTask.kt} | 2 +- ...sitory.kt => FindStagingRepositoryTask.kt} | 2 +- ...> InitializeNexusStagingRepositoryTask.kt} | 2 +- .../publishplugin/NexusPublishPlugin.kt | 34 +++++++++---------- ...t => ReleaseNexusStagingRepositoryTask.kt} | 2 +- ...ofile.kt => RetrieveStagingProfileTask.kt} | 2 +- 6 files changed, 22 insertions(+), 22 deletions(-) rename src/main/kotlin/io/github/gradlenexus/publishplugin/{CloseNexusStagingRepository.kt => CloseNexusStagingRepositoryTask.kt} (93%) rename src/main/kotlin/io/github/gradlenexus/publishplugin/{FindStagingRepository.kt => FindStagingRepositoryTask.kt} (97%) rename src/main/kotlin/io/github/gradlenexus/publishplugin/{InitializeNexusStagingRepository.kt => InitializeNexusStagingRepositoryTask.kt} (96%) rename src/main/kotlin/io/github/gradlenexus/publishplugin/{ReleaseNexusStagingRepository.kt => ReleaseNexusStagingRepositoryTask.kt} (93%) rename src/main/kotlin/io/github/gradlenexus/publishplugin/{RetrieveStagingProfile.kt => RetrieveStagingProfileTask.kt} (95%) diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/CloseNexusStagingRepository.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/CloseNexusStagingRepositoryTask.kt similarity index 93% rename from src/main/kotlin/io/github/gradlenexus/publishplugin/CloseNexusStagingRepository.kt rename to src/main/kotlin/io/github/gradlenexus/publishplugin/CloseNexusStagingRepositoryTask.kt index b12cb4ce..5d2eda0d 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/CloseNexusStagingRepository.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/CloseNexusStagingRepositoryTask.kt @@ -19,7 +19,7 @@ package io.github.gradlenexus.publishplugin import io.github.gradlenexus.publishplugin.internal.StagingRepositoryTransitioner import org.gradle.api.tasks.options.Option -abstract class CloseNexusStagingRepository : AbstractTransitionNexusStagingRepositoryTask() { +abstract class CloseNexusStagingRepositoryTask : AbstractTransitionNexusStagingRepositoryTask() { @Option(option = "staging-repository-id", description = "staging repository id to close") fun setStagingRepositoryIdToClose(stagingRepositoryId: String) { diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepository.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepositoryTask.kt similarity index 97% rename from src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepository.kt rename to src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepositoryTask.kt index 2c6a6bbf..10ae9fce 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepository.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepositoryTask.kt @@ -27,7 +27,7 @@ import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction @Incubating -abstract class FindStagingRepository : AbstractNexusStagingRepositoryTask() { +abstract class FindStagingRepositoryTask : AbstractNexusStagingRepositoryTask() { @get:Internal abstract val registry: Property diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepository.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepositoryTask.kt similarity index 96% rename from src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepository.kt rename to src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepositoryTask.kt index 0357e79c..38a0458b 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepository.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepositoryTask.kt @@ -26,7 +26,7 @@ import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction -abstract class InitializeNexusStagingRepository : AbstractNexusStagingRepositoryTask() { +abstract class InitializeNexusStagingRepositoryTask : AbstractNexusStagingRepositoryTask() { @get:Internal abstract val registry: Property diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/NexusPublishPlugin.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/NexusPublishPlugin.kt index 313b4d26..edd2d52a 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/NexusPublishPlugin.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/NexusPublishPlugin.kt @@ -139,7 +139,7 @@ class NexusPublishPlugin : Plugin { registryProvider: Provider ) { @Suppress("UNUSED_VARIABLE") // Keep it consistent. - val retrieveStagingProfileTask = tasks.register( + val retrieveStagingProfileTask = tasks.register( "retrieve${repo.capitalizedName}StagingProfile" ) { group = PublishingPlugin.PUBLISH_TASK_GROUP @@ -149,7 +149,7 @@ class NexusPublishPlugin : Plugin { repository.convention(repo) packageGroup.convention(extension.packageGroup) } - val initializeTask = tasks.register( + val initializeTask = tasks.register( "initialize${repo.capitalizedName}StagingRepository" ) { group = PublishingPlugin.PUBLISH_TASK_GROUP @@ -158,7 +158,7 @@ class NexusPublishPlugin : Plugin { repository.convention(repo) packageGroup.convention(extension.packageGroup) } - val findStagingRepository = tasks.register( + val findTask = tasks.register( "find${repo.capitalizedName}StagingRepository" ) { group = PublishingPlugin.PUBLISH_TASK_GROUP @@ -168,14 +168,14 @@ class NexusPublishPlugin : Plugin { packageGroup.convention(extension.packageGroup) descriptionRegex.convention(extension.repositoryDescription.map { "\\b" + Regex.escape(it) + "(\\s|$)" }) } - val closeTask = tasks.register( + val closeTask = tasks.register( "close${repo.capitalizedName}StagingRepository" ) { group = PublishingPlugin.PUBLISH_TASK_GROUP description = "Closes open staging repository in '${repo.name}' Nexus instance." repository.convention(repo) } - val releaseTask = tasks.register( + val releaseTask = tasks.register( "release${repo.capitalizedName}StagingRepository" ) { group = PublishingPlugin.PUBLISH_TASK_GROUP @@ -191,11 +191,11 @@ class NexusPublishPlugin : Plugin { closeTask { mustRunAfter(initializeTask) - mustRunAfter(findStagingRepository) + mustRunAfter(findTask) } releaseTask { mustRunAfter(initializeTask) - mustRunAfter(findStagingRepository) + mustRunAfter(findTask) mustRunAfter(closeTask) } closeAndReleaseTask { @@ -216,10 +216,10 @@ class NexusPublishPlugin : Plugin { PublicationType.MAVEN -> "maven-publish" } plugins.withId(id) { - val initializeTask = rootProject.tasks.named("initialize${nexusRepo.capitalizedName}StagingRepository") - val findStagingRepositoryTask = rootProject.tasks.named("find${nexusRepo.capitalizedName}StagingRepository") - val closeTask = rootProject.tasks.named("close${nexusRepo.capitalizedName}StagingRepository") - val releaseTask = rootProject.tasks.named("release${nexusRepo.capitalizedName}StagingRepository") + val initializeTask = rootProject.tasks.named("initialize${nexusRepo.capitalizedName}StagingRepository") + val findTask = rootProject.tasks.named("find${nexusRepo.capitalizedName}StagingRepository") + val closeTask = rootProject.tasks.named("close${nexusRepo.capitalizedName}StagingRepository") + val releaseTask = rootProject.tasks.named("release${nexusRepo.capitalizedName}StagingRepository") val publishAllTask = publishingProject.tasks.register("publishTo${nexusRepo.capitalizedName}") { group = PublishingPlugin.PUBLISH_TASK_GROUP description = "Publishes all Maven/Ivy publications produced by this project to the '${nexusRepo.name}' Nexus repository." @@ -230,7 +230,7 @@ class NexusPublishPlugin : Plugin { releaseTask { mustRunAfter(publishAllTask) } - configureTaskDependencies(publishingProject, initializeTask, findStagingRepositoryTask, publishAllTask, closeTask, releaseTask, publicationRepo, publicationType) + configureTaskDependencies(publishingProject, initializeTask, findTask, publishAllTask, closeTask, releaseTask, publicationRepo, publicationType) } } } @@ -288,11 +288,11 @@ class NexusPublishPlugin : Plugin { private fun configureTaskDependencies( project: Project, - initializeTask: TaskProvider, - findStagingRepositoryTask: TaskProvider, + initializeTask: TaskProvider, + findTask: TaskProvider, publishAllTask: TaskProvider, - closeTask: TaskProvider, - releaseTask: TaskProvider, + closeTask: TaskProvider, + releaseTask: TaskProvider, artifactRepo: ArtifactRepository, publicationType: PublicationType ) { @@ -305,7 +305,7 @@ class NexusPublishPlugin : Plugin { ) publishTask { dependsOn(initializeTask) - mustRunAfter(findStagingRepositoryTask) + mustRunAfter(findTask) doFirst { if (artifactRepo is UrlArtifactRepository) { logger.info("Uploading to {}", artifactRepo.url) diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/ReleaseNexusStagingRepository.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/ReleaseNexusStagingRepositoryTask.kt similarity index 93% rename from src/main/kotlin/io/github/gradlenexus/publishplugin/ReleaseNexusStagingRepository.kt rename to src/main/kotlin/io/github/gradlenexus/publishplugin/ReleaseNexusStagingRepositoryTask.kt index 4baaf6ec..0e0f9a36 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/ReleaseNexusStagingRepository.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/ReleaseNexusStagingRepositoryTask.kt @@ -19,7 +19,7 @@ package io.github.gradlenexus.publishplugin import io.github.gradlenexus.publishplugin.internal.StagingRepositoryTransitioner import org.gradle.api.tasks.options.Option -abstract class ReleaseNexusStagingRepository : AbstractTransitionNexusStagingRepositoryTask() { +abstract class ReleaseNexusStagingRepositoryTask : AbstractTransitionNexusStagingRepositoryTask() { @Option(option = "staging-repository-id", description = "staging repository id to release") fun setStagingRepositoryIdToRelease(stagingRepositoryId: String) { diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/RetrieveStagingProfile.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/RetrieveStagingProfileTask.kt similarity index 95% rename from src/main/kotlin/io/github/gradlenexus/publishplugin/RetrieveStagingProfile.kt rename to src/main/kotlin/io/github/gradlenexus/publishplugin/RetrieveStagingProfileTask.kt index d44bc8a0..45cfef30 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/RetrieveStagingProfile.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/RetrieveStagingProfileTask.kt @@ -27,7 +27,7 @@ import org.gradle.api.tasks.TaskAction * Diagnostic task for retrieving the [NexusRepository.stagingProfileId] for the [packageGroup] from the provided [NexusRepository] and logging it */ @Incubating -abstract class RetrieveStagingProfile : AbstractNexusStagingRepositoryTask() { +abstract class RetrieveStagingProfileTask : AbstractNexusStagingRepositoryTask() { @get:Input abstract val packageGroup: Property From 83bf1a3aadda8a62bc6a523814e0758b261b3211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp=20=28TWiStErRob=29?= Date: Thu, 13 Jul 2023 10:01:15 +0100 Subject: [PATCH 5/5] Fix textual occurrences of task names --- README.md | 4 ++-- .../gradlenexus/publishplugin/FindStagingRepositoryTask.kt | 2 +- .../publishplugin/InitializeNexusStagingRepositoryTask.kt | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c906e93b..4bd7f990 100644 --- a/README.md +++ b/README.md @@ -201,8 +201,8 @@ By default, `initialize${repository.name.capitalize()}StagingRepository` task ad The description can be customized via: * `io.github.gradlenexus.publishplugin.NexusPublishExtension.getRepositoryDescription` property (default: `$group:$module:$version` of the root project) -* `io.github.gradlenexus.publishplugin.InitializeNexusStagingRepository.repositoryDescription` property -* `io.github.gradlenexus.publishplugin.FindStagingRepository.descriptionRegex` property (regex, default: `"\\b" + Regex.escape(repositoryDescription) + "(\\s|$)"`) +* `io.github.gradlenexus.publishplugin.InitializeNexusStagingRepositoryTask.repositoryDescription` property +* `io.github.gradlenexus.publishplugin.FindStagingRepositoryTask.descriptionRegex` property (regex, default: `"\\b" + Regex.escape(repositoryDescription) + "(\\s|$)"`) So the steps to publish and release in different Gradle invocations are: 1. Publish the artifacts to the staging repository: `./gradlew publishToSonatype` diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepositoryTask.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepositoryTask.kt index 10ae9fce..4b607f97 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepositoryTask.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepositoryTask.kt @@ -62,7 +62,7 @@ abstract class FindStagingRepositoryTask : AbstractNexusStagingRepositoryTask() registry.get()[repository.name] = descriptor } - // TODO: Duplication with InitializeNexusStagingRepository + // TODO: Duplication with InitializeNexusStagingRepositoryTask private fun determineStagingProfileId(repository: NexusRepository, client: NexusClient): String { var stagingProfileId = repository.stagingProfileId.orNull if (stagingProfileId == null) { diff --git a/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepositoryTask.kt b/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepositoryTask.kt index 38a0458b..a20b32fa 100644 --- a/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepositoryTask.kt +++ b/src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepositoryTask.kt @@ -48,6 +48,7 @@ abstract class InitializeNexusStagingRepositoryTask : AbstractNexusStagingReposi registry.get()[repository.name] = descriptor } + // TODO: Duplication with FindStagingRepositoryTask private fun determineStagingProfileId(repository: NexusRepository, client: NexusClient): String { var stagingProfileId = repository.stagingProfileId.orNull if (stagingProfileId == null) {