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") } } }