3030# native support. It works, but is slow.
3131#
3232# Another major downside: You can't just re-run the job for one part
33- # of the matrix. So if there's a transient test failure that hit, say, 3.8 ,
33+ # of the matrix. So if there's a transient test failure that hit, say, 3.11 ,
3434# to get a clean run every version of Python runs again. That's bad.
3535# https://github.community/t/ability-to-rerun-just-a-single-job-in-a-workflow/17234/65
3636
9797 matrix :
9898 python-version :
9999 - " pypy-3.10"
100- - " 3.8"
101100 - " 3.9"
102101 - " 3.10"
103102 - " 3.11"
@@ -112,6 +111,8 @@ jobs:
112111 steps :
113112 - name : checkout
114113 uses : actions/checkout@v4
114+ with :
115+ persist-credentials : false
115116 - name : Set up Python ${{ matrix.python-version }}
116117 uses : actions/setup-python@v5
117118 with :
@@ -157,12 +158,12 @@ jobs:
157158 if : matrix.python-version == '3.14'
158159 run : |
159160 pip install -U pip
160- pip install -U "setuptools < 74 " wheel twine
161+ pip install -U "setuptools <= 75.6.0 " wheel twine
161162 - name : Install Build Dependencies
162163 if : matrix.python-version != '3.14'
163164 run : |
164165 pip install -U pip
165- pip install -U "setuptools < 74 " wheel twine
166+ pip install -U "setuptools <= 75.6.0 " wheel twine
166167
167168 - name : Build ExtensionClass (macOS x86_64)
168169 if : >
@@ -265,7 +266,6 @@ jobs:
265266 matrix :
266267 python-version :
267268 - " pypy-3.10"
268- - " 3.8"
269269 - " 3.9"
270270 - " 3.10"
271271 - " 3.11"
@@ -280,6 +280,8 @@ jobs:
280280 steps :
281281 - name : checkout
282282 uses : actions/checkout@v4
283+ with :
284+ persist-credentials : false
283285 - name : Set up Python ${{ matrix.python-version }}
284286 uses : actions/setup-python@v5
285287 with :
@@ -329,7 +331,7 @@ jobs:
329331 - name : Install ExtensionClass ${{ matrix.python-version }}
330332 if : matrix.python-version == '3.14'
331333 run : |
332- pip install -U wheel "setuptools < 74 "
334+ pip install -U wheel "setuptools <= 75.6.0 "
333335 # coverage might have a wheel on PyPI for a future python version which is
334336 # not ABI compatible with the current one, so build it from sdist:
335337 pip install -U --no-binary :all: coverage[toml]
@@ -343,7 +345,7 @@ jobs:
343345 - name : Install ExtensionClass
344346 if : matrix.python-version != '3.14'
345347 run : |
346- pip install -U wheel "setuptools < 74 "
348+ pip install -U wheel "setuptools <= 75.6.0 "
347349 pip install -U coverage[toml]
348350 pip install -U 'cffi; platform_python_implementation == "CPython"'
349351 # Unzip into src/ so that testrunner can find the .so files
@@ -381,6 +383,76 @@ jobs:
381383 with :
382384 parallel-finished : true
383385
386+ release-check :
387+ needs : build-package
388+ runs-on : " ubuntu-latest"
389+ strategy :
390+ matrix :
391+ python-version : ["3.11"]
392+ os : [ubuntu-latest]
393+
394+ steps :
395+ - name : checkout
396+ uses : actions/checkout@v4
397+ with :
398+ persist-credentials : false
399+ - name : Set up Python ${{ matrix.python-version }}
400+ uses : actions/setup-python@v5
401+ with :
402+ python-version : ${{ matrix.python-version }}
403+ allow-prereleases : true
404+ # ##
405+ # Caching.
406+ # This actually *restores* a cache and schedules a cleanup action
407+ # to save the cache. So it must come before the thing we want to use
408+ # the cache.
409+ # ##
410+ - name : Get pip cache dir (default)
411+ id : pip-cache-default
412+ if : ${{ !startsWith(runner.os, 'Windows') }}
413+ run : |
414+ echo "dir=$(pip cache dir)" >>$GITHUB_OUTPUT
415+
416+ - name : Get pip cache dir (Windows)
417+ id : pip-cache-windows
418+ if : ${{ startsWith(runner.os, 'Windows') }}
419+ run : |
420+ echo "dir=$(pip cache dir)" >> $Env:GITHUB_OUTPUT
421+
422+ - name : pip cache (default)
423+ uses : actions/cache@v4
424+ if : ${{ !startsWith(runner.os, 'Windows') }}
425+ with :
426+ path : ${{ steps.pip-cache-default.outputs.dir }}
427+ key : ${{ runner.os }}-pip-${{ matrix.python-version }}
428+ restore-keys : |
429+ ${{ runner.os }}-pip-
430+
431+ - name : pip cache (Windows)
432+ uses : actions/cache@v4
433+ if : ${{ startsWith(runner.os, 'Windows') }}
434+ with :
435+ path : ${{ steps.pip-cache-windows.outputs.dir }}
436+ key : ${{ runner.os }}-pip-${{ matrix.python-version }}
437+ restore-keys : |
438+ ${{ runner.os }}-pip-
439+
440+ - name : Download ExtensionClass wheel
441+ uses : actions/download-artifact@v4
442+ with :
443+ name : ExtensionClass-${{ runner.os }}-${{ matrix.python-version }}.whl
444+ path : dist/
445+ - name : Install ExtensionClass
446+ run : |
447+ pip install -U wheel
448+ pip install -U tox
449+ pip install -U "`ls dist/ExtensionClass-*.whl`[docs]"
450+ - name : Run release check
451+ env :
452+ ZOPE_INTERFACE_STRICT_IRO : 1
453+ run : |
454+ tox -e release-check
455+
384456 manylinux :
385457 runs-on : ubuntu-latest
386458 if : github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
@@ -393,6 +465,8 @@ jobs:
393465 steps :
394466 - name : checkout
395467 uses : actions/checkout@v4
468+ with :
469+ persist-credentials : false
396470 - name : Set up Python ${{ matrix.python-version }}
397471 uses : actions/setup-python@v5
398472 with :
0 commit comments