1- name : Publish Python 🐍 distributions 📦 to PyPI and TestPyPI
1+ name : Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
22
33on : push
44
55jobs :
6- build-n-publish :
7- name : Build and publish Python 🐍 distributions 📦 to PyPI and TestPyPI
6+ build :
7+ name : Build distribution 📦
88 runs-on : ubuntu-latest
99
1010 steps :
11- - uses : actions/checkout@v3
11+ - uses : actions/checkout@v4
1212 - name : Set up Python
1313 uses : actions/setup-python@v4
1414 with :
@@ -20,21 +20,90 @@ jobs:
2020 build
2121 --user
2222 - name : Build a binary wheel and a source tarball
23- run : >-
24- python3 -m
25- build
26- --sdist
27- --wheel
28- --outdir dist/
29- .
30- # Actually publish to PyPI/TestPyPI
31- - name : Publish distribution 📦 to Test PyPI
32- uses : pypa/gh-action-pypi-publish@release/v1
23+ run : python3 -m build
24+ - name : Store the distribution packages
25+ uses : actions/upload-artifact@v3
3326 with :
34- password : ${{ secrets.TEST_PYPI_API_TOKEN }}
35- repository-url : https://test.pypi.org/legacy/
27+ name : python-package-distributions
28+ path : dist/
29+
30+ publish-to-pypi :
31+ name : >-
32+ Publish Python 🐍 distribution 📦 to PyPI
33+ if : startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
34+ needs :
35+ - build
36+ runs-on : ubuntu-latest
37+ environment :
38+ name : pypi
39+ url : https://pypi.org/p/<package-name> # Replace <package-name> with your PyPI project name
40+ permissions :
41+ id-token : write # IMPORTANT: mandatory for trusted publishing
42+
43+ steps :
44+ - name : Download all the dists
45+ uses : actions/download-artifact@v3
46+ with :
47+ name : python-package-distributions
48+ path : dist/
3649 - name : Publish distribution 📦 to PyPI
37- if : startsWith(github.ref, 'refs/tags')
3850 uses : pypa/gh-action-pypi-publish@release/v1
51+
52+ github-release :
53+ name : >-
54+ Sign the Python 🐍 distribution 📦 with Sigstore
55+ and upload them to GitHub Release
56+ needs :
57+ - publish-to-pypi
58+ runs-on : ubuntu-latest
59+
60+ permissions :
61+ contents : write # IMPORTANT: mandatory for making GitHub Releases
62+ id-token : write # IMPORTANT: mandatory for sigstore
63+
64+ steps :
65+ - name : Download all the dists
66+ uses : actions/download-artifact@v3
67+ with :
68+ name : python-package-distributions
69+ path : dist/
70+ - name : Sign the dists with Sigstore
71+ uses : sigstore/gh-action-sigstore-python@v1.2.3
3972 with :
40- password : ${{ secrets.PYPI_API_TOKEN }}
73+ inputs : >-
74+ ./dist/*.tar.gz
75+ ./dist/*.whl
76+ - name : Upload artifact signatures to GitHub Release
77+ env :
78+ GITHUB_TOKEN : ${{ github.token }}
79+ # Upload to GitHub Release using the `gh` CLI.
80+ # `dist/` contains the built packages, and the
81+ # sigstore-produced signatures and certificates.
82+ run : >-
83+ gh release upload
84+ '${{ github.ref_name }}' dist/**
85+ --repo '${{ github.repository }}'
86+
87+ publish-to-testpypi :
88+ name : Publish Python 🐍 distribution 📦 to TestPyPI
89+ needs :
90+ - build
91+ runs-on : ubuntu-latest
92+
93+ environment :
94+ name : testpypi
95+ url : https://test.pypi.org/p/<package-name>
96+
97+ permissions :
98+ id-token : write # IMPORTANT: mandatory for trusted publishing
99+
100+ steps :
101+ - name : Download all the dists
102+ uses : actions/download-artifact@v3
103+ with :
104+ name : python-package-distributions
105+ path : dist/
106+ - name : Publish distribution 📦 to TestPyPI
107+ uses : pypa/gh-action-pypi-publish@release/v1
108+ with :
109+ repository-url : https://test.pypi.org/legacy/
0 commit comments