1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
# This workflows will upload a Python Package using Twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
name: Upload Python Package
on:
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Get tag
id: vars
run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
- name: Validate version number
run: >-
if [[ "${{ github.event.release.prerelease }}" == "true" ]]; then
if ! [[ "${{ steps.vars.outputs.tag }}" =~ (a|b|rc)[0-9]+$ ]]; then
echo "Pre-release: Tag is missing pre-release suffix (${{ steps.vars.outputs.tag }})"
exit 1
fi
else
if [[ "${{ steps.vars.outputs.tag }}" =~ (a|b|rc)[0-9]+$ ]]; then
echo "Release: Tag must not have a pre-release suffix (${{ steps.vars.outputs.tag }})"
exit 1
fi
fi
- name: Validate pyproject.toml version
run: |
TOML_VERSION=$(sed -n 's/^version[[:space:]]*=[[:space:]]*"\([^"]*\)"/\1/p' pyproject.toml)
if [[ "$TOML_VERSION" != "${{ steps.vars.outputs.tag }}" ]]; then
echo "Version mismatch: pyproject.toml has '$TOML_VERSION' but tag is '${{ steps.vars.outputs.tag }}'"
exit 1
fi
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '>=3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build twine
- name: Build and publish
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: |
python -m build
twine upload dist/*
|