Conversation
The pypi environment now has required reviewers, and with the publish job as a per-package matrix every release raised one deployment review per package, each one notifying every reviewer. One job means one approval. skip-existing keeps republishes working now that all dists upload together.
| pattern: dist-* | ||
| path: dist/ | ||
| merge-multiple: true |
There was a problem hiding this comment.
🔴 Partial builds produce successful releases
When a package build fails, pattern downloads the remaining artifacts and publishing can succeed. The ignored build failure lets downstream deployment and version bumps proceed after an incomplete release.
Learn more
The build job is a matrix over every discovered package. Its aggregate result becomes failure or cancelled when a package build does not complete, but the publish job runs whenever discovery succeeded. A wildcard artifact download only requires at least one matching artifact and cannot detect which expected package is absent. The publish action can therefore upload the available distributions and return success. The dependent docs, examples, and downstream-bump jobs then treat the incomplete release as complete.
Example: Suppose 78 package builds upload artifacts and livekit-plugins-openai fails before upload. The wildcard downloads the 78 available artifacts, publishes them, and returns success. The workflow bumps downstream repositories even though the new OpenAI package version is absent from PyPI.
Recommended fix: Gate the publish job on needs.build.result == 'success' while retaining always() if needed for explicit result checks. Alternatively, validate the downloaded artifacts against needs.discover.outputs.packages before publishing and fail on every missing package.
Was this helpful? React with 👍 or 👎 to provide feedback.
|
Local verification of the upload behavior (the OIDC step can't run outside Actions):
|
What
Collapse the per-package publish matrix in
publish.ymlinto a single job that downloads everydist-*artifact and runspypa/gh-action-pypi-publishonce.Why
The
pypienvironment now has required reviewers (see the hardening thread in #team-agents-tickets). Each matrix leg is its own pending deployment, so the v1.8.2 release raised one review request per package and the GitHub Slack app posted 100+ messages to #updates-code, each tagging all six reviewers.With one publish job there is one pending deployment per release: one approval click, one Slack message.
Notes
skip-existing: truekeeps republishes working. Before, a package that was already on PyPI only failed its own matrix leg. Now all dists upload from one job, so already-published files must be skipped instead of aborting the rest.dist-*pattern also matches the per-OS intermediate artifacts for blockguard and durable. They contain the same wheel filenames as the merged artifact, so merging them is a no-op.docs,deploy-examples,dispatch-downstream-bumps) already keyed off the aggregateneeds.publish.result, so their behavior is unchanged.