Release 11.0 #10
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: release | |
# To release this package: | |
# 1. Update the version number and changelog in the source. | |
# Commit and push (to branch main or a vX.Y patch branch), | |
# and wait for tests to complete. | |
# 2. Tag with "vX.Y" or "vX.Y.Z": either create and push tag | |
# directly via git, or create and publish a GitHub release. | |
# | |
# This workflow will run in response to the new tag, and will: | |
# - Verify the source code and git tag version numbers match | |
# - Publish the package to PyPI | |
# - Create or update the release on GitHub | |
on: | |
push: | |
tags: ["v[0-9]*"] | |
workflow_dispatch: | |
jobs: | |
release: | |
runs-on: ubuntu-22.04 | |
environment: release | |
permissions: | |
# `gh release` requires write permission on repo contents | |
contents: write | |
steps: | |
- name: Get code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.10" | |
- name: Install build requirements | |
run: | | |
python -m pip install --upgrade build hatch twine | |
- name: Get version | |
# (This will end the workflow if git and source versions don't match.) | |
id: version | |
run: | | |
VERSION="$(python -m hatch version)" | |
TAG="v$VERSION" | |
GIT_TAG="$(git tag -l --points-at "$GITHUB_REF" 'v*')" | |
if [ "x$GIT_TAG" != "x$TAG" ]; then | |
echo "::error ::package version '$TAG' does not match git tag '$GIT_TAG'" | |
exit 1 | |
fi | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
echo "tag=$TAG" >> $GITHUB_OUTPUT | |
echo "anchor=${TAG//[^[:alnum:]]/-}" >> $GITHUB_OUTPUT | |
- name: Build | |
run: | | |
rm -rf build dist django_anymail.egg-info | |
python -m build | |
python -m twine check dist/* | |
- name: Publish to PyPI | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} | |
# For test PyPI, set release var PYPI_REPOSITORY_URL=https://test.pypi.org/legacy/. | |
# For production PyPI, leave unset (or set to empty string). | |
TWINE_REPOSITORY_URL: ${{ vars.PYPI_REPOSITORY_URL }} | |
run: | | |
python -m twine upload --disable-progress-bar --non-interactive dist/* | |
- name: Release to GitHub | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
TAG: ${{ steps.version.outputs.tag }} | |
TITLE: ${{ steps.version.outputs.tag }} | |
NOTES: | | |
[Changelog](https://anymail.dev/en/stable/changelog/#${{ steps.version.outputs.anchor }}) | |
run: | | |
if ! gh release edit "$TAG" --verify-tag --target "$GITHUB_REF" --title "$TITLE" --notes "$NOTES"; then | |
gh release create "$TAG" --verify-tag --target "$GITHUB_REF" --title "$TITLE" --notes "$NOTES" | |
fi | |
gh release upload "$TAG" ./dist/* |