Trigger a PyPI and GitHub release everytime the package version is increased.
This support any PEP 518 compliant projects (flit, setuptools, poetry,...).
This action:
- Auto-detect when the package version is increased (in the
pyproject.toml
,module.__version__
when using flit,setup
,...) - Trigger a PyPI release of the project (build and publish)
- Auto-extract release notes from the
CHANGELOG.md
(ifparse-changelog
istrue
) - Create the associated tag (e.g.
v1.0.0
) and GitHub release.
Example of usage:
name: Auto-publish
on: [push, workflow_dispatch]
jobs:
# Auto-publish when version is increased
publish-job:
# Only publish on `main` branch
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions: # Don't forget permissions
contents: write
steps:
- uses: etils-actions/pypi-auto-publish@v1
with:
pypi-token: ${{ secrets.PYPI_API_TOKEN }}
gh-token: ${{ secrets.GITHUB_TOKEN }}
parse-changelog: true
You can also chain this job with your unittests to only trigger release if tests passes (needs: my-test-job
).
pypi-token
: The PyPI token to publish the package. If missing, PyPI release is skipped.gh-token
: GitHub action token. If missing, GitHub release is skipped.parse-changelog
: Iftrue
, extract GitHub release notes from theCHANGELOG.md
(assuming keep a changelog format)path
(Optional): Directory of the project (containing thepyproject.toml
). Default to.
.pkg-name
(Optional): Package name (auto-detected).git-ref
(Optional): Git ref (e.g. SHA or tag). Ifgit-ref: skip
, the repository is not checked out (this can be used to manually checkout and update the repo before publishing).
version
: The detected version of the project (e.g.'1.0.0'
)is-released
: Whether a new release was triggered ('true'
/'false'
)