Skip to content

docs(releasing): a release-check script and a release-notes prompt - #208

Merged
willkg merged 2 commits into
mainfrom
release-check-script
Sep 25, 2026
Merged

willkg merged 2 commits into
mainfrom
release-check-script

Conversation

@willkg

@willkg willkg commented Sep 25, 2026

Copy link
Copy Markdown
Member

Two changes to the release runbook, both from cutting v0.2.0.

scripts/check-release.sh

Step 6 of docs/releasing.md was a block of commands to paste into a shell. Run through its failure cases, it got several of them wrong:

case pasted commands
a bad tag printed release not found, exited 0
no tag verified the latest release instead, exited 0
a tmp/ already in the working tree deleted it
a binary reporting the wrong version exited 0: the version was never compared

scripts/check-release.sh vX.Y.Z does the same check and fails unless it passes. It requires a vX.Y.Z tag, works in a temporary directory it always removes, verifies the archive against checksums.txt, and compares the binary's version with the tag. It passes -R mozilla/markfluence, so it runs from anywhere. It lives in a new scripts/ directory because bin/ is gitignored and make clean deletes it. Tested against v0.1.0 and v0.2.0 (pass), no argument (usage, exit 2), a malformed tag (exit 2), and a missing release (exit 1).

Step 2's cleanup is now make clean.

A prompt that drafts the release notes

goreleaser publishes a list of commits as the release notes. Step 7 now has a prompt for Claude Code that needs no editing: it finds the latest published release and the tag before it, reads the commits and the issues they name, and writes notes.md in the structure the v0.2.0 notes settled on:

  • What's new, with Features and Bugs fixed
  • Backwards incompatible changes, each saying what a user must do, with a subsection when that takes more than a sentence
  • Security issues fixed

It checks each claim against the release (including which release first had a change), does not wrap paragraphs, ends with the compare link, and leaves the notes unpublished for editing.

CLAUDE.md gains a scripts/ bullet.

Step 6 of docs/releasing.md was a block of commands pasted into a shell.
It did not compare the version it printed, exited 0 when a step failed,
checked the latest release when the tag was left off, and made and
deleted a tmp/ directory in the working tree.

scripts/check-release.sh does the same check and fails unless it
passes: it requires a vX.Y.Z tag, works in a temporary directory it
always removes, verifies the archive against checksums.txt, and
compares the binary's version with the tag. Step 2's cleanup is now
make clean.
goreleaser publishes a list of commits as the release notes. Step 7 now
carries a prompt for Claude Code that finds the latest published
release and the tag before it, reads the commits and the issues they
name, and writes notes.md in the structure v0.2.0's notes settled on:
What's new (features, bugs fixed), backwards incompatible changes with
what a user must do, and security issues fixed. It checks each claim
against the release, and leaves the notes unpublished for editing.
@willkg
willkg merged commit a0a1308 into main Sep 25, 2026
1 check passed
@willkg
willkg deleted the release-check-script branch September 25, 2026 22:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant