Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/monetize

docs/RELEASING.md

Releasing monetize

This is monetize's part of a release: what must be true of this repository before its commit goes into a release set. The live release itself (the KVM gate host, the test2 ONE-box boot check, feeding the live boxes) is the coordinator's and runs by its own RELEASE.md. Since the owner's 2026-10-25 GO, R3 and R4 are one live release; each phase still gets its KVM gate and the test2 boot check.

xtask/tests/release_checklist.rs holds this page to the verbs that exist: every xtask verb named below is monetize's, or that of the sibling named on its line.

Release checklist

  1. One commit. The release is cut from a merged main, fetched just before. Every later step runs on that commit, from a clean clone with git lfs pull done.
  2. The full CI is green on that commit: cargo xtask ci (not --quick). It runs the lock check, the guests, the workspace tests, the detached workspaces (admin, monetize-fast, build-thing), the 12 buy trials, the Lake benches, the lint gate and, on a host with podman, both fast flows (fast --product holger, fast --product gunnar). Run the toolchain steps in the pinned CI image (ci3-…), never :live.
  3. The locks follow. cargo xtask ci --only lockcheck is green, and every nested lock is at its manifest's versions. No lock is hand-edited to make it green.
  4. The guests are the release's. cargo xtask build-guests builds the product, vendor and cloud guests from this commit. Each guest that ships is signed (.p7s under guest_trust_roots) and pinned by sha256 in private-monetize-ops' solo.toml; cargo xtask pins (private-monetize-ops) is green.
  5. The buy flow still buys. cargo xtask trials is green: the 12 buy trials on monetize_admin::linked() with the signed guests, Stripe in test mode and UpCloud on the mock.
  6. The score does not fall. cargo xtask score --out <file> is recorded with the release, and no area is lower than at the last release.
  7. The public tree builds. cargo xtask publish writes the public branch and compiles it; only the owner pushes it (--push).
  8. The open crates go out in order. The coordinator publishes them with cargo xtask open-crates (dwarves), first as --live-dry-run. A product that links a crate from crates.io (Gunnar's lone clone) is re-pointed only after its crates are published.
  9. The products follow. cargo xtask publish (private-monetize-ops) releases each product (publish <product>); it ends with the ONE box's plugin update, cargo xtask box (private-monetize-ops) plugins --apply, followed until done, before any estate is updated.
  10. Gate, boot check, then live. The KVM gate and the test2 ONE-box boot check are green for the set, and the coordinator's RELEASE.md takes it live. Nothing is deployed live from a lane.

After a release