diff --git a/.github/workflows/code.yml b/.github/workflows/code.yml index 01908d95..4038c3b9 100644 --- a/.github/workflows/code.yml +++ b/.github/workflows/code.yml @@ -54,21 +54,18 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-15-intel] - python: [cp37, cp38, cp39, cp310, cp311, cp312, cp313] + python: [cp37, cp38, cp39, cp310, cp311, cp312, cp313, cp314] include: - # Put coverage and results files in the project directory for mac + # Put results files in the project directory for mac - os: macos-15-intel - cov_file: "{project}/dist/coverage.xml" results_file: "{project}/dist/pytest-results.xml" # And for windows - os: windows-latest - cov_file: "{project}/dist/coverage.xml" results_file: "{project}/dist/pytest-results.xml" - # But put coverage and results files in the output dir mounted in docker for linux + # But put results files in the output dir mounted in docker for linux - os: ubuntu-latest - cov_file: /output/coverage.xml results_file: /output/pytest-results.xml exclude: @@ -112,15 +109,17 @@ jobs: # cibuildwheel reports it cannot clean up the temp dir used for testing, # and fails the build. Sleeping seems to give pytest enough time to # fully clean up. - CIBW_TEST_COMMAND: pytest {project}/tests --cov-report xml:${{ matrix.cov_file }} --junit-xml=${{ matrix.results_file }} && sleep 2 + CIBW_TEST_COMMAND: pytest {project}/tests --junit-xml=${{ matrix.results_file }} && sleep 2 # Run with faulthandler and -s in the hope we get a stack trace on seg fault on windows... - CIBW_TEST_COMMAND_WINDOWS: python -X faulthandler -m pytest -s {project}/tests --cov-report xml:${{ matrix.cov_file }} --junit-xml=${{ matrix.results_file }} + CIBW_TEST_COMMAND_WINDOWS: python -X faulthandler -m pytest -s {project}/tests --junit-xml=${{ matrix.results_file }} # Disable auditwheel as it isn't compatible with setuptools_dso approach # https://github.com/mdavidsaver/setuptools_dso/issues/17 CIBW_REPAIR_WHEEL_COMMAND: "" CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 CIBW_ENVIRONMENT_LINUX: SETUPTOOLS_DSO_PLAT_NAME=manylinux2014_x86_64 - CIBW_SKIP: "*-musllinux*" # epicscorelibs doesn't build on musllinux platforms + # epicscorelibs doesn't build on musllinux platforms + # Ensure we never use free-threaded variants, as we (and our EPICS python dependencies) do not support it + CIBW_SKIP: "*-musllinux* cp3??t-*" - name: Upload Wheel uses: actions/upload-artifact@v4 @@ -128,19 +127,13 @@ jobs: name: dist-${{ matrix.os }}-${{ matrix.python }} path: dist/softioc* - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v4 - with: - name: ${{ matrix.os }}/${{ matrix.python }} - directory: dist - test-sdist: needs: [sdist] strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-15-intel] - python: [cp37, cp38, cp39, cp310, cp311, cp312, cp313] + python: [cp37, cp38, cp39, cp310, cp311, cp312, cp313, cp314] exclude: # Exclude Windows + Python 3.9 as p4p can't build there, due to numpy bug #27224 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index bfa5d44a..e8b16a40 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,7 +10,7 @@ Versioning `_. Unreleased_ ----------- -Nothing yet! +- `Add Python3.14 non-free-threading builds <../../pull/212>`_ 4.7.1_ - 2026-07-23 ------------------- diff --git a/setup.cfg b/setup.cfg index f58723a0..8a18f8f9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -48,7 +48,6 @@ useful = dev = # Pytest 9.1.0 deprecates some APIs that some of our plugins require pytest<9.1.0 - pytest-cov pytest-flake8 # Flake8 5.0 starts printing error, so pin to avoid it: # AttributeError: module 'flake8.options.config' has no attribute 'ConfigFileFinder' @@ -77,12 +76,6 @@ extend-ignore = # Don't do flake8 here as we need to separate it out for CI addopts = --tb=native -vv --doctest-modules --ignore=softioc/iocStats --ignore=epicscorelibs --ignore=docs - --cov=softioc --cov-report term --cov-report xml:cov.xml # Enables all discovered async tests and fixtures to be automatically marked as async, even if # they don't have a specific marker https://github.com/pytest-dev/pytest-asyncio#auto-mode asyncio_mode = auto - -[coverage:run] -# This is covered in the versiongit test suite so exclude it here -omit = */_version_git.py -patch = subprocess