Skip to content

Releasing

Pavel Erokhin edited this page Oct 25, 2026 · 3 revisions

Releases come from the “Release” workflow on GitHub. Nothing in the repository holds the version; the workflow takes it as input.

1. Write the changelog

Add a “## X.Y.Z” section to CHANGELOG.md, written for server owners: patch for fixes, minor for features, major for breaking changes. The workflow takes its notes from there.

2. Run the workflow

gh workflow run release.yml -R MairwunNx/minecraft-worldapi -f version=X.Y.Z -f modrinth=true -f hangar=true

It builds with the version, runs the tests, tags vX.Y.Z, and publishes:

  • GitHub: a release with worldapi-paper-X.Y.Z.jar, worldapi-fabric-X.Y.Z.jar, and worldapi-neoforge-X.Y.Z.jar, each again without the version, so releases/latest/download/worldapi-fabric.jar always fetches the newest; worldapi.jar is the Paper jar, for older links.
  • Modrinth (modrinth=true): project worldapi, one version per platform: X.Y.Z+paper, X.Y.Z+fabric (with Fabric API required), and X.Y.Z+neoforge, the mods for the client or the server. It syncs MODRINTH.md as the project page.
  • Hangar (hangar=true): project MairwunNx/WorldAPI, Paper only, as X.Y.Z. The version links to the GitHub jar, since the jar is over Hangar's 15 MB limit. The Hangar page doesn't sync; edit it on the site.

The changelog input overrides the CHANGELOG.md section. Modrinth and Hangar need the MODRINTH_TOKEN and HANGAR_TOKEN secrets.

3. Check it

Watch the run with gh run watch, then look at the GitHub release, the Modrinth versions, and the Hangar versions page. Never delete or re-tag a published release; finish a half-failed one by hand.

The moonlands input, on by default, ships the release to Moonlands, my server, through its own workflow.

The expansion API

The expansion API has its own version and its own workflow. Set ExpansionApi.VERSION, add a “## X.Y.Z” section to expansion/CHANGELOG.md, then:

gh workflow run expansion.yml -R MairwunNx/minecraft-worldapi -f version=X.Y.Z

It signs com.mairwunnx:worldapi-expansion, publishes it to Maven Central at once through the Central Portal, waits until it's there, and tags expansion-vX.Y.Z. A version goes to Central once and stays. When a WorldAPI release needs a new API, release the library first.

Clone this wiki locally