Migrate publishing to Sonatype s01 and Central Portal
Some checks failed
Publish Snapshot / test (push) Has been cancelled
Publish Snapshot / Publish Snapshot (push) Has been cancelled

- Updated build script to support publishing to Sonatype's s01.oss.sonatype.org, which is compatible with the new Maven Central Portal.
- Prioritized Central Portal credentials (CENTRAL_USERNAME, CENTRAL_PASSWORD) over legacy OSSRH credentials.
- Updated repository URLs for releases and snapshots to point to s01.oss.sonatype.org.
- Added documentation in README.md explaining the new publishing setup, environment variables, and Gradle tasks.
This commit is contained in:
2025-09-09 09:12:20 +02:00
parent 456f889b9c
commit 772eeb0465
2 changed files with 44 additions and 5 deletions

View File

@@ -97,3 +97,24 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
---
## Publishing (Maven Central migration)
This project is configured to publish via Sonatype's s01.oss.sonatype.org (Nexus) which is compatible with the new Central (central.sonatype.com). The old oss.sonatype.org host is no longer used.
Environment variables supported by the build:
- CENTRAL_USERNAME / CENTRAL_PASSWORD — Central Portal user/token (preferred)
- OSSRH_USERNAME / OSSRH_PASSWORD — legacy credentials (fallback)
- SIGNING_KEY_ID / SIGNING_KEY / SIGNING_PASSWORD — PGP signing (ASCII-armored key)
- SNAPSHOT — set to true to append -SNAPSHOT to version
Gradle tasks:
- Publish all publications to Sonatype: `./gradlew publishAllPublicationsToSonatypeS01Repository`
- Or, standard publish (selects snapshots vs releases by version): `./gradlew publish`
Notes:
- Releases are uploaded to: https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
- Snapshots are uploaded to: https://s01.oss.sonatype.org/content/repositories/snapshots/
- Staging/release close and promote are handled by Sonatype. If you use CI, set the env vars in your secrets.

View File

@@ -21,6 +21,10 @@ if (secretFile.exists()) {
project.ext[name.toString()] = value project.ext[name.toString()] = value
} }
} else { } else {
// Prefer Central Portal credentials via environment variables
project.ext["centralUsername"] = System.getenv("CENTRAL_USERNAME")
project.ext["centralPassword"] = System.getenv("CENTRAL_PASSWORD")
// Fallback legacy OSSRH credentials (still supported on s01)
project.ext["ossrhUsername"] = System.getenv("OSSRH_USERNAME") project.ext["ossrhUsername"] = System.getenv("OSSRH_USERNAME")
project.ext["ossrhPassword"] = System.getenv("OSSRH_PASSWORD") project.ext["ossrhPassword"] = System.getenv("OSSRH_PASSWORD")
project.ext["sonatypeStagingProfileId"] = System.getenv("SONATYPE_STAGING_PROFILE_ID") project.ext["sonatypeStagingProfileId"] = System.getenv("SONATYPE_STAGING_PROFILE_ID")
@@ -74,15 +78,29 @@ publishing {
repositories { repositories {
maven { maven {
name = "Sonatype" name = "SonatypeS01"
val releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2" // s01 is the supported Nexus host for Central publishing via Maven-compatible uploads
val snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots" val releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
val snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl) url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
credentials { credentials {
// Prefer Central Portal credentials when provided, fallback to legacy OSSRH credentials
val centralUsername: String? by project
val centralPassword: String? by project
val CENTRAL_USERNAME: String? by project
val CENTRAL_PASSWORD: String? by project
val ossrhUsername: String? by project val ossrhUsername: String? by project
val ossrhPassword: String? by project val ossrhPassword: String? by project
username = ossrhUsername username = centralUsername
password = ossrhPassword ?: CENTRAL_USERNAME
?: ossrhUsername
?: System.getenv("CENTRAL_USERNAME")
?: System.getenv("OSSRH_USERNAME")
password = centralPassword
?: CENTRAL_PASSWORD
?: ossrhPassword
?: System.getenv("CENTRAL_PASSWORD")
?: System.getenv("OSSRH_PASSWORD")
} }
} }
} }