feat(python): publish sealg to PyPI so `uvx sealg` resolves
Summary
Wires a PyPI release path for the Python sealg client (python/) so it is installable by name (uvx sealg) instead of only from a checkout or git subdirectory. The package name sealg is currently free on PyPI. Auth is PyPI Trusted Publishing (OIDC) — no API token is stored.
Changes
.github/workflows/publish-python.yaml(new) — builds the sdist + wheel and publishes viapypa/gh-action-pypi-publishusing OIDC Trusted Publishing. Triggered on a dedicatedsealg-py-vX.Y.Ztag namespace so it never collides with the Rust binary'svX.Y.Zrelease (release.yml). A tag/version match guard fails the run before publishing if the tag disagrees withpython/pyproject.toml.workflow_dispatchruns a build-only validation without publishing.python/pyproject.toml— adds README long-description,license = "MIT"+ bundledLICENSE, author,[project.urls], keywords, and classifiers so the PyPI page is complete. Verified the wheel metadata and thatuvx --from ./dist/*.whl sealg --helpruns.python/LICENSE(new) — copy of the repo MIT license so the wheel bundles it.RELEASING.md— documents the one-time Trusted Publishing setup (maintainer action; CI cannot do it) and thesealg-py-vX.Y.Zrelease steps.README.md/python/README.md— lead install withuvx sealg; keep the checkout and git-subdirectory fallbacks.
Testing
- Tests pass (
make test) — wire-contract check passes (16 constants agree); package builds sdist + wheel; entrypoint runs from the built wheel. - Linting passes (
make ci)
[!IMPORTANT]
Before the first tag can publish, a maintainer must complete the one-time PyPI setup in RELEASING.md: add the trusted publisher (owner Edison-Watch, repo cli, workflow publish-python.yaml, environment pypi) as a pending publisher on PyPI, and create a pypi GitHub Environment. CI cannot do this step.
Related Issues
Closes #
🤖 Generated with Claude Code
https://claude.ai/code/session_01EpwFmgQPfugKFF9zugay6Y
Generated by Claude Code
Summary by cubic
Publishes the Python sealg client to PyPI so uvx sealg resolves without a checkout or git subdirectory.
- Adds a workflow that builds an sdist and wheel and publishes via PyPI Trusted Publishing (OIDC), with no stored API token.
- Uses the
sealg-py-vX.Y.Ztag namespace so Python releases don't collide with Rust binaryvX.Y.Zreleases; a tag/version mismatch fails before publishing, andworkflow_dispatchdoes a build-only validation. - Fills out
pyproject.tomlmetadata, bundles the MIT license, and updates the READMEs andRELEASING.md.
Migration
- A maintainer must add the trusted publisher on PyPI and create the
pypiGitHub Environment before the first tag can publish; steps are inRELEASING.md.