Repository navigation
👷 ci(release): release through tox-dev/github-workflows 6.0.1 - #275
Merged
Merged
Conversation
gaborbernat
force-pushed
the
fix/release-contract
branch
9 times, most recently
from
October 26, 2026 20:58
adbe948 to
7dfa79f
Compare
gaborbernat
force-pushed
the
fix/release-contract
branch
4 times, most recently
from
October 27, 2026 01:57
59b086d to
0c8be6c
Compare
Prepare releases from Towncrier fragments through github-workflows 6.0.1 and publish the tag with the shared Python release workflow. The changelog gets user-facing categories, stable anchors and author credits for the 19 tagged sections, and a CONTRIBUTING guide explains fragments and how credits come from commit authors and co-authors. Nab writes pylock.toml for every group from a [tool.nab] table on CPython 3.15 linux_x86_64, with a temporary upload cutoff exception for release-creator 4.1.0. A build group locks the hatchling backend with Cython and setuptools, because PyYAML has no CPython 3.15 wheel. The unused release, release-check and release-validate groups are gone. The tag workflow runs under a per-tag concurrency group. A read-only notes job renders the changelog section in parallel with the build. PyPI uploads no longer skip existing files. One job then verifies the PyPI digests and creates the GitHub Release. Checks that only a writer could defeat are dropped: the tag re-check before the GitHub Release, the main-branch condition on prepare, and the pull_request condition that repeated news.yaml's only trigger. Every workflow, job and step carries an emoji name. The required checks become "🚦 Required checks pass" and "📝 News fragment". Dependabot's pre-commit ecosystem and pre-commit.ci's quarterly autoupdate handle hook updates, so there is no hook cooldown check. CodeQL moves from default setup to a committed advanced workflow on ubuntu-26.04 with the same languages and query suite.
gaborbernat
force-pushed
the
fix/release-contract
branch
from
October 27, 2026 04:00
0c8be6c to
8cabff7
Compare
gaborbernat
marked this pull request as ready for review
October 27, 2026 05:39
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.
Releasing pytest-print used to depend on bash written into this repo's workflows: it bumped the version from a dropdown, pasted fragment files into
CHANGELOG.mdand built the GitHub Release text withawk. This PR hands that work to tox-dev/github-workflows 6.0.1 and release-creator 4.1.0. 🚀 A maintainer dispatches🏷️ Prepare release; with the defaultautobump the version follows the pending Towncrier fragments, and the changelog credits the commit authors and co-authors and lists first-time contributors.Contributors see the change in two places. The new
CONTRIBUTING.md, linked from the README, lists the ten fragment categories, says which ones select a minor or major version, and asks for no hand-written credits. The 19 existing changelog sections are rewritten into those categories with stable anchors and author credits; entries that only covered CI, tooling or refactors are gone, so 1.2.1 and 1.2.2 keep only their headings.Architecture
The shared prepare workflow splits the work in two. A read-only job builds the changelog and uploads a release patch; a second job in the
release-authenvironment, which deploys only frommain, applies that patch, creates a GitHub App token and pushes the commit and tag. The App key never reaches the job that runs Towncrier and the hooks.The tag starts
release.yaml, which runs one release at a time per tag. The shared build makes the wheel and sdist against the locked build backend while a read-only job renders the GitHub Release body from the tagged changelog section. PyPI publishing uses trusted publishing with attestations. The last job compares every built file with PyPI and checks its attestation, then publishes the GitHub Release.flowchart LR Dispatch[Prepare release dispatch] --> Assemble[Assemble changelog, read-only] Assemble --> Push[Push commit and tag, release-auth] Push --> Build[Build wheel and sdist] Push --> Notes[Render release notes] Build --> PyPI[Publish to PyPI] Notes --> GHR[Verify PyPI files, publish GitHub Release] PyPI --> GHR classDef ro fill:#cfe4ff,stroke:#1f6feb,color:#0b1f3a; classDef write fill:#ffe3a3,stroke:#d29200,color:#3a2c00; class Dispatch,Assemble,Build,Notes ro; class Push,PyPI,GHR write;Checks that only caught a mistake by someone with write access are gone: prepare no longer requires
refs/heads/main, and the tag run no longer checks the tag's shape or the distribution file names. The fork guard ongithub.repositorystays. The news check moves to its own📝 Changelogworkflow, which requires a fragment on human PRs, so🚦 Required checks passnow gates only the test matrix. Each workflow, job and step gets an emoji name.Dependencies
pylock.toml, generated by Nab 0.0.22 for CPython 3.15 onlinux_x86_64, pins the release tools, including release-creator 4.1.0. Thebuildgroup locks the hatchling backend plus Cython and setuptools, since PyYAML is locked as an sdist only. release-creator 4.1.0 is newer than the seven-day upload cutoff, so[tool.nab]carries an exception for it. A weekly🔒 Upgrade release toolsworkflow opens the relock PR. The tox environments still install their dependency groups without the lock.Hook updates move to Dependabot's
pre-commitecosystem, weekly on Tuesday with a seven-day cooldown, and pre-commit.ci autoupdates quarterly. Hooks are pinned to frozen commit SHAs, andmdformatcomes from its upstream repo with pinned plugins. The PyPI page now renders the README through hatch-fancy-pypi-readme, so itsCHANGELOG.mdandCONTRIBUTING.mdlinks point at GitHub. The metadata switches to an SPDX license and addsFramework :: Pytest.🛡️ CodeQL
CodeQL moves from default setup to a committed workflow on
ubuntu-26.04scanning Python and the workflows with thesecurity-extendedsuite and skippingtests/, which removes theubuntu-latestmigration notice default setup produces.