From 772eeb04651921587f81d60e0195f6a834016736 Mon Sep 17 00:00:00 2001 From: Adrian Kuta Date: Tue, 9 Sep 2025 09:12:20 +0200 Subject: [PATCH] Migrate publishing to Sonatype s01 and Central Portal - 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. --- README.md | 21 +++++++++++++++++++++ build.gradle.kts | 28 +++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5a5a157..ad4ae80 100644 --- a/README.md +++ b/README.md @@ -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, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 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. diff --git a/build.gradle.kts b/build.gradle.kts index 2f70a1a..de3ae20 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,6 +21,10 @@ if (secretFile.exists()) { project.ext[name.toString()] = value } } 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["ossrhPassword"] = System.getenv("OSSRH_PASSWORD") project.ext["sonatypeStagingProfileId"] = System.getenv("SONATYPE_STAGING_PROFILE_ID") @@ -74,15 +78,29 @@ publishing { repositories { maven { - name = "Sonatype" - val releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2" - val snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots" + name = "SonatypeS01" + // s01 is the supported Nexus host for Central publishing via Maven-compatible uploads + 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) 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 ossrhPassword: String? by project - username = ossrhUsername - password = ossrhPassword + username = centralUsername + ?: CENTRAL_USERNAME + ?: ossrhUsername + ?: System.getenv("CENTRAL_USERNAME") + ?: System.getenv("OSSRH_USERNAME") + password = centralPassword + ?: CENTRAL_PASSWORD + ?: ossrhPassword + ?: System.getenv("CENTRAL_PASSWORD") + ?: System.getenv("OSSRH_PASSWORD") } } }