1+ name : Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
2+
3+ on : push
4+
5+ jobs :
6+ build :
7+ name : Build distribution 📦
8+ runs-on : ubuntu-latest
9+
10+ steps :
11+ - uses : actions/checkout@v4
12+ with :
13+ persist-credentials : false
14+ - name : Set up Python
15+ uses : actions/setup-python@v5
16+ with :
17+ python-version : " 3.10"
18+ - name : Install pypa/build
19+ run : >-
20+ python3 -m
21+ pip install
22+ build
23+ --user
24+ - name : Build a binary wheel and a source tarball
25+ run : python3 -m build
26+ - name : Store the distribution packages
27+ uses : actions/upload-artifact@v4
28+ with :
29+ name : python-package-distributions
30+ path : dist/
31+
32+ publish-to-pypi :
33+ name : >-
34+ Publish Python 🐍 distribution 📦 to PyPI
35+ if : startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
36+ needs :
37+ - build
38+ runs-on : ubuntu-latest
39+ environment :
40+ name : pypi
41+ url : https://pypi.org/p/modifinder # Replace <package-name> with your PyPI project name
42+ permissions :
43+ id-token : write # IMPORTANT: mandatory for trusted publishing
44+
45+ steps :
46+ - name : Download all the dists
47+ uses : actions/download-artifact@v4
48+ with :
49+ name : python-package-distributions
50+ path : dist/
51+ - name : Publish distribution 📦 to PyPI
52+ uses : pypa/gh-action-pypi-publish@release/v1
53+
54+ github-release :
55+ name : >-
56+ Sign the Python 🐍 distribution 📦 with Sigstore
57+ and upload them to GitHub Release
58+ needs :
59+ - publish-to-pypi
60+ runs-on : ubuntu-latest
61+
62+ permissions :
63+ contents : write # IMPORTANT: mandatory for making GitHub Releases
64+ id-token : write # IMPORTANT: mandatory for sigstore
65+
66+ steps :
67+ - name : Download all the dists
68+ uses : actions/download-artifact@v4
69+ with :
70+ name : python-package-distributions
71+ path : dist/
72+ - name : Sign the dists with Sigstore
73+ 74+ with :
75+ inputs : >-
76+ ./dist/*.tar.gz
77+ ./dist/*.whl
78+ - name : Create GitHub Release
79+ env :
80+ GITHUB_TOKEN : ${{ github.token }}
81+ run : >-
82+ gh release create
83+ "$GITHUB_REF_NAME"
84+ --repo "$GITHUB_REPOSITORY"
85+ --notes ""
86+ - name : Upload artifact signatures to GitHub Release
87+ env :
88+ GITHUB_TOKEN : ${{ github.token }}
89+ # Upload to GitHub Release using the `gh` CLI.
90+ # `dist/` contains the built packages, and the
91+ # sigstore-produced signatures and certificates.
92+ run : >-
93+ gh release upload
94+ "$GITHUB_REF_NAME" dist/**
95+ --repo "$GITHUB_REPOSITORY"
96+
97+ publish-to-testpypi :
98+ name : Publish Python 🐍 distribution 📦 to TestPyPI
99+ needs :
100+ - build
101+ runs-on : ubuntu-latest
102+
103+ environment :
104+ name : testpypi
105+ url : https://test.pypi.org/p/<package-name>
106+
107+ permissions :
108+ id-token : write # IMPORTANT: mandatory for trusted publishing
109+
110+ steps :
111+ - name : Download all the dists
112+ uses : actions/download-artifact@v4
113+ with :
114+ name : python-package-distributions
115+ path : dist/
116+ - name : Publish distribution 📦 to TestPyPI
117+ uses : pypa/gh-action-pypi-publish@release/v1
118+ with :
119+ repository-url : https://test.pypi.org/legacy/
0 commit comments