@@ -96,19 +96,13 @@ jobs:
96
96
fail-fast : false
97
97
matrix :
98
98
python-version :
99
- - " 3.7"
100
99
- " 3.8"
101
100
- " 3.9"
102
101
- " 3.10"
103
102
- " 3.11"
104
103
- " 3.12"
104
+ - " 3.13"
105
105
os : [ubuntu-latest, macos-latest, windows-latest]
106
- exclude :
107
- - os : macos-latest
108
- python-version : " 3.7"
109
- include :
110
- - python-version : " 3.7"
111
- os : macos-12
112
106
113
107
steps :
114
108
- name : checkout
@@ -117,6 +111,7 @@ jobs:
117
111
uses : actions/setup-python@v5
118
112
with :
119
113
python-version : ${{ matrix.python-version }}
114
+ allow-prereleases : true
120
115
# ##
121
116
# Caching.
122
117
# This actually *restores* a cache and schedules a cleanup action
@@ -153,16 +148,23 @@ jobs:
153
148
restore-keys : |
154
149
${{ runner.os }}-pip-
155
150
151
+ - name : Install Build Dependencies (3.13)
152
+ if : matrix.python-version == '3.13'
153
+ run : |
154
+ pip install -U pip
155
+ pip install -U "setuptools<69" wheel twine
156
+ pip install --pre cffi
156
157
- name : Install Build Dependencies
158
+ if : matrix.python-version != '3.13'
157
159
run : |
158
160
pip install -U pip
159
161
pip install -U "setuptools<69" wheel twine
162
+ pip install cffi
160
163
161
- - name : Build AccessControl (macOS x86_64, Python 3.8+ )
164
+ - name : Build AccessControl (macOS x86_64)
162
165
if : >
163
166
startsWith(runner.os, 'Mac')
164
- && !(startsWith(matrix.python-version, 'pypy')
165
- || matrix.python-version == '3.7')
167
+ && !startsWith(matrix.python-version, 'pypy')
166
168
env :
167
169
MACOSX_DEPLOYMENT_TARGET : 10.9
168
170
_PYTHON_HOST_PLATFORM : macosx-10.9-x86_64
@@ -172,11 +174,10 @@ jobs:
172
174
# output (pip install uses a random temporary directory, making this difficult).
173
175
python setup.py build_ext -i
174
176
python setup.py bdist_wheel
175
- - name : Build AccessControl (macOS arm64, Python 3.8+ )
177
+ - name : Build AccessControl (macOS arm64)
176
178
if : >
177
179
startsWith(runner.os, 'Mac')
178
- && !(startsWith(matrix.python-version, 'pypy')
179
- || matrix.python-version == '3.7')
180
+ && !startsWith(matrix.python-version, 'pypy')
180
181
env :
181
182
MACOSX_DEPLOYMENT_TARGET : 11.0
182
183
_PYTHON_HOST_PLATFORM : macosx-11.0-arm64
@@ -190,14 +191,21 @@ jobs:
190
191
if : >
191
192
!startsWith(runner.os, 'Mac')
192
193
|| startsWith(matrix.python-version, 'pypy')
193
- || matrix.python-version == '3.7'
194
194
run : |
195
195
# Next, build the wheel *in place*. This helps ccache, and also lets us cache the configure
196
196
# output (pip install uses a random temporary directory, making this difficult).
197
197
python setup.py build_ext -i
198
198
python setup.py bdist_wheel
199
199
200
+ - name : Install AccessControl and dependencies (3.13)
201
+ if : matrix.python-version == '3.13'
202
+ run : |
203
+ # Install to collect dependencies into the (pip) cache.
204
+ # Use "--pre" here because dependencies with support for this future
205
+ # Python release may only be available as pre-releases
206
+ pip install --pre .[test]
200
207
- name : Install AccessControl and dependencies
208
+ if : matrix.python-version != '3.13'
201
209
run : |
202
210
# Install to collect dependencies into the (pip) cache.
203
211
pip install .[test]
@@ -211,19 +219,18 @@ jobs:
211
219
startsWith(runner.os, 'Mac')
212
220
uses : actions/upload-artifact@v4
213
221
with :
214
- name : AccessControl-${{ runner.os }}-${{ matrix.python-version }}.whl
222
+ # The x86_64 wheel is uploaded with a different name just so it can be
223
+ # manually downloaded when desired. The wheel itself *cannot* be tested
224
+ # on the GHA runner, which uses arm64 architecture.
225
+ name : AccessControl-${{ runner.os }}-${{ matrix.python-version }}-x86_64.whl
215
226
path : dist/*x86_64.whl
216
227
- name : Upload AccessControl wheel (macOS arm64)
217
228
if : >
218
229
startsWith(runner.os, 'Mac')
219
- && !(startsWith(matrix.python-version, 'pypy')
220
- || matrix.python-version == '3.7')
230
+ && !startsWith(matrix.python-version, 'pypy')
221
231
uses : actions/upload-artifact@v4
222
232
with :
223
- # The arm64 wheel is uploaded with a different name just so it can be
224
- # manually downloaded when desired. The wheel itself *cannot* be tested
225
- # on the GHA runner, which uses x86_64 architecture.
226
- name : AccessControl-${{ runner.os }}-${{ matrix.python-version }}-arm64.whl
233
+ name : AccessControl-${{ runner.os }}-${{ matrix.python-version }}.whl
227
234
path : dist/*arm64.whl
228
235
- name : Upload AccessControl wheel (all other platforms)
229
236
if : >
@@ -241,6 +248,7 @@ jobs:
241
248
&& startsWith(github.ref, 'refs/tags')
242
249
&& !startsWith(runner.os, 'Linux')
243
250
&& !startsWith(matrix.python-version, 'pypy')
251
+ && !startsWith(matrix.python-version, '3.13')
244
252
env :
245
253
TWINE_PASSWORD : ${{ secrets.TWINE_PASSWORD }}
246
254
run : |
@@ -253,19 +261,13 @@ jobs:
253
261
fail-fast : false
254
262
matrix :
255
263
python-version :
256
- - " 3.7"
257
264
- " 3.8"
258
265
- " 3.9"
259
266
- " 3.10"
260
267
- " 3.11"
261
268
- " 3.12"
269
+ - " 3.13"
262
270
os : [ubuntu-latest, macos-latest, windows-latest]
263
- exclude :
264
- - os : macos-latest
265
- python-version : " 3.7"
266
- include :
267
- - python-version : " 3.7"
268
- os : macos-12
269
271
270
272
steps :
271
273
- name : checkout
@@ -274,6 +276,7 @@ jobs:
274
276
uses : actions/setup-python@v5
275
277
with :
276
278
python-version : ${{ matrix.python-version }}
279
+ allow-prereleases : true
277
280
# ##
278
281
# Caching.
279
282
# This actually *restores* a cache and schedules a cleanup action
@@ -315,7 +318,23 @@ jobs:
315
318
with :
316
319
name : AccessControl-${{ runner.os }}-${{ matrix.python-version }}.whl
317
320
path : dist/
321
+ - name : Install AccessControl 3.13 ${{ matrix.python-version }}
322
+ if : matrix.python-version == '3.13'
323
+ run : |
324
+ pip install -U wheel "setuptools<69"
325
+ pip install --pre cffi
326
+ # coverage might have a wheel on PyPI for a future python version which is
327
+ # not ABI compatible with the current one, so build it from sdist:
328
+ pip install -U --no-binary :all: coverage
329
+ # Unzip into src/ so that testrunner can find the .so files
330
+ # when we ask it to load tests from that directory. This
331
+ # might also save some build time?
332
+ unzip -n dist/AccessControl-*whl -d src
333
+ # Use "--pre" here because dependencies with support for this future
334
+ # Python release may only be available as pre-releases
335
+ pip install --pre -U -e .[test]
318
336
- name : Install AccessControl
337
+ if : matrix.python-version != '3.13'
319
338
run : |
320
339
pip install -U wheel "setuptools<69"
321
340
pip install -U coverage
@@ -370,6 +389,7 @@ jobs:
370
389
uses : actions/setup-python@v5
371
390
with :
372
391
python-version : ${{ matrix.python-version }}
392
+ allow-prereleases : true
373
393
# ##
374
394
# Caching.
375
395
# This actually *restores* a cache and schedules a cleanup action
@@ -417,12 +437,9 @@ jobs:
417
437
pip install -U wheel
418
438
pip install -U `ls dist/AccessControl-*`[test]
419
439
- name : Lint
420
- # We only need to do this on one version, and it should be Python 3, because
421
- # pylint has stopped updating for Python 2.
422
- # TODO: Pick a linter and configuration and make this step right.
423
440
run : |
424
- pip install -U pylint
425
- # python -m pylint --limit-inference-results=1 --rcfile=.pylintrc AccessControl -f parseable -r n
441
+ pip install -U tox
442
+ tox -e lint
426
443
427
444
manylinux :
428
445
runs-on : ubuntu-latest
@@ -440,6 +457,7 @@ jobs:
440
457
uses : actions/setup-python@v5
441
458
with :
442
459
python-version : ${{ matrix.python-version }}
460
+ allow-prereleases : true
443
461
# ##
444
462
# Caching.
445
463
# This actually *restores* a cache and schedules a cleanup action
0 commit comments