5
5
branches-ignore :
6
6
- " wip*"
7
7
tags :
8
- - " v*"
8
+ - " v[0-9]. *"
9
9
pull_request :
10
10
schedule :
11
11
# Daily at 6:33
12
12
- cron : " 33 6 * * *"
13
13
workflow_dispatch :
14
14
15
+ permissions : {}
16
+
15
17
jobs :
16
18
list :
17
19
runs-on : ubuntu-latest
@@ -21,12 +23,13 @@ jobs:
21
23
- uses : actions/checkout@v4
22
24
with :
23
25
persist-credentials : false
24
- - name : Set up nox
25
-
26
+ - uses : astral-sh/setup-uv@bd01e18f51369d5a26f1651c3cb451d3417e3bba
27
+ with :
28
+ enable-cache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
26
29
- id : noxenvs-matrix
27
30
run : |
28
31
echo >>$GITHUB_OUTPUT noxenvs=$(
29
- nox --list-sessions --json | jq '[.[].session]'
32
+ uvx nox --list-sessions --json | jq '[.[].session]'
30
33
)
31
34
32
35
test :
@@ -57,26 +60,29 @@ jobs:
57
60
3.11
58
61
3.12
59
62
3.13
63
+ 3.13t
60
64
3.14
65
+ 3.14t
61
66
pypy3.9
62
67
pypy3.10
63
68
pypy3.11
64
69
allow-prereleases : true
65
70
66
- - name : Set up uv
67
- uses : hynek/setup-cached-uv@v2
68
- - name : Set up nox
69
-
70
-
71
+ - uses : astral-sh/setup-uv@bd01e18f51369d5a26f1651c3cb451d3417e3bba
72
+ with :
73
+ enable-cache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
71
74
- name : Run nox
72
- run : nox -s "${{ matrix.noxenv }}"
75
+ run : uvx nox -s "${{ matrix.noxenv }}" -- ${{ matrix.posargs }} # zizmor: ignore[template-injection]
73
76
74
77
manylinux :
75
78
needs : test
76
79
runs-on : ubuntu-latest
80
+
77
81
strategy :
82
+ fail-fast : false
78
83
matrix :
79
84
target : [x86_64, x86, aarch64, armv7, s390x, ppc64le]
85
+
80
86
steps :
81
87
- uses : actions/checkout@v4
82
88
with :
@@ -89,17 +95,19 @@ jobs:
89
95
3.11
90
96
3.12
91
97
3.13
98
+ 3.13t
92
99
3.14
100
+ 3.14t
93
101
pypy3.9
94
102
pypy3.10
95
103
pypy3.11
96
104
allow-prereleases : true
97
105
- name : Build wheels
98
- uses : PyO3/maturin-action@v1
106
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
99
107
with :
100
108
target : ${{ matrix.target }}
101
- args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.14 pypy3.9 pypy3.10 pypy3.11'
102
- sccache : " true "
109
+ args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.9 pypy3.10 pypy3.11'
110
+ sccache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
103
111
manylinux : auto
104
112
- name : Upload wheels
105
113
uses : actions/upload-artifact@v4
@@ -110,12 +118,15 @@ jobs:
110
118
musllinux :
111
119
needs : test
112
120
runs-on : ubuntu-latest
121
+
113
122
strategy :
123
+ fail-fast : false
114
124
matrix :
115
125
target :
116
126
- aarch64-unknown-linux-musl
117
127
- i686-unknown-linux-musl
118
128
- x86_64-unknown-linux-musl
129
+
119
130
steps :
120
131
- uses : actions/checkout@v4
121
132
with :
@@ -128,18 +139,20 @@ jobs:
128
139
3.11
129
140
3.12
130
141
3.13
142
+ 3.13t
131
143
3.14
144
+ 3.14t
132
145
pypy3.9
133
146
pypy3.10
134
147
pypy3.11
135
148
allow-prereleases : true
136
149
- name : Build wheels
137
- uses : PyO3/maturin-action@v1
150
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
138
151
with :
139
152
target : ${{ matrix.target }}
140
- args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.14 pypy3.9 pypy3.10 pypy3.11'
153
+ args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.9 pypy3.10 pypy3.11'
141
154
manylinux : musllinux_1_2
142
- sccache : " true "
155
+ sccache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
143
156
- name : Upload wheels
144
157
uses : actions/upload-artifact@v4
145
158
with :
@@ -149,9 +162,12 @@ jobs:
149
162
windows :
150
163
needs : test
151
164
runs-on : windows-latest
165
+
152
166
strategy :
167
+ fail-fast : false
153
168
matrix :
154
169
target : [x64, x86] # x86 is not supported by pypy
170
+
155
171
steps :
156
172
- uses : actions/checkout@v4
157
173
with :
@@ -171,23 +187,118 @@ jobs:
171
187
allow-prereleases : true
172
188
architecture : ${{ matrix.target }}
173
189
- name : Build wheels
174
- uses : PyO3/maturin-action@v1
190
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
175
191
with :
176
192
target : ${{ matrix.target }}
177
- args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.14' --interpreter ${{ matrix.target == 'x64' && 'pypy3.9 pypy3.10 pypy3.11 ' || '' }}
178
- sccache : " true "
193
+ args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.14' --interpreter ${{ matrix.target == 'x64' && 'pypy3.9 pypy3.10' || '' }}
194
+ sccache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
179
195
- name : Upload wheels
180
196
uses : actions/upload-artifact@v4
181
197
with :
182
198
name : dist-${{ github.job }}-${{ matrix.target }}
183
199
path : dist
184
200
201
+ windows-arm :
202
+ needs : test
203
+ runs-on : windows-11-arm
204
+
205
+ strategy :
206
+ fail-fast : false
207
+ matrix :
208
+ target :
209
+ - aarch64-pc-windows-msvc
210
+
211
+ steps :
212
+ - uses : actions/checkout@v4
213
+ with :
214
+ persist-credentials : false
215
+ # Install each python version seperatly so that the paths can be passed to maturin. (otherwise finds pre-installed x64 versions)
216
+ - uses : actions/setup-python@v5
217
+ id : cp311
218
+ with :
219
+ python-version : 3.11
220
+ allow-prereleases : true
221
+ architecture : arm64
222
+ - uses : actions/setup-python@v5
223
+ id : cp312
224
+ with :
225
+ python-version : 3.12
226
+ allow-prereleases : true
227
+ architecture : arm64
228
+ - uses : actions/setup-python@v5
229
+ id : cp313
230
+ with :
231
+ python-version : 3.13
232
+ allow-prereleases : true
233
+ architecture : arm64
234
+ - uses : actions/setup-python@v5
235
+ id : cp314
236
+ with :
237
+ python-version : 3.14
238
+ allow-prereleases : true
239
+ architecture : arm64
240
+ # rust toolchain is not currently installed on windopws arm64 images: https://github.com/actions/partner-runner-images/issues/77
241
+ - name : Setup rust
242
+ id : setup-rust
243
+ run : |
244
+ Invoke-WebRequest https://static.rust-lang.org/rustup/dist/aarch64-pc-windows-msvc/rustup-init.exe -OutFile .\rustup-init.exe
245
+ .\rustup-init.exe -y
246
+ Add-Content $env:GITHUB_PATH "$env:USERPROFILE\.cargo\bin"
247
+ - name : Build wheels
248
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
249
+ with :
250
+ target : ${{ matrix.target }}
251
+ args : --release --out dist --interpreter ${{ steps.cp311.outputs.python-path }} ${{ steps.cp312.outputs.python-path }} ${{ steps.cp313.outputs.python-path }} ${{ steps.cp314.outputs.python-path }}
252
+ sccache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
253
+ - name : Upload wheels
254
+ uses : actions/upload-artifact@v4
255
+ with :
256
+ name : dist-${{ github.job }}-${{ matrix.target }}
257
+ path : dist
258
+
259
+ # free-threaded and normal builds share a site-packages folder on Windows so
260
+ # we must build free-threaded separately
261
+ windows-free-threaded :
262
+ needs : test
263
+ runs-on : windows-latest
264
+
265
+ strategy :
266
+ fail-fast : false
267
+ matrix :
268
+ target : [x64, x86] # x86 is not supported by pypy
269
+
270
+ steps :
271
+ - uses : actions/checkout@v4
272
+ with :
273
+ persist-credentials : false
274
+ - uses : actions/setup-python@v5
275
+ with :
276
+ python-version : |
277
+ 3.13t
278
+ 3.14t
279
+ allow-prereleases : true
280
+ architecture : ${{ matrix.target }}
281
+ - name : Build wheels
282
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
283
+ with :
284
+ target : ${{ matrix.target }}
285
+ args : --release --out dist --interpreter '3.13t 3.14t'
286
+ sccache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
287
+ - name : Upload wheels
288
+ uses : actions/upload-artifact@v4
289
+ with :
290
+ name : dist-${{ github.job }}-${{ matrix.target }}-free-threaded
291
+ path : dist
292
+
185
293
macos :
186
294
needs : test
187
295
runs-on : macos-latest
296
+
188
297
strategy :
298
+ fail-fast : false
189
299
matrix :
190
300
target : [x86_64, aarch64]
301
+
191
302
steps :
192
303
- uses : actions/checkout@v4
193
304
with :
@@ -200,17 +311,19 @@ jobs:
200
311
3.11
201
312
3.12
202
313
3.13
314
+ 3.13t
203
315
3.14
316
+ 3.14t
204
317
pypy3.9
205
318
pypy3.10
206
319
pypy3.11
207
320
allow-prereleases : true
208
321
- name : Build wheels
209
- uses : PyO3/maturin-action@v1
322
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
210
323
with :
211
324
target : ${{ matrix.target }}
212
- args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.14 pypy3.9 pypy3.10 pypy3.11'
213
- sccache : " true "
325
+ args : --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.9 pypy3.10 pypy3.11'
326
+ sccache : ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning]
214
327
- name : Upload wheels
215
328
uses : actions/upload-artifact@v4
216
329
with :
@@ -226,19 +339,9 @@ jobs:
226
339
persist-credentials : false
227
340
- uses : actions/setup-python@v5
228
341
with :
229
- python-version : |
230
- 3.9
231
- 3.10
232
- 3.11
233
- 3.12
234
- 3.13
235
- 3.14
236
- pypy3.9
237
- pypy3.10
238
- pypy3.11
239
- allow-prereleases : true
342
+ python-version : 3.13
240
343
- name : Build an sdist
241
- uses : PyO3/maturin-action@v1
344
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
242
345
with :
243
346
command : sdist
244
347
args : --out dist
@@ -249,7 +352,8 @@ jobs:
249
352
path : dist
250
353
251
354
release :
252
- needs : [manylinux, musllinux, windows, macos]
355
+ needs :
356
+ [manylinux, musllinux, windows, windows-arm, windows-free-threaded, macos]
253
357
runs-on : ubuntu-latest
254
358
if : " startsWith(github.ref, 'refs/tags/')"
255
359
environment :
@@ -265,13 +369,13 @@ jobs:
265
369
pattern : dist-*
266
370
merge-multiple : true
267
371
- name : Publish to PyPI
268
- uses : PyO3/maturin-action@v1
372
+ uses : PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3
269
373
with :
270
374
command : upload
271
375
args : --non-interactive --skip-existing *
272
376
- name : Create a GitHub Release
273
377
if : github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
274
- uses : softprops/action-gh-release@v2
378
+ uses : softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8
275
379
with :
276
380
files : |
277
381
*
0 commit comments