A composite GitHub Action that builds and publishes Python packages to PyPI on SemVer release tags.
Publishes Python packages to PyPI when the current HEAD has a valid SemVer release tag (vX.Y.Z or X.Y.Z). Supports publishing multiple modules from a single repository using pipe-separated directory paths.
- uses: ./.github/actions/pypi-publish-action with: pypi-username: ${{ secrets.PYPI_USERNAME }} pypi-password: ${{ secrets.PYPI_PASSWORD }}
| Input | Required | Default | Description |
|---|---|---|---|
pypi-index | No | pypi | PyPI repository name to publish to |
pypi-username | Yes | — | PyPI username |
pypi-password | Yes | — | PyPI password or API token |
module-dirs | No | . | Pipe-separated list of directories containing Python modules to publish |
prep-commands | No | "" | Commands to run before building |
name: Publish to PyPI on: push: tags: ["v*"] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-python@v5 with: python-version: "3.x" - uses: ./.github/actions/pypi-publish-action with: pypi-username: ${{ secrets.PYPI_USERNAME }} pypi-password: ${{ secrets.PYPI_PASSWORD }} module-dirs: "lib/core|lib/utils" prep-commands: "make generate"
setup.py exists, installs build dependencies, builds with python3 -m build, and uploads with twine upload.setup.py.fetch-depth: 0 to ensure git tags are available.