1
- name : Publish Python 🐍 distributions 📦 to PyPI and TestPyPI
1
+ name : Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
2
2
3
3
on : push
4
4
5
5
jobs :
6
- build-n-publish :
7
- name : Build and publish Python 🐍 distributions 📦 to PyPI and TestPyPI
6
+ build :
7
+ name : Build distribution 📦
8
8
runs-on : ubuntu-latest
9
9
10
10
steps :
11
- - uses : actions/checkout@v3
11
+ - uses : actions/checkout@v4
12
12
- name : Set up Python
13
13
uses : actions/setup-python@v4
14
14
with :
@@ -20,21 +20,90 @@ jobs:
20
20
build
21
21
--user
22
22
- 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
33
26
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/
36
49
- name : Publish distribution 📦 to PyPI
37
- if : startsWith(github.ref, 'refs/tags')
38
50
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
+
39
72
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