mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-26 22:36:57 -05:00
(Note: v10.3 *was* released successfully, but the workflow failed to update the GitHub Releases page at the end due to token permission problems.)
83 lines
2.8 KiB
YAML
83 lines
2.8 KiB
YAML
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-20.04
|
|
environment: release
|
|
permissions:
|
|
# `gh release` requires write permission on repo contents
|
|
contents: write
|
|
steps:
|
|
- name: Get code
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v4
|
|
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/*
|