Repository navigation
Releasing On GitHub
A release is what users download and what the automatic updater installs. The official plugins all release the same way; the steps below work for any plugin.
-
Version. Raise
versioninbuild.gradle.kts(the manifest takes it from there through@VERSION@). Patch for fixes or a rebuild against newer API jars, minor for new features. -
API level. If you now use something from a newer API level, raise
"api"in the manifest and the "needs BlockDesigner X or later" line in your README and notes. Rebuilding against newer jars alone doesn't change the minimum. -
Release notes. Add a section at the top of
RELEASE_NOTES.md(see below). -
Build and test.
./gradlew jar test. Checkbuild/libs/<id>-<version>.jarexists and thatblockdesigner-plugin.jsoninside it has the new version. -
Commit and push to
main. -
Tag with the plain version and push the tag:
git tag 1.2.0 && git push origin refs/tags/1.2.0. (v1.2.0works for the updater too; the official plugins use plain tags.) -
Create the GitHub release from that tag: title
<Name> <version>, the notes section as the body, not a draft, not a pre-release, marked as latest. Attach onlybuild/libs/<id>-<version>.jar. -
Check the release page shows it as Latest with one
.jar, then run Check for updates in BlockDesigner with the previous version installed: it should update.
The official plugins keep RELEASE_NOTES.md newest first, sections separated by a line containing only ---:
# Resource Tracker 1.0.1
Kept up to date with BlockDesigner 0.4.22: built and tested against its plugin API. Nothing changes in how it works.
**Needs BlockDesigner 0.4.17 or later** (plugin API 5).
## Changed
- Built against the BlockDesigner 0.4.22 plugin API.
---For a feature release: one or two sentences on what it's about, the Needs line, then ## New, ## Changed,
## Fixed with a short bold phrase leading each bullet.
The maintainer publishes with a local script, publish_plugin.py (kept with the maintainer's local tooling, not in
the public repository; it uses the GitHub REST API with git's stored credential, no gh needed). It enforces the
checklist above, which is a good model for your own tooling:
- reads
version(a column-0version = "…"line) frombuild.gradle.ktsandrootProject.namefromsettings.gradle.kts; - takes the notes above the first
---, which must start with# <Name> <version>; - requires
build/libs/<rootProject.name>-<version>.jar, the tag pushed, andmainpushed; - creates the release (tag = version on
main, title<Name> <version>, body = the notes, latest), uploads the jar, and reports what GitHub now lists as latest.--dry-runchecks everything and changes nothing.
Because it uploads <rootProject.name>-<version>.jar and the updater looks for <id>-…, keep rootProject.name
equal to the manifest id.
If the plugin jar is built in a subproject (like Terrain Generator's plugin/), copy it into the root
build/libs/ (Terrain Generator registers a root jar task for that) so release tooling and people find it in the
usual place, and give it the <id>-<version>.jar name with base.archivesName = "<id>".
- If your plugin is listed somewhere (BlockDesigner's README lists the official ones, with the minimum version), update the listing when the minimum changed.
- Users with automatic updates get the new version at their next start; others see it on the release page.
User guide
- Getting started
- Building like in Minecraft
- Controls and keybinds
- Brushes, selections and BlockEdit
- Layers
- Reference images
- Import and export
- Camera, look and feel
- Using plugins
- User FAQ
Plugin developer wiki
Start here
How it works
- How plugins are loaded
- Lifecycle and context
- Registering features
- BlockEdit commands
- Data and settings
- Project file format
Shipping
Elsewhere