1+ name : Build and upload to PyPI
2+
3+ on :
4+ workflow_dispatch :
5+ pull_request :
6+ branches :
7+ - main
8+ push :
9+ branches :
10+ - main
11+
12+ jobs :
13+ build_wheels :
14+ name : Build wheels on ${{ matrix.os }}
15+ runs-on : ${{ matrix.os }}
16+ strategy :
17+ matrix :
18+ # macos-13 is an intel runner, macos-14 is apple silicon
19+ os : [ubuntu-latest, windows-latest, macos-13, macos-14]
20+
21+ steps :
22+ - uses : actions/checkout@v4
23+
24+ - name : Build wheels
25+ 26+
27+ - uses : actions/upload-artifact@v4
28+ with :
29+ name : cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
30+ path : ./wheelhouse/*.whl
31+
32+ build_sdist :
33+ name : Build source distribution
34+ runs-on : ubuntu-latest
35+ steps :
36+ - uses : actions/checkout@v4
37+
38+ - name : Build sdist
39+ run : pipx run build --sdist
40+
41+ - uses : actions/upload-artifact@v4
42+ with :
43+ name : cibw-sdist
44+ path : dist/*.tar.gz
45+
46+ upload_pypi :
47+ needs : [build_wheels, build_sdist]
48+ runs-on : ubuntu-latest
49+ environment : pypi
50+ permissions :
51+ id-token : write
52+ if : github.event_name == 'release' && github.event.action == 'published'
53+ # or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this)
54+ # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
55+ steps :
56+ - uses : actions/download-artifact@v4
57+ with :
58+ # unpacks all CIBW artifacts into dist/
59+ pattern : cibw-*
60+ path : dist
61+ merge-multiple : true
62+
63+ - name : Generate artifact attestations
64+ 65+ with :
66+ subject-path : " dist/*"
67+
68+ - uses : pypa/gh-action-pypi-publish@release/v1
69+ # with:
70+ # To test: repository-url: https://test.pypi.org/legacy/
0 commit comments