Skip to content

Commit e0f4530

Browse files
build: use nmcp instead of jreleaser (#547)
There are two issues with JReleaser: 1. It is a heavy weight plugin designed to manage the entire release process, similar to semantic-release, and it is only used for publishing to the Maven Central Publisher API. 2. Transitive dependency conflicts between Spotless 8.x and JRelease 1.x plugins prevent them being used together. This change replaces JReleaser with the GradleUp nmcp (New Maven Central Publishing) plugin. This is a much lighter weight plugin that only provides capability to publish to Maven Central. This change also updates Spotless to 8.0.0 since conflicts with JReleaser no longer occur. Signed-off-by: Mark S. Lewis <[email protected]>
1 parent 3f0b7db commit e0f4530

File tree

9 files changed

+35
-83
lines changed

9 files changed

+35
-83
lines changed

.github/workflows/release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,5 @@ jobs:
101101
SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }}
102102
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
103103
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
104-
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }}
105-
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_KEY }}
104+
MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }}
105+
MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_KEY }}

build.gradle.kts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,37 @@ plugins {
99
id("idea")
1010
alias(libs.plugins.gradle.extensions)
1111
alias(libs.plugins.spotless)
12-
alias(libs.plugins.jreleaser) apply false
12+
alias(libs.plugins.nmcp).apply(false)
13+
alias(libs.plugins.nmcp.aggregation)
1314
}
1415

1516
repositories { mavenCentral() }
1617

1718
java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
1819

20+
nmcpAggregation {
21+
centralPortal {
22+
username =
23+
System.getenv("MAVENCENTRAL_USERNAME").takeUnless { it.isNullOrEmpty() }
24+
?: extra["MAVENCENTRAL_USERNAME"].toString()
25+
password =
26+
System.getenv("MAVENCENTRAL_PASSWORD").takeUnless { it.isNullOrEmpty() }
27+
?: extra["MAVENCENTRAL_PASSWORD"].toString()
28+
publishingType = "AUTOMATIC"
29+
}
30+
}
31+
1932
dependencies {
2033
testImplementation(platform(libs.junit.bom))
2134
testImplementation(libs.junit.jupiter.api)
2235
testImplementation(libs.junit.jupiter.engine)
2336
implementation(libs.slf4j.api)
2437
annotationProcessor(libs.immutables.value)
2538
compileOnly(libs.immutables.annotations)
39+
40+
nmcpAggregation(project(":core"))
41+
nmcpAggregation(project(":spark"))
42+
nmcpAggregation(project(":isthmus"))
2643
}
2744

2845
allprojects {
@@ -44,7 +61,7 @@ allprojects {
4461
googleJavaFormat()
4562
removeUnusedImports()
4663
trimTrailingWhitespace()
47-
removeWildcardImports()
64+
forbidWildcardImports()
4865
}
4966
}
5067
}

ci/release/publish.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@ set -euo pipefail
77
git submodule foreach 'git fetch --unshallow || true'
88

99
./gradlew clean
10-
./gradlew publishAllPublicationsToStagingRepository
11-
./gradlew jreleaserDeploy
10+
./gradlew publishAggregationToCentralPortal

ci/release/sanity.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ set -euo pipefail
55
export GPG_TTY=$(tty)
66

77
echo "Validate Central Publisher API credentials."
8-
BEARER=$(printf "%s:%s" "${SONATYPE_USER}" "${SONATYPE_PASSWORD}" | base64)
8+
BEARER=$(printf "%s:%s" "${MAVENCENTRAL_USERNAME}" "${MAVENCENTRAL_PASSWORD}" | base64)
99
CODE=$(curl --request GET 'https://central.sonatype.com/api/v1/publisher/published?namespace=io.substrait&name=core&version=0.1.0' --header 'accept: application/json' --header "Authorization: Bearer ${BEARER}" -sSL -w '%{http_code}' -o /dev/null)
1010
if [[ "$CODE" =~ ^2 ]]; then
1111
echo "Central Publisher API credentials configured successfully."

core/build.gradle.kts

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import java.io.ByteArrayOutputStream
22
import java.nio.charset.StandardCharsets
3-
import org.gradle.api.provider.ValueSource
4-
import org.gradle.api.provider.ValueSourceParameters
53
import org.gradle.plugins.ide.idea.model.IdeaModel
64
import org.slf4j.LoggerFactory
75

@@ -14,7 +12,7 @@ plugins {
1412
alias(libs.plugins.protobuf)
1513
alias(libs.plugins.spotless)
1614
alias(libs.plugins.shadow)
17-
alias(libs.plugins.jreleaser)
15+
alias(libs.plugins.nmcp)
1816
id("substrait.java-conventions")
1917
}
2018

@@ -58,16 +56,12 @@ publishing {
5856
val snapshotsRepoUrl = layout.buildDirectory.dir("repos/snapshots")
5957
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
6058
}
61-
maven {
62-
name = "staging"
63-
url = stagingRepositoryUrl
64-
}
6559
}
6660
}
6761

6862
signing {
6963
setRequired({
70-
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToStagingRepository")
64+
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToNmcpRepository")
7165
})
7266
val signingKeyId =
7367
System.getenv("SIGNING_KEY_ID").takeUnless { it.isNullOrEmpty() }
@@ -82,23 +76,6 @@ signing {
8276
sign(publishing.publications["maven-publish"])
8377
}
8478

85-
jreleaser {
86-
gitRootSearch = true
87-
deploy {
88-
maven {
89-
mavenCentral {
90-
register("sonatype") {
91-
active = org.jreleaser.model.Active.ALWAYS
92-
url = "https://central.sonatype.com/api/v1/publisher"
93-
sign = false
94-
stagingRepository(file(stagingRepositoryUrl).toString())
95-
}
96-
}
97-
}
98-
}
99-
release { github { enabled = false } }
100-
}
101-
10279
// This allows specifying deps to be shadowed so that they don't get included in the POM file
10380
val shadowImplementation by configurations.creating
10481

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ SIGNING_PASSWORD = password
1616
SIGNING_KEY = ALDqwcArqwfsdqweqwrwr
1717

1818
#sonatype credentials
19-
SONATYPE_USER = admin
20-
SONATYPE_PASSWORD = password
19+
MAVENCENTRAL_USERNAME = admin
20+
MAVENCENTRAL_PASSWORD = password

gradle/libs.versions.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ guava = "33.5.0-jre"
1010
httpclient5 = "5.5.1"
1111
immutables = "2.11.4"
1212
jackson = "2.20.0"
13-
jreleaser = "1.20.0"
1413
json-smart = "2.6.0"
1514
jspecify = "1.0.0"
1615
junit = "5.13.4"
16+
nmcp = "1.2.0"
1717
picocli = "4.7.7"
1818
protobuf-plugin = "0.9.5"
1919
protobuf = "3.25.8"
@@ -23,7 +23,7 @@ scalatestplus-junit5 = "3.2.19.0"
2323
shadow = "9.2.2"
2424
slf4j = "2.0.17"
2525
spark = "3.4.4"
26-
spotless = "7.2.1"
26+
spotless = "8.0.0"
2727

2828
[libraries]
2929
antlr4 = { module = "org.antlr:antlr4", version.ref = "antlr" }
@@ -73,7 +73,8 @@ jackson = [ "jackson-databind", "jackson-annotations", "jackson-datatype-jdk8",
7373
[plugins]
7474
graal = { id = "org.graalvm.buildtools.native", version.ref = "graal-plugin" }
7575
gradle-extensions = { id = "com.github.vlsi.gradle-extensions", version.ref = "gradle-extensions" }
76-
jreleaser = { id = "org.jreleaser", version.ref = "jreleaser" }
76+
nmcp = { id = "com.gradleup.nmcp", version.ref = "nmcp" }
77+
nmcp-aggregation = { id = "com.gradleup.nmcp.aggregation", version.ref = "nmcp" }
7778
protobuf = { id = "com.google.protobuf", version.ref = "protobuf-plugin" }
7879
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
7980
spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }

isthmus/build.gradle.kts

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
alias(libs.plugins.shadow)
99
alias(libs.plugins.spotless)
1010
alias(libs.plugins.protobuf)
11-
alias(libs.plugins.jreleaser)
11+
alias(libs.plugins.nmcp)
1212
id("substrait.java-conventions")
1313
}
1414

@@ -52,16 +52,12 @@ publishing {
5252
val snapshotsRepoUrl = layout.buildDirectory.dir("repos/snapshots")
5353
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
5454
}
55-
maven {
56-
name = "staging"
57-
url = stagingRepositoryUrl
58-
}
5955
}
6056
}
6157

6258
signing {
6359
setRequired({
64-
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToStagingRepository")
60+
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToNmcpRepository")
6561
})
6662
val signingKeyId =
6763
System.getenv("SIGNING_KEY_ID").takeUnless { it.isNullOrEmpty() }
@@ -76,23 +72,6 @@ signing {
7672
sign(publishing.publications["maven-publish"])
7773
}
7874

79-
jreleaser {
80-
gitRootSearch = true
81-
deploy {
82-
maven {
83-
mavenCentral {
84-
register("sonatype") {
85-
active = org.jreleaser.model.Active.ALWAYS
86-
url = "https://central.sonatype.com/api/v1/publisher"
87-
sign = false
88-
stagingRepository(file(stagingRepositoryUrl).toString())
89-
}
90-
}
91-
}
92-
}
93-
release { github { enabled = false } }
94-
}
95-
9675
java {
9776
toolchain { languageVersion = JavaLanguageVersion.of(11) }
9877
withJavadocJar()

spark/build.gradle.kts

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
id("scala")
66
id("idea")
77
alias(libs.plugins.spotless)
8-
alias(libs.plugins.jreleaser)
8+
alias(libs.plugins.nmcp)
99
id("substrait.java-conventions")
1010
}
1111

@@ -49,16 +49,12 @@ publishing {
4949
val snapshotsRepoUrl = layout.buildDirectory.dir("repos/snapshots")
5050
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
5151
}
52-
maven {
53-
name = "staging"
54-
url = stagingRepositoryUrl
55-
}
5652
}
5753
}
5854

5955
signing {
6056
setRequired({
61-
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToStagingRepository")
57+
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToNmcpRepository")
6258
})
6359
val signingKeyId =
6460
System.getenv("SIGNING_KEY_ID").takeUnless { it.isNullOrEmpty() }
@@ -73,23 +69,6 @@ signing {
7369
sign(publishing.publications["maven-publish"])
7470
}
7571

76-
jreleaser {
77-
gitRootSearch = true
78-
deploy {
79-
maven {
80-
mavenCentral {
81-
register("sonatype") {
82-
active = org.jreleaser.model.Active.ALWAYS
83-
url = "https://central.sonatype.com/api/v1/publisher"
84-
sign = false
85-
stagingRepository(file(stagingRepositoryUrl).toString())
86-
}
87-
}
88-
}
89-
}
90-
release { github { enabled = false } }
91-
}
92-
9372
configurations.all {
9473
if (name.startsWith("incrementalScalaAnalysis")) {
9574
setExtendsFrom(emptyList())

0 commit comments

Comments
 (0)