Repository navigation
ci: release from annotated tags; remove CHANGELOG-archive.md - #1588
Draft
dimitri-yatsenko wants to merge 2 commits into
Draft
dimitri-yatsenko wants to merge 2 commits into
dimitri-yatsenko wants to merge 2 commits into
Conversation
dimitri-yatsenko
requested review from
MilagrosMarin,
lum-agilyti and
ttngu207
October 15, 2026 18:56
Release history now lives entirely in git tags and GitHub Releases. Every version the archive covered (0.3.2 through 0.14.3) has a tag and a release carrying its notes.
A release is now an annotated tag vX.Y.Z on master whose message is the release notes. Pushing the tag runs the new Release workflow: it checks the tag, runs the lint and test workflows as the gate, builds the package at the tag, publishes it to PyPI, creates the GitHub release with the tag's message as its notes and the wheel and sdist attached, and posts to Slack. The check (`.github/scripts/check_release_tag.sh`) fetches the tag object itself, since checkout can store an annotated tag as a lightweight ref. It fails on a lightweight tag, naming the `git tag -a` command, and on a tag whose commit is not on master. It stops without publishing on a tag whose message has a `Retroactive:` line, which marks a past release re-tagged with its notes. Running the workflow by hand from a tag publishes it to TestPyPI, or, with testpypi unchecked, repeats a failed release. This replaces release-drafter: the Manual Draft Release workflow, its configuration, and the workflow that published a release once its draft was published, including the archived upload-release-asset action. The lint and test workflows gain a workflow_call trigger so the release can run them. RELEASE_MEMO.md describes how a release is cut, and CONTRIBUTING.md points to it. Pull request titles still state the user-visible change, since the notes are written from them; labels no longer drive the notes.
dimitri-yatsenko
force-pushed
the
docs/remove-changelog-archive
branch
from
October 20, 2026 22:41
86e3038 to
4d2b8fe
Compare
This was referenced Oct 20, 2026
dimitri-yatsenko
marked this pull request as draft
October 21, 2026 16:46
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Releases become annotated tags whose messages are the release notes, and the changelog file is removed. The history lives in the tags' messages; the GitHub releases mirror them.
Releases from annotated tags
A release is an annotated tag
vX.Y.Zonmaster, created withgit tag -a vX.Y.Z --cleanup=verbatim -F notes.md. Pushing it runs the new Release workflow (.github/workflows/release.yaml):.github/scripts/check_release_tag.sh). It fetches the tag object itself, because checkout can store an annotated tag as a lightweight ref.git tag -acommand.master.Retroactive:line. Such a tag records a past release.workflow_calltrigger for this.gh release create "$TAG" --verify-tag --notes-file <the tag's message> dist/*. This replaces the archivedupload-release-assetaction.Running the workflow by hand from a tag publishes it to TestPyPI. With testpypi unchecked, it repeats a release that failed partway.
This replaces release-drafter: the Manual Draft Release workflow,
release_drafter.yaml, and the workflow that published a release once its draft was published. Labels no longer produce the notes, but a pull request's title must still state its user-visible change, because the notes are written from the titles.RELEASE_MEMO.mddescribes how to cut a release, andCONTRIBUTING.mdpoints to it.The history in the tags
Every past release that has notes has been re-tagged as an annotated tag on the same commit, with those notes as its message:
CHANGELOG-archive.md(47 versions);A version with no notes anywhere keeps its tag as it is. That applies to v0.4.8, v0.6.1, v0.7.1, v0.8.1, v0.8.2 and v0.10.2.
A re-tagged message ends like this:
No tag moved to another commit, so
pip install git+...@vX.Y.Z, the versions hatch-vcs derives, and the GitHub releases are unaffected.If your clone already has these tags, a plain
git fetch --tagsreports "would clobber existing tag" for them. Rungit fetch --force --tagsonce.With the history in the tags,
CHANGELOG-archive.mdis removed. Nothing else refers to it or to release-drafter.Checks
actionlint, with shellcheck, passes on the new and changed workflows. shellcheck passes on the check script.The check script was run on a scratch repository against five tags:
mastergit tag -acommandmastervX.Y.ZA clone that stores the annotated tag as a lightweight ref is still read as annotated.
Supersedes #1609.