diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0d79922..8f16332 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -54,20 +54,7 @@ jobs: else variant=python-gil fi - channels=conda-forge,nodefaults - if [[ $pyver == 3.15 ]]; then - # TODO: drop this branch once Python 3.15.0 final is on conda-forge. - # Until then the 3.15 release candidates need `_python_rc`, which only - # the `python_rc` label provides. The label must rank *below* - # conda-forge: it also holds older `python` rc builds (but no 3.15), and - # strict channel priority would then hide conda-forge's 3.15 rc. - channels=conda-forge,conda-forge/label/python_rc,nodefaults - awk '{ print } /^ - conda-forge$/ { print " - conda-forge/label/python_rc" }' \ - continuous_integration/environment.yml > environment-ci.yml - else - cp continuous_integration/environment.yml environment-ci.yml - fi - echo "CONDA_CHANNELS=$channels" >> "$GITHUB_ENV" + cp continuous_integration/environment.yml environment-ci.yml echo " - python=$pyver" >> environment-ci.yml echo " - $variant" >> environment-ci.yml cat environment-ci.yml @@ -76,7 +63,7 @@ jobs: with: auto-update-conda: true environment-file: environment-ci.yml - channels: ${{ env.CONDA_CHANNELS }} + channels: conda-forge,nodefaults channel-priority: strict activate-environment: suitesparse-graphblas auto-activate-base: false diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index ead4e0b..c96d494 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -46,7 +46,7 @@ jobs: - name: Check metadata run: pipx run twine check dist/* - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: sdist path: dist/*.tar.gz @@ -61,6 +61,10 @@ jobs: include: - os: windows-latest cibw_archs: "auto64" + # No PyPy: NumPy has no wheels for PyPy 8.0, and a NumPy built from source here + # uses MinGW, which warns on import that it is experimental ("CRASHES ARE TO BE + # EXPECTED"), failing the tests. + cibw_skip: "pp*" # Linux x86_64 manylinux - os: ubuntu-latest @@ -91,7 +95,8 @@ jobs: # macOS Apple Silicon # Keep runner version as old as possible: libomp determines minimum macOS version. - - os: macos-14 + # macos-14 is retired on 2026-11-02 (and fails jobs during brownouts before then). + - os: macos-15 cibw_archs: "arm64" # WebAssembly for Pyodide (PEP 783 `pyemscripten_*` wheels). GraphBLAS is built in @@ -143,7 +148,7 @@ jobs: brew fetch --retry libomp && brew reinstall libomp echo "MACOSX_DEPLOYMENT_TARGET=$(otool -l "$(brew --prefix libomp)/lib/libomp.dylib" | grep minos | awk '{print $2}')" >> "$GITHUB_ENV" - - uses: pypa/cibuildwheel@e090b81e30c4d855ea63bf4b6e59204c09a101ae # v4.2.1 + - uses: pypa/cibuildwheel@b3395e271a35f73dad77f21802abe9b986dfe299 # v4.3.1 with: output-dir: wheelhouse env: @@ -151,6 +156,8 @@ jobs: CIBW_BUILD_VERBOSITY: 3 # PyPy is not built by default (since cibuildwheel v3); enable explicitly. + # cibuildwheel v4.3 builds PyPy 8.0, whose ABI tag (`pypy311_pp80`) PyPy 7.3 can't + # install, and NumPy has no wheels for it, so building and testing compile NumPy. # Free-threaded wheels (cp314t, cp315t) are built and tested by default. # cibuildwheel v4 dropped cp313t (and its "cpython-freethreading" # enable option) entirely. @@ -190,7 +197,9 @@ jobs: # Architectures to build specified in matrix CIBW_ARCHS: ${{ matrix.cibw_archs }} - CIBW_SKIP: "${{ matrix.cibw_skip }}" + # Skip PyPy 3.12 everywhere: no NumPy release builds on it yet (NumPy's bundled + # pythoncapi_compat.h redefines functions that PyPy 3.12 v8.0's headers declare). + CIBW_SKIP: "pp312-* ${{ matrix.cibw_skip }}" # Use delvewheel on Windows. # This copies graphblas.dll into the wheel. "repair" in cibuildwheel parlance includes copying any shared @@ -208,7 +217,7 @@ jobs: # `python -m pytest`, because the `pytest` script doesn't work in a Pyodide venv. CIBW_TEST_COMMAND: "python -m pytest --pyargs suitesparse_graphblas -s -k test_print_jit_config && python -m pytest -v -W error --pyargs suitesparse_graphblas" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: wheels-${{ matrix.os }}-${{ matrix.cibw_archs }}${{ matrix.arch_note}} path: wheelhouse/*.whl @@ -229,7 +238,7 @@ jobs: permissions: id-token: write # for Trusted Publishing (and its attestations) steps: - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 with: path: dist merge-multiple: true @@ -250,7 +259,7 @@ jobs: permissions: id-token: write # for Trusted Publishing (and its attestations) steps: - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 with: path: dist merge-multiple: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2b3decc..c51ee4a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -45,12 +45,12 @@ repos: hooks: - id: isort - repo: https://github.com/asottile/pyupgrade - rev: v3.21.2 + rev: v3.22.0 hooks: - id: pyupgrade args: [--py311-plus] - repo: https://github.com/psf/black-pre-commit-mirror - rev: 26.5.1 + rev: 26.10.1 hooks: - id: black - repo: https://github.com/PyCQA/flake8