Skip to content

feat(release): rename dist to py-sendly + tag-triggered PyPI publish workflow#1

Merged
AminDhouib merged 1 commit into
mainfrom
feat/pypi-release-workflow
Jul 15, 2026
Merged

feat(release): rename dist to py-sendly + tag-triggered PyPI publish workflow#1
AminDhouib merged 1 commit into
mainfrom
feat/pypi-release-workflow

Conversation

@AminDhouib

Copy link
Copy Markdown
Member

What

Fixes the PyPI name blocker and adds a tag-triggered publish pipeline for the Python SDK.

Distribution rename (blocker fix)

  • The plain sendly name is owned by an unrelated SMS company on PyPI, so the package could not publish as-is.
  • pyproject.toml distribution renamed to py-sendly. The import package is unchanged (import sendly) via the existing [tool.hatch.build.targets.wheel] packages = ["src/sendly"].
  • Verified locally: python -m buildpy_sendly-0.1.0 sdist + wheel, twine check PASSED, wheel Name: py-sendly with top-level sendly import package.

.github/workflows/release.yml (new)

  • Triggers only on v* tag pushes — disjoint from ci.yml (push/PR to main + weekly cron).
  • Re-runs the full gate (ruff → mypy strict → contract → pytest) then python -m build before publishing, so a red SDK can never ship.
  • Version gate: asserts the pushed tag equals both pyproject.toml version and the SDK_VERSION constant, failing fast on mismatch.
  • Publishes via PyPI Trusted Publishing (OIDC, environment pypi, id-token: write, no stored token). Nothing publishes without an explicit tag push.

README

  • Documents pip install py-sendly and notes the import name stays import sendly.

Notes

  • Publishing requires manual setup (PyPI pending trusted publisher + GitHub pypi environment) and only happens when a maintainer pushes a version tag.

🤖 Generated with Claude Code
Session: https://claude.ai/code/session_01GqTuJ7noGQrSC6UMwgfiT8

…ish workflow

The plain `sendly` name is owned by an unrelated SMS company on PyPI, so the
package cannot publish as-is. Rename the PyPI distribution to `py-sendly` in
pyproject.toml while keeping the import package unchanged (`import sendly`) via
the existing [tool.hatch.build.targets.wheel] packages = ["src/sendly"].
Verified: `python -m build` produces py_sendly-0.1.0 sdist+wheel, `twine check`
PASSED, wheel Name is `py-sendly` with top-level `sendly` import package.

Add .github/workflows/release.yml: on a vX.Y.Z tag push it re-runs the full
ruff/mypy/contract/pytest gate, asserts the tag equals both pyproject version
and the SDK_VERSION constant, builds, then publishes via PyPI Trusted
Publishing (OIDC, environment `pypi`, no stored token). Triggers only on tags,
disjoint from ci.yml, so a red SDK can never ship and nothing publishes without
an explicit tag push. README: document `pip install py-sendly`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GqTuJ7noGQrSC6UMwgfiT8
@AminDhouib
AminDhouib merged commit a8f772a into main Jul 15, 2026
2 checks passed
@AminDhouib
AminDhouib deleted the feat/pypi-release-workflow branch July 15, 2026 16:11
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