Repository navigation
馃懛 ci(release): move release tooling to github-workflows 6.0.1 - #3458
Merged
Merged
Conversation
gaborbernat
force-pushed
the
fix/release-contract
branch
from
October 21, 2026 13:00
2e1a798 to
8f86108
Compare
gaborbernat
force-pushed
the
fix/release-contract
branch
from
October 25, 2026 22:23
fc37abe to
eeae92f
Compare
gaborbernat
force-pushed
the
fix/release-contract
branch
2 times, most recently
from
October 26, 2026 00:02
2db06e7 to
1b049bb
Compare
gaborbernat
force-pushed
the
fix/release-contract
branch
from
October 26, 2026 00:58
1b049bb to
d3b1528
Compare
gaborbernat
force-pushed
the
fix/release-contract
branch
3 times, most recently
from
October 26, 2026 17:01
ae731a7 to
3645c7d
Compare
gaborbernat
force-pushed
the
fix/release-contract
branch
5 times, most recently
from
October 26, 2026 20:58
0a73d32 to
cfc7bdc
Compare
gaborbernat
force-pushed
the
fix/release-contract
branch
2 times, most recently
from
October 27, 2026 01:57
96f375f to
09dd5b9
Compare
Prepare releases through the github-workflows 6.0.1 reusable workflow and keep virtualenv's own tag pipeline for the wheel, sdist, zipapp, SBOMs, attestations and the signed get-virtualenv update. Trust writers: checks that re-validate a writer's work outside a pull request go. That drops the source-check job, the changelog-section and tag-format check, the lock group verification, the tag re-check before the GitHub Release, the get-virtualenv missing-file error, the post-publish pyspdxtools run, the secondary lock inputs to prepare, the release-validate group, the main-branch conditions on the upgrade jobs, the always-true news condition, the one-uv lock guard and the dirty-checkout refusal in tasks/release.py. Supply-chain checks stay. tasks/release.py follows the release-creator 4.0.0 API, passing commit SHAs to fragment_pull_requests and the commits to add_pull_request_links. Every workflow, job and step gets an emoji name, and the shell and package install steps switch to the install emoji; the development docs list the new required check names. Nab locks every group and extra into pylock.toml for CPython 3.15 on linux x86_64 and windows amd64, with a declared build group and temporary cutoff exceptions for release-creator 4.1.0 and uv 0.13.5. uv needs at least 0.13.5 for GHSA-hq85-5cpj-mr62. Hook revisions stay frozen; Dependabot updates them weekly after a seven-day cooldown and pre-commit.ci autoupdates quarterly, so the hook cooldown check and its recheck workflow go. The local release task adds the New Contributors subsection through release-creator, and next_tag no longer receives the date, which release-creator reads as the tag prefix.
gaborbernat
force-pushed
the
fix/release-contract
branch
from
October 27, 2026 04:00
09dd5b9 to
6a31cad
Compare
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.
virtualenv kept its own copy of the release steps that the other tox-dev projects share, with a hand-compiled
tasks/release-requirements.txtand tag-time checks that re-validated what maintainers had already merged. 馃殌 This PR moves release preparation, news fragment validation and the weekly release-tool relock onto tox-dev/github-workflows 6.0.1, so a fix to those steps reaches virtualenv through one pin bump. The tag pipeline stays virtualenv's own: it still builds the wheel, sdist and zipapp, attaches the SBOMs, attests every artifact and makes the signedget-virtualenvcommit.Release managers see three changes. The changelog uses the shared categories (Added, Fixed, Security, Packaging and so on) with stable anchors per release and section. Credits come from the human commit authors and co-authors of each fragment's pull request, never from the fragment text or a bot account. Fragments are named
+short-description.<type>.rst, and the squash merge supplies the PR number.Architecture
github-workflowsowns the generic parts: the prepare workflow that builds the changelog, commits and tags, the relock workflow, and actions for news validation, notes rendering, PyPI reconciliation and GitHub Release publishing. virtualenv's tag workflow calls those actions as steps and keeps the zipapp, SBOM andget-virtualenvjobs. Each job downloads artifacts by the ID its upstream job returned. The localtox r -e releasepath calls the release-creator 4.1.0 library for the version bump, PR links and New Contributors section, so a local run produces the same changelog as the shared prepare.flowchart LR Tag[Tag push] --> Build[Build wheel, sdist, zipapp] Tag --> Notes[Render notes] Build --> Attest[Attest] Attest --> PyPI[Publish to PyPI] Notes --> PyPI PyPI --> Reconcile[Verify PyPI files] Reconcile --> GHR[GitHub Release] Notes --> GHR GHR --> Boot[Update get-virtualenv] Boot --> Verify[Verify installs and bootstrap.pypa.io] classDef shared fill:#cfe4ff,stroke:#1f6feb,color:#0b1f3a; classDef own fill:#ffe3a3,stroke:#d29200,color:#3a2c00; class Notes,Reconcile,GHR shared; class Tag,Build,Attest,PyPI,Boot,Verify own;The release path now trusts people with write access: the PR merge is where their changes get checked. The tag run drops the source check, the changelog-section and tag-format checks, the lock re-verification and the post-publish SPDX run, and
tasks/release.pyno longer refuses a dirty checkout. The supply-chain guards stay: sealed artifact hashes, attestations, PyPI reconciliation, the byte comparison of published files and theget-virtualenvmismatch errors.nab locks every dependency group into
pylock.tomlfor CPython 3.15 on linux x86_64, where the release jobs run, and on windows amd64, where CI builds the zipapp. Abuildgroup holds the build backend pluscythonandsetuptools, since PyYAML has no cp315 wheel.pylock.zipapp.tomlstays the zipapp lock, and the shared news check and weekly relock cover it too.The embedded wheel upgrade now validates its patch in a read-only job. The write job checks that patch's SHA-256 and applies it with
git apply, without running project Python code.Hook revisions are frozen to commit SHAs. Dependabot's
pre-commitecosystem bumps them weekly after a seven-day cooldown, and pre-commit.ci autoupdates quarterly.