Skip to content

Commit

Permalink
Implemented automatic uploading to PyPI
Browse files Browse the repository at this point in the history
Closes #388
  • Loading branch information
AWhetter committed Sep 30, 2023
1 parent 006142d commit 61c52e0
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 17 deletions.
85 changes: 85 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions docs/changes/388.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Implemented automatic uploading to PyPI
10 changes: 4 additions & 6 deletions docs/maintenance/release-process.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 1 addition & 11 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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}

0 comments on commit 61c52e0

Please sign in to comment.