Implemented automatic uploading to PyPI

Closes #388
This commit is contained in:
Ashley Whetter 2023-09-30 10:54:18 -07:00
parent 006142dbad
commit 61c52e0664
4 changed files with 91 additions and 17 deletions

85
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,85 @@
name: Publish Python 🐍 distribution 📦 to PyPI
on: push
jobs:
build:
name: Build distribution 📦
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install pypa/build
run: >-
python3 -m
pip install
build
--user
- name: Build a binary wheel and a source tarball
run: python3 -m build
- name: Store the distribution packages
uses: actions/upload-artifact@v3
with:
name: python-package-distributions
path: dist/
publish-to-pypi:
name: >-
Publish Python 🐍 distribution 📦 to PyPI
if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
needs:
- build
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/sphinx-autoapi
permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing
steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
github-release:
name: >-
Sign the Python 🐍 distribution 📦 with Sigstore
and upload them to GitHub Release
needs:
- publish-to-pypi
runs-on: ubuntu-latest
permissions:
contents: write # IMPORTANT: mandatory for making GitHub Releases
id-token: write # IMPORTANT: mandatory for sigstore
steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Sign the dists with Sigstore
uses: sigstore/gh-action-sigstore-python@v1.2.3
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl
- name: Upload artifact signatures to GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
# Upload to GitHub Release using the `gh` CLI.
# `dist/` contains the built packages, and the
# sigstore-produced signatures and certificates.
run: >-
gh release upload
'${{ github.ref_name }}' dist/**
--repo '${{ github.repository }}'

1
docs/changes/388.misc Normal file
View File

@ -0,0 +1 @@
Implemented automatic uploading to PyPI

View File

@ -22,9 +22,7 @@ Preparation
Release
-------
.. code-block:: bash
git clean -idx
tox -e release
git tag vX.X.X
git push --tags
Create a new release in github that tags the commit
and uses the built release notes as the description.
The tag created by the release will trigger the github actions to
build and upload the package to PyPI.

12
tox.ini
View File

@ -60,14 +60,4 @@ deps =
towncrier
importlib-resources<6 # pinned due to https://github.com/twisted/towncrier/issues/528
commands =
towncrier {posargs:check}
[testenv:release]
skip_install = true
deps =
build
twine
commands =
python -c "import shutil, os; os.path.isdir('dist') and shutil.rmtree('dist')"
python -m build
twine upload dist/*
towncrier {posargs:check}