Skip to content

馃懛 ci: unify release preparation - #867

Draft
gaborbernat wants to merge 48 commits into
mainfrom
fix/release-contract
Draft

gaborbernat wants to merge 48 commits into
mainfrom
fix/release-contract

Conversation

@gaborbernat

@gaborbernat gaborbernat commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Filelock release preparation now uses the shared Actions for version selection, RST changelog assembly, patch validation, App-authored commits and tags, and GitHub notes. The 138 PyPI versions have changelog sections with stable category anchors and human credits.

On a retry, a keyless job compares the validated distributions with PyPI and records only missing filenames. The OIDC job uploads that subset, with skip-existing limited to races on those filenames. A separate keyless job checks the complete filename and SHA-256 set before GitHub Release creation; a changed, extra, or yanked PyPI file fails that check.

The App key is available only to the final preparation job, after a keyless job formats and checks the patch. On tags, read-only jobs validate source, build distributions, select the previous tag, and render notes. Separate Contents write jobs fetch GitHub contributor metadata and stage an exact draft after note rendering. PyPI trusted publishing follows; the final writer publishes the draft after exact PyPI postflight. A retry resumes an identical draft or accepts an identical published Release; a different title or body fails validation. The old writer edited an existing Release body, including a divergent one.

The full selectable pylock.toml includes the build backend and applies a seven-day dependency cutoff to weekly refreshes. This draft pins github-workflows #3 and locks release-creator 0.5.1 from PyPI. Historical GitHub Release bodies and mismatched old tags need the planned live backfill after the code merges.

Release jobs now install only the tool groups they use from the full project lock. PyPI staging no longer waits for GitHub notes; upload still waits for the staged draft.

@gaborbernat gaborbernat added enhancement documentation skip news Internal change; exempt from the news fragment check labels Oct 20, 2026
@gaborbernat gaborbernat changed the title 馃懛 ci(release): unify preparation and history 馃懛 ci: unify release preparation Oct 20, 2026
Prepare releases with the repository App, verify the generated tree with
prek, and render GitHub notes from the tagged changelog. Pin the release
toolchain so PR rehearsals and tag jobs install the same versions.
Keep one section for each PyPI version and carry user-facing notes from
unpublished tags into the next published version. Explicit anchors keep
release and category links stable when later entries are added.
The release workflow consumes pylock.toml, so uv.lock had no consumer or
updater. Remove the unsupported Other changes guidance and wrap historical
changelog entries without changing their rendered notes, apart from
correcting malformed inline literals in 3.31.0.
The release-only pylock omitted other dependency groups and narrowed
the usable Python range. Export all selections from uv's project
resolution and keep release installs scoped to their group.
Stage only missing distributions and verify the full PyPI file set before
creating the GitHub Release. A retry can resume a partial upload while
changed files still fail verification.
Require a matching GitHub draft before PyPI staging. The zero-missing
retry path must not publish a Release when draft staging failed.
Use release-creator 0.5.0 from the project lock. Open weekly release-tool
PRs with the repo-only App so pull request checks run on those changes.
The App needs Pull requests write as well as Contents write.
Use the current shared actions and release-creator 0.5.1 to enforce
the full project lock during release work. Rerun bot PR cooldown checks
daily after their seven-day age gate.

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 enhancement skip news Internal change; exempt from the news fragment check

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant