Skip to content

Commit 1fbc37f

Browse files
zeevmoneyclaude
andcommitted
Migrate to new Maven Central Portal for publishing
Replace legacy OSSRH/Nexus publishing with the new Maven Central Portal: - Replace `io.github.gradle-nexus.publish-plugin` with `tech.yanand.maven-central-publish` - Remove old OSSRH repository configuration - Add `mavenCentral` block for new Central Portal API - Update publish workflow to use `publishToMavenCentralPortal` task - Update GitHub Actions to v4 and add fetch-depth for git-version plugin - Simplify workflow by separating GitHub Packages and Maven Central steps The new publishing requires a `MAVEN_CENTRAL_TOKEN` secret generated from https://central.sonatype.com/account (View Account -> Generate User Token) Fixes PER-13671 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent ccbe6fd commit 1fbc37f

2 files changed

Lines changed: 27 additions & 35 deletions

File tree

.github/workflows/publish.yaml

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Publish package to GitHub Packages
1+
name: Publish package to GitHub Packages and Maven Central
22
on:
33
release:
44
types: [ created ]
@@ -11,17 +11,19 @@ jobs:
1111
contents: read
1212
packages: write
1313
steps:
14-
- uses: actions/checkout@v2
15-
- uses: actions/setup-java@v3.11.0
14+
- uses: actions/checkout@v4
15+
with:
16+
fetch-depth: 0 # Required for git-version plugin
17+
- uses: actions/setup-java@v4
1618
with:
1719
java-version: '8'
1820
distribution: 'corretto'
1921
- name: Validate Gradle wrapper
20-
uses: gradle/wrapper-validation-action@v1
22+
uses: gradle/wrapper-validation-action@v2
23+
- name: Setup Gradle
24+
uses: gradle/actions/setup-gradle@v3
2125
- name: Verify Javadoc generation
22-
uses: gradle/gradle-build-action@v2
23-
with:
24-
arguments: javadoc
26+
run: ./gradlew javadoc
2527
- name: Check Javadoc generation
2628
run: |
2729
if [ -d "build/docs/javadoc" ]; then
@@ -30,15 +32,14 @@ jobs:
3032
echo "ERROR: Javadoc directory not found"
3133
exit 1
3234
fi
33-
- name: Publish package
34-
uses: gradle/gradle-build-action@v2
35-
with:
36-
arguments: publish publishToSonatype closeAndReleaseSonatypeStagingRepository
35+
- name: Publish to GitHub Packages
36+
run: ./gradlew publish
3737
env:
38+
GITHUB_ACTOR: ${{ github.actor }}
3839
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39-
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
40-
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
40+
- name: Publish to Maven Central
41+
run: ./gradlew publishToMavenCentralPortal
42+
env:
43+
MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
4144
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
4245
GPG_SIGNING_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }}
43-
NEXUS_TOKEN_USERNAME: ${{ secrets.NEXUS_TOKEN_USERNAME }}
44-
NEXUS_TOKEN_PASSWORD: ${{ secrets.NEXUS_TOKEN_PASSWORD }}

build.gradle

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ plugins {
1515
id 'signing'
1616
// the git-version plugin helps us to publish an auto version (taken from git tags)
1717
id 'com.palantir.git-version' version '0.13.0'
18-
// auto release to maven central (skip sonatype manual nexus release process)
19-
id("io.github.gradle-nexus.publish-plugin") version "1.1.0"
18+
// New Maven Central Portal publishing (replaces legacy OSSRH/Nexus)
19+
id 'tech.yanand.maven-central-publish' version '1.2.0'
2020
// translate json schemas to java classes
2121
// id "org.jsonschema2pojo" version "1.1.3"
2222
}
@@ -151,14 +151,6 @@ dependencies {
151151

152152
publishing {
153153
repositories {
154-
maven {
155-
name = "OSSRH"
156-
url = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
157-
credentials {
158-
username = System.getenv("OSSRH_USERNAME")
159-
password = System.getenv("OSSRH_PASSWORD")
160-
}
161-
}
162154
maven {
163155
name = "GitHubPackages"
164156
url = "https://maven.pkg.github.com/permitio/permit-java"
@@ -169,7 +161,6 @@ publishing {
169161
}
170162
}
171163

172-
173164
publications {
174165
maven(MavenPublication) {
175166
groupId = 'io.permit'
@@ -195,22 +186,22 @@ publishing {
195186
}
196187
}
197188
scm {
189+
connection = 'scm:git:git://github.com/permitio/permit-java.git'
190+
developerConnection = 'scm:git:ssh://github.com/permitio/permit-java.git'
198191
url = 'https://github.com/permitio/permit-java'
199192
}
200193
}
201194
}
202195
}
203196
}
204197

205-
nexusPublishing {
206-
repositories {
207-
sonatype {
208-
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
209-
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
210-
username = System.getenv("NEXUS_TOKEN_USERNAME")
211-
password = System.getenv("NEXUS_TOKEN_PASSWORD")
212-
}
213-
}
198+
// Maven Central Portal publishing configuration
199+
mavenCentral {
200+
repoDir = layout.buildDirectory.dir("staging-deploy")
201+
// Token from Maven Central Portal (https://central.sonatype.com/account)
202+
authToken = System.getenv("MAVEN_CENTRAL_TOKEN")
203+
// Automatically publish after uploading (set to false to manually release)
204+
publishingType = "AUTOMATIC"
214205
}
215206

216207
signing {

0 commit comments

Comments
 (0)