Files
Iris/docs/release-checklist.md
T
Brian Neumann-Fopiano 0a7a531646 Dont ask
2026-07-09 13:54:59 -04:00

4.9 KiB

Iris Release Checklist

Manual release procedure. There is no release automation by design: every step below is run by a person and verified by eye. Work top to bottom; do not skip the verify gates.

Reference values below assume the current gradle.properties: irisVersion=4.0.0-26.2, minecraftVersion=26.2, fabricLoaderVersion=0.19.3, forgeVersion=26.2-65.0.0, neoForgeVersion=26.2.0.6-beta. For a Minecraft version bump, do docs/mc-version-bump.md first, then start this checklist.

a. Preflight

  • Working tree clean on the exact commit you intend to tag (git status shows nothing to commit).
  • CI is green on that commit. The verify job (.github/workflows/ci.yml) runs ./gradlew :core:check :spi:build :probe:deserializationProbe on JDK 25; the build-artifacts matrix builds all four platform jars. Do not release on a red or stale run.
  • MasterChangelog.MD Iris section is coherent: one consolidated entry set, deduplicated, no date-sliced headers, and it describes the current shipped state (not superseded intermediate work).
  • Version fields correct in gradle.properties: irisVersion is the release version and its trailing -<mc> suffix matches minecraftVersion. For a Minecraft bump, confirm every step in docs/mc-version-bump.md is done (loader ranges, DataVersion, NMS binding).
  • JDK 25 is the active toolchain locally (java -version reports 25).

b. Build

  • From the Iris project root: ./gradlew buildAll
  • dist/ contains the four platform jars (exact names for this release):
    • Iris v4.0.0-26.2 [CraftBukkit] 26.2.jar (Bukkit/Paper/Purpur/Spigot/Folia plugin)
    • Iris v4.0.0-26.2 [Fabric] 26.2+0.19.3.jar
    • Iris v4.0.0-26.2 [Forge] 26.2+65.0.0.jar
    • Iris v4.0.0-26.2 [NeoForge] 26.2+26.2.0.6-beta.jar
    • Naming pattern: Iris v<irisVersion> [<Platform>] <mc>[+<loaderDisplay>].jar.
  • The developer SPI jar is built by the same run at spi/build/libs/iris-spi-4.0.0-26.2.jar. It is the platform-API artifact for downstream developers and is not copied into dist/; it is not uploaded to the mod portals (see publish).
  • Each mod jar bundles core + spi + shaded libs; each plugin/mod jar is self-contained.

c. Verify (release gates)

  • :core:check and :probe:deserializationProbe passed in CI on the tag commit (a. covers this).
  • Golden-hash determinism VERIFY passes on all four platforms and matches the same hash:
    • Bukkit plugin: /iris goldenhash verify <radius> <threads>
    • Fabric mod: /iris goldenhash verify <radius> <threads>
    • Forge mod: /iris goldenhash verify <radius> <threads>
    • NeoForge mod: /iris goldenhash verify <radius> <threads>
    • The hash is interchangeable across platforms: all four MUST report identical output for the same pack and seed. Any mismatch blocks the release.
  • Live modded content-mod gate: on each loader, boot the mod jar alongside a real content mod (e.g. Create) and generate an Iris world. Confirm no load-time rejection, no class-loader crash, and that modded blocks/items/entities author and generate.
    • Fabric + content mod
    • Forge + content mod
    • NeoForge + content mod
  • Client-mod matrix: install the mod on the client (keybind H toggles the pregen HUD) and confirm:
    • Modded server + modded client: HUD receives pregen progress over irisworldgen:main.
    • Modded server + vanilla client: server generates normally; vanilla client is unaffected.
    • Paper (Bukkit) server + modded client: HUD receives pregen progress over vanilla plugin messaging.
    • Folia smoke: plugin loads and an Iris world generates on Folia.
    • Non-Iris server + modded client: client is inert, no errors.

d. Publish (all manual, no automation)

  • Modrinth: upload the three mod jars and the plugin jar. Tag loaders fabric / forge / neoforge on the mod files; mark the environment server + client; set game version 26.2.
  • CurseForge: upload the three mod jars with the matching loader tags and game version 26.2.
  • Existing plugin distribution channels: publish the plugin jar (Iris v4.0.0-26.2 [CraftBukkit] 26.2.jar) where the plugin already ships.
  • Sentry: add a release note / mark the release so incoming reports map to this version (the mod version string is the Sentry release tag).
  • Storepage / listing.json staleness review: check the listing copy for pre-4.0 content (Bukkit-only framing, old feature lists, screenshots). Flag anything stale for update before or right after launch. (Review only; this checklist does not change store copy.)

e. Post

  • Tag the release commit (v<irisVersion>) and push the tag. The release-bundle CI job (tag-gated, refs/tags/v*) runs buildAll and uploads the dist/ bundle for the record.
  • Announce the release on the community channels once the portals show the new files live.