-
-
Notifications
You must be signed in to change notification settings - Fork 1
156 lines (130 loc) · 4.32 KB
/
pypi-release.yml
File metadata and controls
156 lines (130 loc) · 4.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
name: Create library release archives, create a GH release and publish PyPI wheel and sdist on tag in main branch
# This is executed automatically on a tag in the main branch
# Summary of the steps:
# - build wheels and sdist
# - upload wheels and sdist to PyPI
# - create gh-release and upload wheels and dists there
# TODO: smoke test wheels and sdist
# TODO: add changelog to release text body
# WARNING: this is designed only for packages building as pure Python wheels
on:
workflow_dispatch:
push:
tags:
- "v*.*.*"
jobs:
build-wheels:
name: Build unicode wheels ${{ matrix.type }} ${{ matrix.arch }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest]
arch: [auto64]
build: ["cp{310,311,312,313,314}-*"]
include:
- os: ubuntu-latest
arch: auto64
type: manylinux2010
build: "cp310-*"
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2010
- os: ubuntu-latest
arch: auto64
type: manylinux2014
build: "cp{311,312,313,314}-*"
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
- os: macos-latest
arch: universal2
build: "cp{310,311,312,313,314}-*"
- os: windows-latest
arch: auto64
build: "cp{310,311,312,313,314}-*"
steps:
- uses: actions/checkout@v4
- name: Build wheels and run tests
uses: pypa/cibuildwheel@v2.23.3
env:
CIBW_BUILD: ${{ matrix.build }}
CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.CIBW_MANYLINUX_I686_IMAGE }}
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.CIBW_MANYLINUX_X86_64_IMAGE }}
CIBW_ARCHS: ${{ matrix.arch }}
CIBW_TEST_REQUIRES: pytest
CIBW_TEST_COMMAND: pytest -vvs {project}/tests
# Skip PyPy wheels
CIBW_SKIP: "pp*"
- name: Collect built wheels
uses: actions/upload-artifact@v4
with:
name: cyseq-wheels-${{ matrix.os }}-${{ strategy.job-index }}
path: ./wheelhouse/*.whl
build-sdist:
name: Build source distribution
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Checkout and install reqs
run: |
pip install --upgrade --user build twine pkginfo packaging pip setuptools cython
- name: Build sdist
run: |
python setup.py sdist
twine check dist/*
- name: Collect built sdist
uses: actions/upload-artifact@v4
with:
name: cyseq-sdist
path: dist/*.tar.gz
merge:
runs-on: ubuntu-latest
needs: [build-sdist, build-wheels]
steps:
- name: Merge created wheels and sdist in a single zip
uses: actions/upload-artifact/merge@v4
with:
name: cyseq-build
pattern: cyseq-*
check-dist:
name: Check distributions are PyPi-correct
needs: merge
runs-on: ubuntu-22.04
steps:
- uses: actions/download-artifact@v4
with:
path: cyseq-build
- run: find . -ls
- run: pipx run twine check --strict cyseq-build/*/*
create-gh-release:
name: Create GH release
needs:
- check-dist
runs-on: ubuntu-24.04
steps:
- name: Download builds
uses: actions/download-artifact@v4
with:
name: cyseq-build
path: cyseq-build
- name: Create GH release
uses: softprops/action-gh-release@v2
with:
draft: true
files: cyseq-build/*
create-pypi-release:
name: Create PyPI release
needs:
- create-gh-release
runs-on: ubuntu-24.04
environment: pypi-publish
permissions:
id-token: write
steps:
- name: Download builds
uses: actions/download-artifact@v4
with:
path: cyseq-build
- name: Publish to PyPI
if: startsWith(github.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@release/v1