--- name: Build CI wheels on: # Save CI by only running this on release branches or tags. push: branches: - main - v[0-9]+.[0-9]+.x tags: - v* # Also allow running this action on PRs if requested by applying the # "Run cibuildwheel" label. pull_request: types: - opened - synchronize - reopened - labeled permissions: {} jobs: build_sdist: if: >- github.repository == 'matplotlib/matplotlib' && ( github.event_name == 'push' || github.event_name == 'pull_request' && ( ( github.event.action == 'labeled' && github.event.label.name == 'CI: Run cibuildwheel' ) || contains(github.event.pull_request.labels.*.name, 'CI: Run cibuildwheel') ) ) name: Build sdist runs-on: ubuntu-latest permissions: contents: read outputs: SDIST_NAME: ${{ steps.sdist.outputs.SDIST_NAME }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 name: Install Python with: python-version: '3.11' # Something changed somewhere that prevents the downloaded-at-build-time # licenses from being included in built wheels, so pre-download them so # that they exist before the build and are included. - name: Pre-download bundled licenses run: > curl -Lo LICENSE/LICENSE_QHULL https://github.com/qhull/qhull/raw/2020.2/COPYING.txt - name: Install dependencies run: python -m pip install build twine - name: Build sdist id: sdist run: | python -m build --sdist python ci/export_sdist_name.py - name: Check README rendering for PyPI run: twine check dist/* - name: Upload sdist result uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: cibw-sdist path: dist/*.tar.gz if-no-files-found: error build_wheels: if: >- github.repository == 'matplotlib/matplotlib' && ( github.event_name == 'push' || github.event_name == 'pull_request' && ( ( github.event.action == 'labeled' && github.event.label.name == 'CI: Run cibuildwheel' ) || contains(github.event.pull_request.labels.*.name, 'CI: Run cibuildwheel') ) ) needs: build_sdist name: Build wheels on ${{ matrix.os }} for ${{ matrix.cibw_archs }} permissions: contents: read runs-on: ${{ matrix.os }} env: CIBW_BEFORE_BUILD: >- rm -rf {package}/build CIBW_BEFORE_BUILD_WINDOWS: >- pip install delvewheel && rm -rf {package}/build CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: >- delvewheel repair -w {dest_dir} {wheel} CIBW_AFTER_BUILD: >- twine check {wheel} && python {package}/ci/check_wheel_licenses.py {wheel} # On Windows, we explicitly request MSVC compilers (as GitHub Action runners have # MinGW on PATH that would be picked otherwise), switch to a static build for # runtimes, but use dynamic linking for `VCRUNTIME140.dll`, `VCRUNTIME140_1.dll`, # and the UCRT. This avoids requiring specific versions of `MSVCP140.dll`, while # keeping shared state with the rest of the Python process/extensions. CIBW_CONFIG_SETTINGS_WINDOWS: >- setup-args="--vsenv" setup-args="-Db_vscrt=mt" setup-args="-Dcpp_link_args=['ucrt.lib','vcruntime.lib','/nodefaultlib:libucrt.lib','/nodefaultlib:libvcruntime.lib']" CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_SKIP: "*-musllinux_aarch64" CIBW_TEST_COMMAND: >- python {package}/ci/check_version_number.py MACOSX_DEPLOYMENT_TARGET: "10.12" strategy: matrix: include: - os: ubuntu-latest cibw_archs: "x86_64" - os: ubuntu-24.04-arm cibw_archs: "aarch64" - os: windows-latest cibw_archs: "AMD64" - os: windows-11-arm cibw_archs: "ARM64" - os: macos-15-intel cibw_archs: "x86_64" - os: macos-14 cibw_archs: "arm64" steps: - name: Download sdist uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: cibw-sdist path: dist/ - name: Purge Strawberry Perl if: startsWith(matrix.os, 'windows-') run: Remove-Item -Recurse C:\Strawberry - name: Build wheels for CPython 3.14 uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 with: package-dir: dist/${{ needs.build_sdist.outputs.SDIST_NAME }} env: CIBW_BUILD: "cp314-* cp314t-*" CIBW_ENABLE: "cpython-freethreading cpython-prerelease" CIBW_ARCHS: ${{ matrix.cibw_archs }} CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 - name: Build wheels for CPython 3.13 uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 with: package-dir: dist/${{ needs.build_sdist.outputs.SDIST_NAME }} env: CIBW_BUILD: "cp313-* cp313t-*" CIBW_ENABLE: cpython-freethreading CIBW_ARCHS: ${{ matrix.cibw_archs }} - name: Build wheels for CPython 3.12 uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 with: package-dir: dist/${{ needs.build_sdist.outputs.SDIST_NAME }} env: CIBW_BUILD: "cp312-*" CIBW_ARCHS: ${{ matrix.cibw_archs }} - name: Build wheels for CPython 3.11 uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 with: package-dir: dist/${{ needs.build_sdist.outputs.SDIST_NAME }} env: CIBW_BUILD: "cp311-*" CIBW_ARCHS: ${{ matrix.cibw_archs }} - name: Build wheels for PyPy uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 with: package-dir: dist/${{ needs.build_sdist.outputs.SDIST_NAME }} env: CIBW_BUILD: "pp311-*" CIBW_ARCHS: ${{ matrix.cibw_archs }} CIBW_ENABLE: pypy if: matrix.cibw_archs != 'aarch64' && matrix.os != 'windows-latest' && matrix.os != 'windows-11-arm' - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: cibw-wheels-${{ runner.os }}-${{ matrix.cibw_archs }} path: ./wheelhouse/*.whl if-no-files-found: error