Skip to content

ci: make the deploy job re-runnable after a partial failure#773

Merged
bdraco merged 2 commits into
aio-libs:masterfrom
bdraco:ci/deploy-rerunnable
May 19, 2026
Merged

ci: make the deploy job re-runnable after a partial failure#773
bdraco merged 2 commits into
aio-libs:masterfrom
bdraco:ci/deploy-rerunnable

Conversation

@bdraco
Copy link
Copy Markdown
Member

@bdraco bdraco commented May 19, 2026

What do these changes do?

Make the deploy job in ci-cd.yml re-runnable after a partial
release failure.

  • The Make Release step is now gated on a preceding gh release view check, so it is skipped when the GitHub Release for the tag
    already exists (instead of failing with HTTP 422 already_exists).
  • The PyPI publish step is invoked with skip-existing: true so a
    retry does not fail on dists that were already uploaded.

If PyPI returns a 5xx (or any other transient failure after the GitHub
Release was created), the maintainer can re-run the failed deploy
job instead of cutting a brand-new release. The existence check matches
only the literal release not found reply for the not-exists branch
and re-raises anything else, so auth, rate-limit, or transient network
failures fail loudly with the real error instead of falling through to
Make Release and surfacing as a generic HTTP 422.

This is a port of aio-libs/yarl#1721 to frozenlist.

Are there changes in behavior for the user?

No. This only affects how the release pipeline recovers from partial
failures; the produced artifacts and release are unchanged.

Related issue number

No tracking issue; mirrors aio-libs/yarl#1721.

Checklist

  • I think the code is well written
  • Unit tests for the changes exist — N/A (CI workflow change, exercised by the next release run)
  • Documentation reflects the changes — N/A
  • If you provide code modification, please add yourself to CONTRIBUTORS.txt — already listed
  • Add a new news fragment into the CHANGES/ folder
Agent run details (optional, for reviewers)

Drafted with Claude Code (claude-opus-4-7); reviewed by @bdraco.

Local checks:

  • pre-commit run --files .github/workflows/ci-cd.yml CHANGES/773.contrib.rst — passed (yamllint, actionlint, changelog-filenames, GitHub Workflows validation).

Skip the Make Release step when the GitHub Release for the tag already
exists, and pass skip-existing to the PyPI publish step. This lets the
deploy job be re-run after a partial release failure (e.g. PyPI 5xx
after the GitHub Release was already created) without having to cut a
new version. The existence check matches only the literal "release not
found" reply for the not-exists branch and re-raises anything else so
auth, rate-limit, or transient network failures fail loudly with the
real error instead of falling through to Make Release.
@bdraco bdraco marked this pull request as ready for review May 19, 2026 20:11
@bdraco
Copy link
Copy Markdown
Member Author

bdraco commented May 19, 2026

no point in waiting for the other jobs. only the release flow exercises this and we know its fine in yarl

@bdraco bdraco merged commit bf111e8 into aio-libs:master May 19, 2026
14 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant