ci: bump pypa/gh-action-pypi-publish to v1.14.2, release arcade-serve 3.4.2 - #908
Conversation
The pinned commit (cef2210, 2026-02-18) bundles twine 6.1.0 / packaging
25.0, which only recognizes core metadata versions up to 2.4. The
Hatchling that `uv build` resolves now emits `Metadata-Version: 2.5`, so
twine rejected the distributions before upload:
InvalidDistribution: Invalid distribution metadata:
'2.5' is not a valid metadata version
This blocked the arcade-serve 3.4.1 release. v1.14.2 bundles twine 7.0.0
/ packaging 26.2, which parses the failing artifacts without error.
Greptile SummaryThe PR updates the SHA-pinned PyPI publishing action to the v1.14.2 commit and bumps
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| .github/workflows/release-on-version-change.yml | Updates the SHA-pinned PyPI publisher to the commit underlying v1.14.2, preserving the existing artifact path and trusted-publishing configuration. |
| libs/arcade-serve/pyproject.toml | Bumps the package patch version to 3.4.2; existing dependent constraints continue to accept this version. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[Merge to main] --> B[Detect arcade-serve version change]
B --> C[Build and test 3.4.2]
C --> D[Download distributions]
D --> E[Publish with gh-action-pypi-publish v1.14.2]
E --> F[arcade-serve 3.4.2 on PyPI]
Reviews (4): Last reviewed commit: "ci: pin publish action to the v1.14.2 co..." | Re-trigger Greptile
Codecov Report✅ All modified and coverable lines are covered by tests. 🚀 New features to boost your workflow:
|
3.4.1 was built but never uploaded, so the release workflow has to be re-triggered to get these changes onto PyPI. That workflow only fires on a push to main whose diff contains a changed `version = ` line in a package's pyproject.toml, so republishing requires a new version number. No code changes since 3.4.1; the downstream constraint in arcade-mcp-server (`arcade-serve>=3.4.0,<4.0.0`) still holds.
| [project] | ||
| name = "arcade-serve" | ||
| version = "3.4.1" | ||
| version = "3.4.2" |
There was a problem hiding this comment.
required to rerun the gha
Conflict in the pypi-publish action pin. #901 (dependabot) moved it to ba38be9e, which still bundles twine 6.1.0 / packaging 25.0 and therefore still rejects `Metadata-Version: 2.5`. Kept this branch's a892a5a (v1.14.2, twine 7.0.0 / packaging 26.2), which is a descendant of ba38be9e, so nothing from #901 is lost.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit d4462c3. Configure here.
v1.14.2 is an annotated tag, so `git/refs/tags/v1.14.2` resolves to the tag object (a892a5a) rather than the commit it points at. GitHub Actions resolves `uses: owner/repo@<sha>` against commits only, so the previous pin would have failed to resolve the action. dc37677 is the commit v1.14.2 points at. It carries the same twine 7.0.0 / packaging 26.2 that this change is after, and still has ba38be9e (the pin from #901) as an ancestor.

What broke
The
arcade-serve3.4.1 release never reached PyPI. Thepypi-publishjob in run 31654382725 failed at the upload step:PyPI still shows 3.4.0 as latest.
detect-version-changesandbuild-and-testboth passed; only the publish step failed.Why
The publish step was pinned to
cef2210, arelease/v1commit from 2026-02-18 that bundles twine 6.1.0 / packaging 25.0. That packaging release only recognizes core metadata versions up to 2.4.Meanwhile the build step runs
uv build, which resolves the newest Hatchling at build time, and that now emitsMetadata-Version: 2.5. Both the wheel and the sdist from the failing run carry 2.5. Nothing changed in the package itself; the build side moved forward and the pinned publisher did not.Verification
I downloaded the actual artifacts from the failing run and parsed them with both packaging versions:
packaging==25.0(pinned action) rejects the wheel:invalid or unparsed metadatapackaging==26.2(v1.14.2) parses it and reportsmetadata_version = 2.5v1.14.2 bundles twine 7.0.0 / packaging 26.2.
The changes
a892a5a), still SHA-pinned.arcade-serveto 3.4.2.The version bump is here rather than in a follow-up PR because of how the release workflow triggers. It fires only on a push to
main, andcheck-version-changes.shlooks for a changedversion =line in theHEAD^..HEADdiff of a package'spyproject.toml. A workflow-only fix would merge without releasing anything, and re-running the failed job would not help either, since a re-run uses the workflow file as of the original triggering commit and would pick up the old pin again.Merging this PR pushes both changes to
mainin one commit. That push runs the workflow with the fixed pin and the changed version line, so 3.4.2 publishes on merge.Notes
arcade-mcp-server(arcade-serve>=3.4.0,<4.0.0) still holds, so no dependent needs updating.arcade-serve. The next version bump of any package in the repo would have hit the same failure.Tracked in TOO-1850.
Note
Low Risk
CI dependency pin and a version-only release bump; no application or security logic changes.
Overview
Fixes failed PyPI uploads by SHA-pinning
pypa/gh-action-pypi-publishto v1.14.2 inrelease-on-version-change.yml, replacing an olderrelease/v1commit whose bundled twine/packaging rejected wheels built with Metadata-Version 2.5.Triggers a new release by bumping
arcade-servefrom 3.4.1 → 3.4.2 inlibs/arcade-serve/pyproject.tomlso the version-change workflow runs on merge with the fixed publisher (3.4.1 never shipped; 3.4.2 is a republish with no package code changes).Reviewed by Cursor Bugbot for commit 9f889a5. Bugbot is set up for automated code reviews on this repo. Configure here.