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 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 }} run: | python -m twine upload 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: | # gh release create-or-edit "$TAG" --target "$GITHUB_REF" --title "$TITLE" --notes "$NOTES" ./dist/* # (gh release doesn't support edit - 6/2021) # (hub requires separate --attach=FILE arg for each file) FILES=(./dist/*) if ! hub release edit --message "$TITLE" --message "$NOTES" "${FILES[@]/#/--attach=}" "$TAG"; then hub release create -t "$GITHUB_SHA" --message "$TITLE" --message "$NOTES" "${FILES[@]/#/--attach=}" "$TAG" fi