Skip to content

docs: make stamping the changelog a step, not a comment - #91

Merged
iyashjayesh merged 1 commit into
mainfrom
docs/release-steps
Aug 29, 2026
Merged

iyashjayesh merged 1 commit into
mainfrom
docs/release-steps

Conversation

@iyashjayesh

Copy link
Copy Markdown
Owner

What happened

v1.8.0 was tagged today without a stamped changelog, and the new release workflow refused it. The workflow did its job. The instructions set it up to fail.

CONTRIBUTING.md had this:

# 1. CHANGELOG.md: move [Unreleased] entries under a dated version heading
# 2. tag and push
git tag -a v1.3.0 -m "v1.3.0"
git push origin v1.3.0

The essential step is a comment inside a bash block — inert when pasted. The tag is the only thing that runs, and it's pre-filled with a version. Anyone copying that block does exactly one thing: tag without stamping.

I reproduced the same mistake in chat when I wrote out the release flow, which is how it surfaced.

The fix

Stamping is now its own numbered step, described as a pull request, with an example of the heading it produces — and a note on why it has to land before the tag: stamping afterwards leaves the tag pointing at a tree whose changelog is missing its own entry, and that's what go get serves.

Also brings the section up to date with CI: the tag is now checked against the changelog and the release is published from it. The proxy verification stays, framed as the step CI genuinely can't do — the proxy is outside the repository, and a tag it refuses is a release that didn't happen. Which is exactly how v2.0.0 went unnoticed for months.

Not fixed, because it isn't broken

I claimed earlier the workflow printed a literal $VERSION in its error. It doesn't — that line was inside the ##[group]Run block, which is GitHub echoing the script source. The actual output resolved correctly to ## [1.8.0]. I'd misread a command echo as output.

The release instructions put "move [Unreleased] entries under a dated
version heading" as a shell comment inside a bash block, with the tag
commands runnable beneath it. Paste the block and the only thing that
executes is the tag.

That is not hypothetical: it happened today. v1.8.0 was tagged without a
stamped changelog, and the new release workflow refused it -- which is
the workflow working, but the instructions had set it up to fail.

Stamping is now its own numbered step, described as a pull request, with
an example of the heading it produces and a note on why it has to land
before the tag: stamping afterwards leaves the tag pointing at a tree
whose changelog is missing its own entry, and that is what `go get`
serves.

Also brings the section up to date with CI, which now checks the tag
against the changelog and publishes the release from it, and keeps the
proxy verification as the step CI genuinely cannot do -- the proxy is
outside the repository, and a tag it refuses is a release that did not
happen.
@iyashjayesh
iyashjayesh merged commit 824e5cf into main Aug 29, 2026
5 checks passed
@iyashjayesh
iyashjayesh deleted the docs/release-steps branch August 29, 2026 21:59
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