Skip to content

PyPI Publish

PyPI Publish #7

Workflow file for this run

name: PyPI Publish
on:
workflow_run:
workflows: ["Tag Release"]
types:
- completed
permissions:
contents: read
jobs:
build:
name: Build distribution
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4.1.1
with:
fetch-tags: true
- name: Install uv
uses: astral-sh/setup-uv@853401723d6d6622f431a3b4e6385bf65e8035b7 # v4.0.0
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
- name: Set up Python 3.14
run: uv python install 3.14
- name: Clean dist
run: rm -rf dist/
- name: Build wheel and sdist
run: uv build
- name: Upload dist artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
publish:
name: Publish to PyPI
runs-on: ubuntu-latest
needs: build
environment: pypi
permissions:
id-token: write # required for OIDC trusted publisher
steps:
- name: Download dist artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: publish
permissions:
contents: write # required to create a release
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4.1.1
with:
fetch-tags: true
- name: Get version tag
id: version
run: |
VERSION=$(grep '^version' pyproject.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
echo "tag=v${VERSION}" >> "$GITHUB_OUTPUT"
- name: Download dist artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- name: Create GitHub Release
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "${{ steps.version.outputs.tag }}" \
--title "${{ steps.version.outputs.tag }}" \
--generate-notes \
dist/*