Skip to content

Commit f07420c

Browse files
authored
Migrate to nmcp Central Portal publishing (#770)
Publishing plugin at https://github.com/GradleUp/nmcp (MIT license). This plugin has frequent releases and looks actively maintained. Should also bring back snapshot publishing, and it supports "aggregated" publications out of the box.
1 parent d3c8888 commit f07420c

File tree

4 files changed

+17
-139
lines changed

4 files changed

+17
-139
lines changed

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ jobs:
101101
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
102102
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.OSSRH_ACCESS_ID }}
103103
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.OSSRH_TOKEN }}
104-
run: ./gradlew publishAggregateMavenCentralDeployment -Prelease --no-scan --stacktrace
104+
run: ./gradlew publishAggregationToCentralPortal -Prelease --no-scan --stacktrace
105105

106106
- name: Bump to next development version
107107
run: echo "${NEXT_VERSION}-SNAPSHOT" > version.txt

build.gradle.kts

Lines changed: 10 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,15 @@
1414
* limitations under the License.
1515
*/
1616

17-
import io.github.zenhelix.gradle.plugin.MavenCentralUploaderPlugin.Companion.MAVEN_CENTRAL_PORTAL_NAME
18-
import io.github.zenhelix.gradle.plugin.extension.MavenCentralUploaderExtension
19-
import io.github.zenhelix.gradle.plugin.extension.PublishingType
20-
import io.github.zenhelix.gradle.plugin.task.PublishBundleMavenCentralTask
21-
import io.github.zenhelix.gradle.plugin.task.ZipDeploymentTask
2217
import java.time.Duration
23-
import org.gradle.api.publish.plugins.PublishingPlugin.PUBLISH_TASK_GROUP
2418
import org.jetbrains.gradle.ext.settings
2519
import org.jetbrains.gradle.ext.taskTriggers
2620

2721
plugins {
2822
signing
2923
alias(libs.plugins.testsummary)
3024
alias(libs.plugins.testrerun)
31-
alias(libs.plugins.maven.central.publish)
25+
alias(libs.plugins.nmcp)
3226
`cel-conventions`
3327
}
3428

@@ -41,141 +35,21 @@ tasks.named<Wrapper>("wrapper") { distributionType = Wrapper.DistributionType.AL
4135
// ORG_GRADLE_PROJECT_sonatypeUsername
4236
// ORG_GRADLE_PROJECT_sonatypePassword
4337
// Gradle targets:
44-
// publishAggregateMavenCentralDeployment
38+
// publishAggregationToCentralPortal
39+
// publishAggregationToCentralPortalSnapshots
4540
// (zipAggregateMavenCentralDeployment to just generate the single, aggregated deployment zip)
4641
// Ref: Maven Central Publisher API:
4742
// https://central.sonatype.org/publish/publish-portal-api/#uploading-a-deployment-bundle
48-
mavenCentralPortal {
49-
credentials {
43+
nmcpAggregation {
44+
centralPortal {
5045
username.value(provider { System.getenv("ORG_GRADLE_PROJECT_sonatypeUsername") })
5146
password.value(provider { System.getenv("ORG_GRADLE_PROJECT_sonatypePassword") })
47+
publishingType = if (System.getenv("CI") != null) "AUTOMATIC" else "USER_MANAGED"
48+
publishingTimeout = Duration.ofMinutes(120)
49+
validationTimeout = Duration.ofMinutes(120)
50+
publicationName = "${project.name}-$version"
5251
}
53-
54-
deploymentName = "${project.name}-$version"
55-
56-
// publishingType
57-
// AUTOMATIC = fully automatic release
58-
// USER_MANAGED = user has to manually publish/drop
59-
publishingType =
60-
if (System.getenv("CI") != null) PublishingType.AUTOMATIC else PublishingType.USER_MANAGED
61-
// baseUrl = "https://central.sonatype.com"
62-
uploader {
63-
// 2 seconds * 3600 = 7200 seconds = 2hrs
64-
delayRetriesStatusCheck = Duration.ofSeconds(2)
65-
maxRetriesStatusCheck = 3600
66-
67-
aggregate {
68-
// Aggregate submodules into a single archive
69-
modules = true
70-
// Aggregate publications into a single archive for each module
71-
modulePublications = true
72-
}
73-
}
74-
}
75-
76-
val mavenCentralDeploymentZipAggregation by configurations.creating
77-
78-
mavenCentralDeploymentZipAggregation.isTransitive = true
79-
80-
val zipAggregateMavenCentralDeployment by
81-
tasks.registering(Zip::class) {
82-
group = PUBLISH_TASK_GROUP
83-
description = "Generates the aggregated Maven publication zip file."
84-
85-
inputs.files(mavenCentralDeploymentZipAggregation)
86-
from(mavenCentralDeploymentZipAggregation.map { zipTree(it) })
87-
// archiveFileName = mavenCentralPortal.deploymentName.orElse(project.name)
88-
destinationDirectory.set(layout.buildDirectory.dir("aggregatedDistribution"))
89-
doLast { logger.lifecycle("Built aggregated distribution ${archiveFile.get()}") }
90-
}
91-
92-
val publishAggregateMavenCentralDeployment by
93-
tasks.registering(PublishBundleMavenCentralTask::class) {
94-
group = PUBLISH_TASK_GROUP
95-
description =
96-
"Publishes the aggregated Maven publications $MAVEN_CENTRAL_PORTAL_NAME repository."
97-
98-
dependsOn(zipAggregateMavenCentralDeployment)
99-
inputs.file(zipAggregateMavenCentralDeployment.flatMap { it.archiveFile })
100-
101-
val task = this
102-
103-
project.extensions.configure<MavenCentralUploaderExtension> {
104-
val ext = this
105-
task.baseUrl.set(ext.baseUrl)
106-
task.credentials.set(
107-
ext.credentials.username.flatMap { username ->
108-
ext.credentials.password.map { password ->
109-
io.github.zenhelix.gradle.plugin.client.model.Credentials.UsernamePasswordCredentials(
110-
username,
111-
password,
112-
)
113-
}
114-
}
115-
)
116-
117-
task.publishingType.set(
118-
ext.publishingType.map {
119-
when (it) {
120-
PublishingType.AUTOMATIC ->
121-
io.github.zenhelix.gradle.plugin.client.model.PublishingType.AUTOMATIC
122-
PublishingType.USER_MANAGED ->
123-
io.github.zenhelix.gradle.plugin.client.model.PublishingType.USER_MANAGED
124-
}
125-
}
126-
)
127-
task.deploymentName.set(ext.deploymentName)
128-
129-
task.maxRetriesStatusCheck.set(ext.uploader.maxRetriesStatusCheck)
130-
task.delayRetriesStatusCheck.set(ext.uploader.delayRetriesStatusCheck)
131-
132-
task.zipFile.set(zipAggregateMavenCentralDeployment.flatMap { it.archiveFile })
133-
}
134-
}
135-
136-
// Configure the 'io.github.zenhelix.maven-central-publish' plugin to all projects
137-
allprojects.forEach { p ->
138-
p.pluginManager.withPlugin("maven-publish") {
139-
p.pluginManager.apply("io.github.zenhelix.maven-central-publish")
140-
p.extensions.configure<MavenCentralUploaderExtension> {
141-
val aggregatedMavenCentralDeploymentZipPart by p.configurations.creating
142-
aggregatedMavenCentralDeploymentZipPart.description = "Maven central publication zip"
143-
val aggregatedMavenCentralDeploymentZipPartElements by p.configurations.creating
144-
aggregatedMavenCentralDeploymentZipPartElements.description =
145-
"Elements for the Maven central publication zip"
146-
aggregatedMavenCentralDeploymentZipPartElements.isCanBeResolved = false
147-
aggregatedMavenCentralDeploymentZipPartElements.extendsFrom(
148-
aggregatedMavenCentralDeploymentZipPart
149-
)
150-
aggregatedMavenCentralDeploymentZipPartElements.attributes {
151-
attribute(
152-
Usage.USAGE_ATTRIBUTE,
153-
project.getObjects().named(Usage::class.java, "publication"),
154-
)
155-
}
156-
157-
val aggregatemavenCentralDeployment by
158-
p.tasks.registering {
159-
val zip = p.tasks.findByName("zipDeploymentMavenPublication") as ZipDeploymentTask
160-
dependsOn(zip)
161-
outputs.file(zip.archiveFile.get().asFile)
162-
}
163-
164-
val artifact =
165-
p.artifacts.add(
166-
aggregatedMavenCentralDeploymentZipPart.name,
167-
aggregatemavenCentralDeployment,
168-
) {
169-
builtBy(aggregatemavenCentralDeployment)
170-
}
171-
aggregatedMavenCentralDeploymentZipPart.outgoing.artifact(artifact)
172-
173-
rootProject.dependencies.add(
174-
mavenCentralDeploymentZipAggregation.name,
175-
rootProject.dependencies.project(p.path, aggregatedMavenCentralDeploymentZipPart.name),
176-
)
177-
}
178-
}
52+
publishAllProjectsProbablyBreakingProjectIsolation()
17953
}
18054

18155
val buildToolIntegrationGradle by

buildSrc/src/main/kotlin/PublishingHelperPlugin.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import org.gradle.api.publish.PublishingExtension
3636
import org.gradle.api.publish.maven.MavenPublication
3737
import org.gradle.api.publish.tasks.GenerateModuleMetadata
3838
import org.gradle.api.tasks.PathSensitivity
39+
import org.gradle.kotlin.dsl.apply
3940
import org.gradle.kotlin.dsl.configure
4041
import org.gradle.kotlin.dsl.extra
4142
import org.gradle.kotlin.dsl.provideDelegate
@@ -53,7 +54,10 @@ constructor(private val softwareComponentFactory: SoftwareComponentFactory) : Pl
5354
project.run {
5455
extensions.create("publishingHelper", PublishingHelperExtension::class.java, this)
5556

56-
plugins.withId("io.github.zenhelix.maven-central-publish") {
57+
apply(plugin = "maven-publish")
58+
apply(plugin = "signing")
59+
60+
plugins.withId("publishing") {
5761
configure<PublishingExtension> {
5862
publications {
5963
register<MavenPublication>("maven") {

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ tomcat-annotations-api = { module = "org.apache.tomcat:annotations-api", version
6767
idea-ext = { id = "org.jetbrains.gradle.plugin.idea-ext", version = "1.3" }
6868
jandex = { id = "com.github.vlsi.jandex", version.ref = "jandexPlugin" }
6969
jmh = { id = "me.champeau.jmh", version = "0.7.3" }
70-
maven-central-publish = { id = "io.github.zenhelix.maven-central-publish", version = "0.8.0" }
70+
nmcp = { id = "com.gradleup.nmcp.aggregation", version = "1.3.0" }
7171
protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" }
7272
shadow = { id = "com.gradleup.shadow", version.ref = "shadowPlugin" }
7373
spotless = { id = "com.diffplug.spotless", version.ref = "spotlessPlugin" }

0 commit comments

Comments
 (0)