Skip to content

Release to PyPI

Release to PyPI #12

Workflow file for this run

name: Release to PyPI
on:
push:
tags:
- "v*" # Triggers on version tags like v0.1.2
workflow_dispatch: # Allows manual trigger from Actions tab
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write # Required for trusted publishing
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Verify version matches tag
run: |
TAG_VERSION=${GITHUB_REF#refs/tags/v}
PYPROJECT_VERSION=$(uv run python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
if [ "$TAG_VERSION" != "$PYPROJECT_VERSION" ]; then
echo "ERROR: Tag version ($TAG_VERSION) doesn't match pyproject.toml version ($PYPROJECT_VERSION)"
exit 1
fi
echo "Version check passed: $TAG_VERSION"
- name: Build package
run: uv build
- name: Publish to PyPI
run: uv publish --trusted-publishing always
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: dist/*
generate_release_notes: true