Skip to content

fix(ci): publish with an action that accepts Metadata-Version 2.5 - #26

Merged
abrichr merged 1 commit into
mainfrom
fix/pypi-publish-metadata-2-5
Aug 19, 2026
Merged

fix(ci): publish with an action that accepts Metadata-Version 2.5#26
abrichr merged 1 commit into
mainfrom
fix/pypi-publish-metadata-2-5

Conversation

@abrichr

@abrichr abrichr commented Aug 19, 2026

Copy link
Copy Markdown
Member

Problem

.github/workflows/publish.yml pinned pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b (v1.14.0). That version bundles twine 6.1.0 and packaging 25.0, which reject Metadata-Version: 2.5:

InvalidDistribution: Invalid distribution metadata: '2.5' is not a valid metadata version

This repo is exposed. [build-system] requires unpinned hatchling, and build_command ends in uv build — so the release job builds with current hatchling, which emits Metadata-Version: 2.5.

This is not hypothetical. The same pin broke the openadapt-evals 0.91.0 release: the tag, the version-bump commit and the GitHub release all landed, then Publish to PyPI failed — leaving PyPI stale while every other release artifact claimed the version had shipped.

Fix

Move to dc37677b2e1c63e2034f94d8a5b11f265b73ba33 (v1.14.2, twine 7.0.0 + packaging 26.2).

Same pin openadapt-flow and openadapt-capture already use; applied to openadapt-evals in OpenAdaptAI/openadapt-evals#291 and to openadapt-privacy in OpenAdaptAI/openadapt-privacy#14.

An org-wide sweep of every .github/workflows/*.yml on every default branch found openadapt-types and openadapt-privacy were the last two repos still carrying the broken pin.

Verification

Both SHAs were resolved against upstream rather than copied:

tag commit
v1.14.0 cef221092ed1bacb1cc03d23a2d87d1d172e277b (removed)
v1.14.2 dc37677b2e1c63e2034f94d8a5b11f265b73ba33 (added)

The workflow still parses as valid YAML, and the pin remains a full 40-character commit SHA with the human-readable version in a trailing comment.

Note on merging

patch_tags = ["fix", "perf"], so squash-merging this fix(ci): title cuts a patch release. That is intentional — it exercises the new publish pin end to end rather than leaving the fix unproven until the next feature release.

🤖 Generated with Claude Code

pypa/gh-action-pypi-publish v1.14.0 bundles twine 6.1.0 and packaging
25.0, which reject Metadata-Version 2.5 -- the version current hatchling
emits. The publish step fails with:

  InvalidDistribution: Invalid distribution metadata:
  '2.5' is not a valid metadata version

This repo builds with unpinned hatchling via the semantic-release
build_command, so it emits 2.5 and is exposed to exactly this failure.

This is not hypothetical: the same pin broke the openadapt-evals 0.91.0
release. The tag, the version-bump commit and the GitHub release all
landed, then "Publish to PyPI" failed, leaving PyPI stale while every
other release artifact said the version had shipped.

Move to v1.14.2 (twine 7.0.0 + packaging 26.2), the pin openadapt-flow
and openadapt-capture already use and the one applied to openadapt-evals
in OpenAdaptAI/openadapt-evals#291.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@abrichr
abrichr merged commit bdaca39 into main Aug 19, 2026
1 check passed
@abrichr
abrichr deleted the fix/pypi-publish-metadata-2-5 branch August 19, 2026 22:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant