Skip to content

馃懛 ci: unify release preparation - #637

Draft
gaborbernat wants to merge 1 commit into
mainfrom
fix/release-contract
Draft

gaborbernat wants to merge 1 commit into
mainfrom
fix/release-contract

Conversation

@gaborbernat

@gaborbernat gaborbernat commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Releases move to the shared github-workflows 5.0.2 pipeline and release-creator 3.2.1. Shared Actions handle preparation, patch validation, App-authored commits and tags, distribution builds and release notes. The Sphinx changelog gets user-facing categories, stable release anchors and credits taken from the merge commit's authors and co-authors, and prepare runs release-creator contributors to append a New Contributors subsection. CONTRIBUTING now says fragments carry no PR number or hand-written credit. The PyPI description is rendered by hatch-fancy-pypi-readme, and the wheel declares its import name without the deprecated license classifier.

On a tag, the shared validate-python-release workflow checks the lock and builds the distributions while a read-only notes job renders the release body from the changelog in parallel. PyPI upload goes through OIDC and no longer skips existing files. After the published digests and attestations are verified, the release job re-checks that the tag still names the release commit and creates the GitHub Release with a single call; the separate draft stage and GitHub's generated notes are gone. Jobs download the distributions and notes by artifact ID rather than by name. The workflow runs under a release-${{ github.ref }} concurrency group that cancels superseded pull request and branch runs but never a tag run.

pylock.toml is now written by Nab from a [tool.nab] table (universal mode, seven-day cutoff, CPython 3.15 on Linux x86_64, the only platform where CI installs from the lock), with a temporary exception that lets release-creator 3.2.1 in before its seven days are up; it is to be deleted after 2026-11-02. A build group locks the hatchling backend together with Cython and setuptools, because PyYAML has no CPython 3.15 wheel. The unreferenced release-check group is removed. Test, type and docs CI still resolve current dependencies, and the weekly lock refresh PR describes itself as a relock of pylock.toml.

Hook updates now come from Dependabot's pre-commit ecosystem with a seven-day cooldown and pre-commit.ci's quarterly autoupdate. The hook cooldown check, its scheduled recheck and the release-creator managed hook pins are removed, and revisions stay frozen to commit SHAs. The workflows pin setup-uv 10.3.2, which installs uv 0.13.5.

GitHub Releases 3.0.1 and 4.9.3 have no matching PyPI versions. Review those before backfilling their release descriptions.

https://claude.ai/code/session_012aAwoCsFZo25Xq5goFey4m

@gaborbernat gaborbernat added documentation Improvements or additions to documentation enhancement New feature or request skip news No news fragment needed labels Oct 20, 2026
@gaborbernat gaborbernat changed the title 馃懛 ci(release): unify preparation and history 馃懛 ci: unify release preparation Oct 20, 2026
@gaborbernat
gaborbernat force-pushed the fix/release-contract branch 2 times, most recently from e712c69 to fc28348 Compare October 26, 2026 00:00
Move releases to the shared github-workflows 5.0.2 pipeline and
release-creator 3.2.1. Preparation, patch validation, App-authored commits
and tags, distribution builds and release notes come from the shared
Actions. The Sphinx changelog gets user-facing categories, stable release
anchors and credits from commit authors and co-authors, and the PyPI
description is rendered by hatch-fancy-pypi-readme. CONTRIBUTING explains
that fragments carry no hand-written credit and that prepare runs
release-creator contributors.

The tag workflow builds and checks the lock in parallel with a read-only
notes job, uploads to PyPI through OIDC, verifies the published digests,
re-checks that the tag still names the release commit and creates the
GitHub Release with one call. Distributions and notes pass between jobs by
artifact ID. Tag runs never cancel; pull request and branch runs do.

Nab writes pylock.toml from a [tool.nab] table, with a temporary upload
cutoff exception for release-creator 3.2.1. A build group locks the
hatchling backend with Cython and setuptools, because PyYAML has no
CPython 3.15 wheel. The unused release-check group goes.

Dependabot's pre-commit ecosystem and pre-commit.ci's quarterly autoupdate
own hook updates, so the hook cooldown check and the managed hook pins go.

Claude-Session: https://claude.ai/code/session_012aAwoCsFZo25Xq5goFey4m

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request skip news No news fragment needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants