Sharingan ships two artifacts to Maven Central under io.github.mibrahimdev:
| Coordinate | Module |
|---|---|
io.github.mibrahimdev:sharingan |
:sharingan |
io.github.mibrahimdev:sharingan-noop |
:sharingan-noop |
Releases are two steps by deliberate design: CI stages a deployment to the Central Portal, then a human verifies and releases it. We do not auto-release, because Maven Central releases are permanent and can never be unpublished (see ADR 0001).
push tag v<version> ──▶ CI stages to Central Portal ──▶ STOP (awaiting human)
│
maintainer verifies + clicks ◀─────┘
"Publish" in the portal, then
cuts the GitHub Release
-
Make sure
gradle/libs.versions.toml→sharinganholds the version you intend to release (e.g.0.1.0), and it is merged tomain. -
Tag and push:
git checkout main && git pull git tag v0.1.0 # must equal the catalog version, with a leading "v" git push origin v0.1.0
The tag must equal the catalog version or the
Assert tag matches project versionstep fails before anything is published (scripts/check-version-tag.sh). -
The
Publish to Maven Centralworkflow runs./gradlew publishToMavenCentral. This uploads both modules to a new deployment on the Central Portal and stops — nothing is public yet. The job'sStaged - next stepssummary links straight back to this checklist.
- Sign in at https://central.sonatype.com and open Deployments: https://central.sonatype.com/publishing/deployments
- Find the new deployment from the CI run. Confirm all of:
-
Status is
VALIDATED(notFAILED). If it failed, expand it to read why — do not publish a failed deployment; fix and re-stage instead. -
Both components are present under group
io.github.mibrahimdev:io.github.mibrahimdev:sharingan:<version>io.github.mibrahimdev:sharingan-noop:<version>
If only one module is there, something is wrong — drop the deployment and re-stage. Never release a half-uploaded version.
-
The version matches the tag (
<version>, no stray-SNAPSHOT). -
Each component carries its
.pom, the main artifact,-sourcesand-javadocjars, and a matching.ascsignature for every file (the portal flags missing/invalid signatures during validation). -
POM metadata looks right:
name,description, projecturl, Apache-2.0 license, developermibrahimdev, and SCM pointing at the repo.
-
- Once you are satisfied, click Publish on the deployment in the Central Portal. This releases it to Maven Central. This cannot be undone.
- If you are not satisfied, click Drop instead. The staged deployment is discarded and nothing reaches Central; fix the problem and re-stage from a new CI run (re-run the workflow or re-push the tag).
- Propagation to
repo1.maven.org/search.maven.orgtypically takes minutes to a couple of hours.
CI no longer auto-creates the GitHub Release (it would otherwise announce a "release" while the artifact is still only staged). Once the Central deployment is Published, cut the matching GitHub Release yourself:
gh release create v0.1.0 --title v0.1.0 --generate-notesThe workflow also has a workflow_dispatch trigger so you can exercise the
staged flow — and confirm it reaches the portal without releasing — without
cutting a real tag:
- GitHub → Actions → Publish to Maven Central → Run workflow.
A workflow_dispatch run has no tag, so the version-tag assertion is skipped;
it stages the current catalog version. Use this to dry-run the pipeline or to
re-stage a version whose previous deployment you dropped. Because the task is
publishToMavenCentral (stage-only), even a dispatch run will never
auto-release — it always stops at the portal awaiting your Publish click.
Recorded in ADR 0001 — Stage to Maven Central, then release manually.
Short version: Central releases are irreversible, so a human verifies the
fully-assembled, signed deployment in the portal before the one click that
makes it permanent. Do not switch the workflow back to
publishAndReleaseToMavenCentral.