From 08e5b97e579dfe0d5882189a03af6b6910693290 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Tue, 17 Sep 2024 01:54:17 -0400 Subject: [PATCH 01/20] ci: modernize update workflow (#2010) --- .github/workflows/update-dependencies.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml index 2163d3c76..ed41621db 100644 --- a/.github/workflows/update-dependencies.yml +++ b/.github/workflows/update-dependencies.yml @@ -20,6 +20,16 @@ jobs: if: github.repository_owner == 'pypa' || github.event_name != 'schedule' runs-on: ubuntu-latest steps: + + # we use this step to grab a Github App auth token, so that PRs generated by this workflow + # run the GHA tests. + - uses: actions/create-github-app-token@v1 + id: generate-token + if: github.ref == 'refs/heads/main' && github.repository == 'pypa/cibuildwheel' + with: + app_id: ${{ secrets.CIBUILDWHEEL_BOT_APP_ID }} + private_key: ${{ secrets.CIBUILDWHEEL_BOT_APP_PRIVATE_KEY }} + - uses: actions/checkout@v4 - uses: wntrblm/nox@2024.04.15 @@ -33,15 +43,6 @@ jobs: - name: "Run update: docs user projects" run: nox --force-color -s update_proj -- --auth=${{ secrets.GITHUB_TOKEN }} - # we use this step to grab a Github App auth token, so that PRs generated by this workflow - # run the GHA tests. - - uses: tibdex/github-app-token@v2 - id: generate-token - if: github.ref == 'refs/heads/main' && github.repository == 'pypa/cibuildwheel' - with: - app_id: ${{ secrets.CIBUILDWHEEL_BOT_APP_ID }} - private_key: ${{ secrets.CIBUILDWHEEL_BOT_APP_PRIVATE_KEY }} - - name: Create Pull Request if: github.ref == 'refs/heads/main' && github.repository == 'pypa/cibuildwheel' uses: peter-evans/create-pull-request@v7 @@ -53,7 +54,6 @@ jobs: PR generated by "Update dependencies" [workflow](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}). branch: update-dependencies-pr - committer: "cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com>" - author: "cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com>" + sign-commits: true token: ${{ steps.generate-token.outputs.token }} delete-branch: true From 311f64987b902c5245b895fe5446f3a0ba8e3c0d Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2024 12:12:53 -0400 Subject: [PATCH 02/20] [Bot] Update dependencies (#2014) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- .../resources/pinned_docker_images.cfg | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index a27ba95a9..6bb447b48 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -29,26 +29,26 @@ manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.16-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.09-0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.09-0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.09-0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.16-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.16-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.16-1 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.09.09-0 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.09.16-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.09.09-0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.09-0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.09-0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.09.16-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.16-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.16-1 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.09.09-0 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.09.16-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.09.09-0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.09-0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.09-0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.09.16-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.16-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.16-1 [pypy_aarch64] manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.16-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.09-0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.16-1 From 1327af50770b4f49c400300bf1abda661e08959c Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 13:19:50 +0200 Subject: [PATCH 03/20] [Bot] Update dependencies (#2018) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- .../resources/constraints-pyodide312.txt | 12 ++--- .../resources/constraints-python310.txt | 6 +-- .../resources/constraints-python311.txt | 6 +-- .../resources/constraints-python312.txt | 6 +-- .../resources/constraints-python313.txt | 6 +-- .../resources/constraints-python37.txt | 2 +- .../resources/constraints-python38.txt | 6 +-- .../resources/constraints-python39.txt | 6 +-- cibuildwheel/resources/constraints.txt | 6 +-- .../resources/pinned_docker_images.cfg | 48 +++++++++---------- cibuildwheel/resources/virtualenv.toml | 2 +- docs/working-examples.md | 4 +- 12 files changed, 55 insertions(+), 55 deletions(-) diff --git a/cibuildwheel/resources/constraints-pyodide312.txt b/cibuildwheel/resources/constraints-pyodide312.txt index 33c90179d..e0fd9adb6 100644 --- a/cibuildwheel/resources/constraints-pyodide312.txt +++ b/cibuildwheel/resources/constraints-pyodide312.txt @@ -2,7 +2,7 @@ # nox -s update_constraints annotated-types==0.7.0 # via pydantic -anyio==4.4.0 +anyio==4.6.0 # via httpx auditwheel-emscripten==0.0.16 # via pyodide-build @@ -25,7 +25,7 @@ cmake==3.30.3 # via pyodide-build distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv h11==0.14.0 # via httpcore @@ -54,13 +54,13 @@ packaging==24.1 # unearth pip==24.2 # via -r .nox/update_constraints/tmp/constraints-pyodide.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv -pydantic==2.9.1 +pydantic==2.9.2 # via # pyodide-build # pyodide-lock -pydantic-core==2.23.3 +pydantic-core==2.23.4 # via pydantic pygments==2.18.0 # via rich @@ -113,7 +113,7 @@ urllib3==2.2.3 # via # requests # types-requests -virtualenv==20.26.4 +virtualenv==20.26.5 # via # build # pyodide-build diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 45a592ec8..6c7d31404 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -8,7 +8,7 @@ delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv importlib-metadata==8.5.0 # via build @@ -20,7 +20,7 @@ packaging==24.1 # delocate pip==24.2 # via -r cibuildwheel/resources/constraints.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.1.0 # via build @@ -28,7 +28,7 @@ tomli==2.0.1 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in zipp==3.20.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index 20ec68126..a2987cf47 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -8,7 +8,7 @@ delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv macholib==1.16.3 # via delocate @@ -18,11 +18,11 @@ packaging==24.1 # delocate pip==24.2 # via -r cibuildwheel/resources/constraints.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index 20ec68126..a2987cf47 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -8,7 +8,7 @@ delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv macholib==1.16.3 # via delocate @@ -18,11 +18,11 @@ packaging==24.1 # delocate pip==24.2 # via -r cibuildwheel/resources/constraints.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt index 20ec68126..a2987cf47 100644 --- a/cibuildwheel/resources/constraints-python313.txt +++ b/cibuildwheel/resources/constraints-python313.txt @@ -8,7 +8,7 @@ delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv macholib==1.16.3 # via delocate @@ -18,11 +18,11 @@ packaging==24.1 # delocate pip==24.2 # via -r cibuildwheel/resources/constraints.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 7198fa8d3..4e8fb4d4b 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -33,7 +33,7 @@ typing-extensions==4.7.1 # delocate # importlib-metadata # platformdirs -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in zipp==3.15.0 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 45a592ec8..6c7d31404 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -8,7 +8,7 @@ delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv importlib-metadata==8.5.0 # via build @@ -20,7 +20,7 @@ packaging==24.1 # delocate pip==24.2 # via -r cibuildwheel/resources/constraints.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.1.0 # via build @@ -28,7 +28,7 @@ tomli==2.0.1 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in zipp==3.20.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 45a592ec8..6c7d31404 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -8,7 +8,7 @@ delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv importlib-metadata==8.5.0 # via build @@ -20,7 +20,7 @@ packaging==24.1 # delocate pip==24.2 # via -r cibuildwheel/resources/constraints.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.1.0 # via build @@ -28,7 +28,7 @@ tomli==2.0.1 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in zipp==3.20.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 20ec68126..a2987cf47 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -8,7 +8,7 @@ delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv -filelock==3.16.0 +filelock==3.16.1 # via virtualenv macholib==1.16.3 # via delocate @@ -18,11 +18,11 @@ packaging==24.1 # delocate pip==24.2 # via -r cibuildwheel/resources/constraints.in -platformdirs==4.3.3 +platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.4 +virtualenv==20.26.5 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 6bb447b48..c07e5fb4d 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.16-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.09.16-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.09.16-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.22-4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.09.22-4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.09.22-4 [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.09.16-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.09.16-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.09.22-4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.09.22-4 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.16-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.22-4 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.16-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.16-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.16-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.22-4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.22-4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.22-4 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.09.16-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.16-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.16-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.09.22-4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.22-4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.22-4 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.09.16-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.16-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.16-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.09.22-4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.22-4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.22-4 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.16-1 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.22-4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.16-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.22-4 diff --git a/cibuildwheel/resources/virtualenv.toml b/cibuildwheel/resources/virtualenv.toml index b29f2fe8e..72c9523dc 100644 --- a/cibuildwheel/resources/virtualenv.toml +++ b/cibuildwheel/resources/virtualenv.toml @@ -1,2 +1,2 @@ py36 = { version = "20.21.1", url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" } -default = { version = "20.26.4", url = "https://github.com/pypa/get-virtualenv/blob/20.26.4/public/virtualenv.pyz?raw=true" } +default = { version = "20.26.5", url = "https://github.com/pypa/get-virtualenv/blob/20.26.5/public/virtualenv.pyz?raw=true" } diff --git a/docs/working-examples.md b/docs/working-examples.md index 8e09fe90c..6ffa20abb 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -98,8 +98,8 @@ title: Working examples | [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | | [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | | [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | -| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | +| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | | [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | | [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` | | [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. | @@ -208,8 +208,8 @@ title: Working examples [pybase64]: https://github.com/mayeut/pybase64 [Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build [fathon]: https://github.com/stfbnc/fathon -[Arbor]: https://github.com/arbor-sim/arbor [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example +[Arbor]: https://github.com/arbor-sim/arbor [polaroid]: https://github.com/daggy1234/polaroid [Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python [clang-format]: https://github.com/ssciwr/clang-format-wheel From 6dcd7dd34be0fa754b7a61cdf1ab2e7ac11bb2d7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 08:37:07 +0200 Subject: [PATCH 04/20] [pre-commit.ci] pre-commit autoupdate (#2019) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.6.5 → v0.6.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.6.5...v0.6.7) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2ec789f6b..ca76bf353 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.6.5 + rev: v0.6.7 hooks: - id: ruff args: ["--fix", "--show-fixes"] From bb2f6652b7d2655755da22c8bf98e2814e3eef3f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 01:08:09 -0400 Subject: [PATCH 05/20] [pre-commit.ci] pre-commit autoupdate (#2023) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.6.7 → v0.6.8](https://github.com/astral-sh/ruff-pre-commit/compare/v0.6.7...v0.6.8) - [github.com/python-jsonschema/check-jsonschema: 0.29.2 → 0.29.3](https://github.com/python-jsonschema/check-jsonschema/compare/0.29.2...0.29.3) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ca76bf353..b535d33b1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.6.7 + rev: v0.6.8 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -77,7 +77,7 @@ repos: - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.29.2 + rev: 0.29.3 hooks: - id: check-dependabot - id: check-github-actions From 735e88deba4b3758af8ecca429a076c1a9f684bb Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 01:09:19 -0400 Subject: [PATCH 06/20] [Bot] Update dependencies (#2022) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- .../resources/constraints-pyodide312.txt | 6 +-- .../resources/constraints-python310.txt | 4 +- .../resources/constraints-python311.txt | 4 +- .../resources/constraints-python312.txt | 4 +- .../resources/constraints-python313.txt | 4 +- .../resources/constraints-python37.txt | 4 +- .../resources/constraints-python38.txt | 4 +- .../resources/constraints-python39.txt | 4 +- cibuildwheel/resources/constraints.txt | 4 +- .../resources/pinned_docker_images.cfg | 48 +++++++++---------- cibuildwheel/resources/virtualenv.toml | 2 +- docs/working-examples.md | 12 ++--- 12 files changed, 50 insertions(+), 50 deletions(-) diff --git a/cibuildwheel/resources/constraints-pyodide312.txt b/cibuildwheel/resources/constraints-pyodide312.txt index e0fd9adb6..997a3c3d0 100644 --- a/cibuildwheel/resources/constraints-pyodide312.txt +++ b/cibuildwheel/resources/constraints-pyodide312.txt @@ -21,7 +21,7 @@ click==8.1.7 # via typer cloudpickle==3.0.0 # via loky -cmake==3.30.3 +cmake==3.30.4 # via pyodide-build distlib==0.3.8 # via virtualenv @@ -72,7 +72,7 @@ pyodide-cli==0.2.4 # pyodide-build pyodide-lock==0.1.0a6 # via pyodide-build -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build pyyaml==6.0.2 # via pyodide-build @@ -113,7 +113,7 @@ urllib3==2.2.3 # via # requests # types-requests -virtualenv==20.26.5 +virtualenv==20.26.6 # via # build # pyodide-build diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 6c7d31404..0bd4e1ab6 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -22,13 +22,13 @@ pip==24.2 # via -r cibuildwheel/resources/constraints.in platformdirs==4.3.6 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build tomli==2.0.1 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in zipp==3.20.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index a2987cf47..4460e60cc 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -20,9 +20,9 @@ pip==24.2 # via -r cibuildwheel/resources/constraints.in platformdirs==4.3.6 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index a2987cf47..4460e60cc 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -20,9 +20,9 @@ pip==24.2 # via -r cibuildwheel/resources/constraints.in platformdirs==4.3.6 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt index a2987cf47..4460e60cc 100644 --- a/cibuildwheel/resources/constraints-python313.txt +++ b/cibuildwheel/resources/constraints-python313.txt @@ -20,9 +20,9 @@ pip==24.2 # via -r cibuildwheel/resources/constraints.in platformdirs==4.3.6 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 4e8fb4d4b..ba594d6c7 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -24,7 +24,7 @@ pip==24.0 # via -r cibuildwheel/resources/constraints.in platformdirs==4.0.0 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build tomli==2.0.1 # via build @@ -33,7 +33,7 @@ typing-extensions==4.7.1 # delocate # importlib-metadata # platformdirs -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in zipp==3.15.0 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 6c7d31404..0bd4e1ab6 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -22,13 +22,13 @@ pip==24.2 # via -r cibuildwheel/resources/constraints.in platformdirs==4.3.6 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build tomli==2.0.1 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in zipp==3.20.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 6c7d31404..0bd4e1ab6 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -22,13 +22,13 @@ pip==24.2 # via -r cibuildwheel/resources/constraints.in platformdirs==4.3.6 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build tomli==2.0.1 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in zipp==3.20.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index a2987cf47..4460e60cc 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -20,9 +20,9 @@ pip==24.2 # via -r cibuildwheel/resources/constraints.in platformdirs==4.3.6 # via virtualenv -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via build typing-extensions==4.12.2 # via delocate -virtualenv==20.26.5 +virtualenv==20.26.6 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index c07e5fb4d..9a18d48d4 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.22-4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.09.22-4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.09.22-4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.09.28-3 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.09.28-3 [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.09.22-4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.09.22-4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.09.28-3 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.09.28-3 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.22-4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.28-3 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.22-4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.22-4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.22-4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.28-3 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.28-3 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.09.22-4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.22-4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.22-4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.28-3 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.28-3 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.09.22-4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.22-4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.22-4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.28-3 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.28-3 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.22-4 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.22-4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.28-3 diff --git a/cibuildwheel/resources/virtualenv.toml b/cibuildwheel/resources/virtualenv.toml index 72c9523dc..02fbab016 100644 --- a/cibuildwheel/resources/virtualenv.toml +++ b/cibuildwheel/resources/virtualenv.toml @@ -1,2 +1,2 @@ py36 = { version = "20.21.1", url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" } -default = { version = "20.26.5", url = "https://github.com/pypa/get-virtualenv/blob/20.26.5/public/virtualenv.pyz?raw=true" } +default = { version = "20.26.6", url = "https://github.com/pypa/get-virtualenv/blob/20.26.6/public/virtualenv.pyz?raw=true" } diff --git a/docs/working-examples.md b/docs/working-examples.md index 6ffa20abb..ae92d302b 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -41,8 +41,8 @@ title: Working examples | [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI | | [pyzmq][] | ![github icon][] ![circleci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython on CPython and CFFI on PyPy. ARM wheels for linux are built natively on CircleCI. | | [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels | -| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy | | [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader | +| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy | | [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. | | [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | | [PyCryptodome][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A self-contained cryptographic library for Python | @@ -81,8 +81,8 @@ title: Working examples | [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. | | [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. | | [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing | -| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq | | [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | +| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq | | [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 | | [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support | | [keyvi][] | ![github icon][] | ![linux icon][] ![apple icon][] | FST based key value index highly optimized for size and lookup performance, utilizes ccache action for improved runtime | @@ -96,8 +96,8 @@ title: Working examples | [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis | | [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 | | [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | -| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | | [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | +| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | | [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | | [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | @@ -151,8 +151,8 @@ title: Working examples [Dependency Injector]: https://github.com/ets-labs/python-dependency-injector [pyzmq]: https://github.com/zeromq/pyzmq [Implicit]: https://github.com/benfred/implicit -[vispy]: https://github.com/vispy/vispy [tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader +[vispy]: https://github.com/vispy/vispy [CTranslate2]: https://github.com/OpenNMT/CTranslate2 [coverage.py]: https://github.com/nedbat/coveragepy [PyCryptodome]: https://github.com/Legrandin/pycryptodome @@ -191,8 +191,8 @@ title: Working examples [abess]: https://github.com/abess-team/abess [sourmash]: https://github.com/sourmash-bio/sourmash [cyvcf2]: https://github.com/brentp/cyvcf2 -[jq.py]: https://github.com/mwilliamson/jq.py [matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile +[jq.py]: https://github.com/mwilliamson/jq.py [iminuit]: https://github.com/scikit-hep/iminuit [Tokenizer]: https://github.com/OpenNMT/Tokenizer [keyvi]: https://github.com/KeyviDev/keyvi @@ -206,8 +206,8 @@ title: Working examples [power-grid-model]: https://github.com/PowerGridModel/power-grid-model [Python-WebRTC]: https://github.com/MarshalX/python-webrtc [pybase64]: https://github.com/mayeut/pybase64 -[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build [fathon]: https://github.com/stfbnc/fathon +[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example [Arbor]: https://github.com/arbor-sim/arbor [polaroid]: https://github.com/daggy1234/polaroid From dfd01af9aa15f73df4504d14086db64ac0dce436 Mon Sep 17 00:00:00 2001 From: zachlewis Date: Tue, 1 Oct 2024 01:10:58 -0400 Subject: [PATCH 07/20] fix: more reliably validate Podman API version (#2016) * fix: parse version strings that include dashes It's possible for some container engines to report their versions with a dash (e.g., "4.9.4-rhel"), which breaks packaging.version.Version's ability to parse the string. This commit introduces a version_from_string method which santizies the version string and returns an instance of Version. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * cleanup: pacify ruff * cleanup: further pacify ruff * fix: properly define _version_from_string method Also, lift the method up and prefix with a "_" to better match the existing conventions * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * refactor: more robust podman ver check Use the "podman --version" command instead of "podman version -f {{json .}}" for better reliability across distributions. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: oci engine version check Lower Docker API check to 1.41 Podman versions are not PEP440 compliant, remove distro specific suffixes before parsing. Add tests with real-world outputs and some made up ones. * fix: UX on OCIEngineTooOldError * Add FlexibleVersion per review comment --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: mayeut --- cibuildwheel/errors.py | 4 +- cibuildwheel/oci_container.py | 50 ++++++++++++++++------- cibuildwheel/util.py | 50 ++++++++++++++++++++++- unit_test/oci_container_test.py | 71 ++++++++++++++++++++++++++++++++- unit_test/utils_test.py | 15 +++++++ 5 files changed, 172 insertions(+), 18 deletions(-) diff --git a/cibuildwheel/errors.py b/cibuildwheel/errors.py index e441bd40b..a1cc6a33c 100644 --- a/cibuildwheel/errors.py +++ b/cibuildwheel/errors.py @@ -61,4 +61,6 @@ def __init__(self, wheel_name: str) -> None: class OCIEngineTooOldError(FatalError): - return_code = 7 + def __init__(self, message: str) -> None: + super().__init__(message) + self.return_code = 7 diff --git a/cibuildwheel/oci_container.py b/cibuildwheel/oci_container.py index b13417e3b..bdd663b30 100644 --- a/cibuildwheel/oci_container.py +++ b/cibuildwheel/oci_container.py @@ -8,6 +8,7 @@ import shutil import subprocess import sys +import textwrap import typing import uuid from collections.abc import Mapping, Sequence @@ -17,14 +18,13 @@ from types import TracebackType from typing import IO, Dict, Literal -from packaging.version import InvalidVersion, Version - from ._compat.typing import Self, assert_never from .errors import OCIEngineTooOldError from .logger import log from .typing import PathOrStr, PopenBytes from .util import ( CIProvider, + FlexibleVersion, call, detect_ci_provider, parse_key_value_string, @@ -103,25 +103,45 @@ def _check_engine_version(engine: OCIContainerEngineConfig) -> None: version_string = call(engine.name, "version", "-f", "{{json .}}", capture_stdout=True) version_info = json.loads(version_string.strip()) if engine.name == "docker": - # --platform support was introduced in 1.32 as experimental - # docker cp, as used by cibuildwheel, has been fixed in v24 => API 1.43, https://github.com/moby/moby/issues/38995 - client_api_version = Version(version_info["Client"]["ApiVersion"]) - engine_api_version = Version(version_info["Server"]["ApiVersion"]) - version_supported = min(client_api_version, engine_api_version) >= Version("1.43") + client_api_version = FlexibleVersion(version_info["Client"]["ApiVersion"]) + server_api_version = FlexibleVersion(version_info["Server"]["ApiVersion"]) + # --platform support was introduced in 1.32 as experimental, 1.41 removed the experimental flag + version = min(client_api_version, server_api_version) + minimum_version = FlexibleVersion("1.41") + minimum_version_str = "20.10.0" # docker version + error_msg = textwrap.dedent( + f""" + Build failed because {engine.name} is too old. + + cibuildwheel requires {engine.name}>={minimum_version_str} running API version {minimum_version}. + The API version found by cibuildwheel is {version}. + """ + ) elif engine.name == "podman": - client_api_version = Version(version_info["Client"]["APIVersion"]) + # podman uses the same version string for "Version" & "ApiVersion" + client_version = FlexibleVersion(version_info["Client"]["Version"]) if "Server" in version_info: - engine_api_version = Version(version_info["Server"]["APIVersion"]) + server_version = FlexibleVersion(version_info["Server"]["Version"]) else: - engine_api_version = client_api_version + server_version = client_version # --platform support was introduced in v3 - version_supported = min(client_api_version, engine_api_version) >= Version("3") + version = min(client_version, server_version) + minimum_version = FlexibleVersion("3") + error_msg = textwrap.dedent( + f""" + Build failed because {engine.name} is too old. + + cibuildwheel requires {engine.name}>={minimum_version}. + The version found by cibuildwheel is {version}. + """ + ) else: assert_never(engine.name) - if not version_supported: - raise OCIEngineTooOldError() from None - except (subprocess.CalledProcessError, KeyError, InvalidVersion) as e: - raise OCIEngineTooOldError() from e + if version < minimum_version: + raise OCIEngineTooOldError(error_msg) from None + except (subprocess.CalledProcessError, KeyError, ValueError) as e: + msg = f"Build failed because {engine.name} is too old or is not working properly." + raise OCIEngineTooOldError(msg) from e class OCIContainer: diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 31b3eaf86..b9db4268b 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -19,7 +19,7 @@ from collections.abc import Generator, Iterable, Mapping, MutableMapping, Sequence from dataclasses import dataclass from enum import Enum -from functools import lru_cache +from functools import lru_cache, total_ordering from pathlib import Path, PurePath from tempfile import TemporaryDirectory from time import sleep @@ -899,3 +899,51 @@ def combine_constraints( env["UV_CONSTRAINT"] = env["PIP_CONSTRAINT"] = " ".join( c for c in [our_constraints, user_constraints] if c ) + + +@total_ordering +class FlexibleVersion: + version_str: str + version_parts: tuple[int, ...] + suffix: str + + def __init__(self, version_str: str) -> None: + self.version_str = version_str + + # Split into numeric parts and the optional suffix + match = re.match(r"^[v]?(\d+(\.\d+)*)(.*)$", version_str) + if not match: + msg = f"Invalid version string: {version_str}" + raise ValueError(msg) + + version_part, _, suffix = match.groups() + + # Convert numeric version part into a tuple of integers + self.version_parts = tuple(map(int, version_part.split("."))) + self.suffix = suffix.strip() if suffix else "" + + # Normalize by removing trailing zeros + self.version_parts = self._remove_trailing_zeros(self.version_parts) + + def _remove_trailing_zeros(self, parts: tuple[int, ...]) -> tuple[int, ...]: + # Remove trailing zeros for accurate comparisons + # without this, "3.0" would be considered greater than "3" + while parts and parts[-1] == 0: + parts = parts[:-1] + return parts + + def __eq__(self, other: object) -> bool: + if not isinstance(other, FlexibleVersion): + raise NotImplementedError() + return (self.version_parts, self.suffix) == (other.version_parts, other.suffix) + + def __lt__(self, other: object) -> bool: + if not isinstance(other, FlexibleVersion): + raise NotImplementedError() + return (self.version_parts, self.suffix) < (other.version_parts, other.suffix) + + def __repr__(self) -> str: + return f"FlexibleVersion('{self.version_str}')" + + def __str__(self) -> str: + return self.version_str diff --git a/unit_test/oci_container_test.py b/unit_test/oci_container_test.py index d88ca52eb..0f99618a6 100644 --- a/unit_test/oci_container_test.py +++ b/unit_test/oci_container_test.py @@ -8,13 +8,21 @@ import subprocess import sys import textwrap +from contextlib import nullcontext from pathlib import Path, PurePath, PurePosixPath import pytest import tomli_w +import cibuildwheel.oci_container from cibuildwheel.environment import EnvironmentAssignmentBash -from cibuildwheel.oci_container import OCIContainer, OCIContainerEngineConfig, OCIPlatform +from cibuildwheel.errors import OCIEngineTooOldError +from cibuildwheel.oci_container import ( + OCIContainer, + OCIContainerEngineConfig, + OCIPlatform, + _check_engine_version, +) from cibuildwheel.util import CIProvider, detect_ci_provider # Test utilities @@ -569,3 +577,64 @@ def test_multiarch_image(container_engine, platform): OCIPlatform.S390X: "s390x", } assert output_map[platform] == output.strip() + + +@pytest.mark.parametrize( + ("engine_name", "version", "context"), + [ + ( + "docker", + None, # 17.12.1-ce does supports "docker version --format '{{json . }}'" so a version before that + pytest.raises(OCIEngineTooOldError), + ), + ( + "docker", + '{"Client":{"Version":"19.03.15","ApiVersion": "1.40"},"Server":{"ApiVersion": "1.40"}}', + pytest.raises(OCIEngineTooOldError), + ), + ( + "docker", + '{"Client":{"Version":"20.10.0","ApiVersion":"1.41"},"Server":{"ApiVersion":"1.41"}}', + nullcontext(), + ), + ( + "docker", + '{"Client":{"Version":"24.0.0","ApiVersion":"1.43"},"Server":{"ApiVersion":"1.43"}}', + nullcontext(), + ), + ( + "docker", + '{"Client":{"ApiVersion":"1.43"},"Server":{"ApiVersion":"1.30"}}', + pytest.raises(OCIEngineTooOldError), + ), + ( + "docker", + '{"Client":{"ApiVersion":"1.30"},"Server":{"ApiVersion":"1.43"}}', + pytest.raises(OCIEngineTooOldError), + ), + ("podman", '{"Client":{"Version":"5.2.0"},"Server":{"Version":"5.1.2"}}', nullcontext()), + ("podman", '{"Client":{"Version":"4.9.4-rhel"}}', nullcontext()), + ( + "podman", + '{"Client":{"Version":"5.2.0"},"Server":{"Version":"2.1.2"}}', + pytest.raises(OCIEngineTooOldError), + ), + ( + "podman", + '{"Client":{"Version":"2.2.0"},"Server":{"Version":"5.1.2"}}', + pytest.raises(OCIEngineTooOldError), + ), + ("podman", '{"Client":{"Version":"3.0~rc1-rhel"}}', nullcontext()), + ("podman", '{"Client":{"Version":"2.1.0~rc1"}}', pytest.raises(OCIEngineTooOldError)), + ], +) +def test_engine_version(engine_name, version, context, monkeypatch): + def mockcall(*args, **kwargs): + if version is None: + raise subprocess.CalledProcessError(1, " ".join(str(arg) for arg in args)) + return version + + monkeypatch.setattr(cibuildwheel.oci_container, "call", mockcall) + engine = OCIContainerEngineConfig.from_config_string(engine_name) + with context: + _check_engine_version(engine) diff --git a/unit_test/utils_test.py b/unit_test/utils_test.py index 4725163ff..b433800a5 100644 --- a/unit_test/utils_test.py +++ b/unit_test/utils_test.py @@ -6,6 +6,7 @@ import pytest from cibuildwheel.util import ( + FlexibleVersion, find_compatible_wheel, fix_ansi_codes_for_github_actions, format_safe, @@ -206,3 +207,17 @@ def test_parse_key_value_string(): "name": ["docker"], "create_args": [], } + + +def test_flexible_version_comparisons(): + assert FlexibleVersion("2.0") == FlexibleVersion("2") + assert FlexibleVersion("2.0") < FlexibleVersion("2.1") + assert FlexibleVersion("2.1") > FlexibleVersion("2") + assert FlexibleVersion("1.9.9") < FlexibleVersion("2.0") + assert FlexibleVersion("1.10") > FlexibleVersion("1.9.9") + assert FlexibleVersion("3.0.1") > FlexibleVersion("3.0") + assert FlexibleVersion("3.0") < FlexibleVersion("3.0.1") + # Suffix should not affect comparisons + assert FlexibleVersion("1.0.1-rhel") > FlexibleVersion("1.0") + assert FlexibleVersion("1.0.1-rhel") < FlexibleVersion("1.1") + assert FlexibleVersion("1.0.1") == FlexibleVersion("v1.0.1") From 9fad66fcfb699a9f2ee7fcadbe3631a6cc409cb1 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Tue, 1 Oct 2024 16:33:57 +0200 Subject: [PATCH 08/20] feat: add musllinux armv7l (#2017) * feature: add musllinux armv7l * fix: local armv7l images * fix python 3.8 tests * address review comments --------- Co-authored-by: Henry Schreiner --- README.md | 28 +++++----- bin/generate_schema.py | 3 ++ bin/update_docker.py | 1 + cibuildwheel/architecture.py | 10 ++-- cibuildwheel/linux.py | 1 + cibuildwheel/logger.py | 3 +- cibuildwheel/oci_container.py | 24 +++++---- cibuildwheel/resources/build-platforms.toml | 9 ++++ .../resources/cibuildwheel.schema.json | 11 ++++ cibuildwheel/resources/defaults.toml | 1 + .../resources/pinned_docker_images.cfg | 3 ++ cibuildwheel/util.py | 1 + docs/options.md | 35 ++++++------ test/utils.py | 4 +- unit_test/main_tests/main_platform_test.py | 1 + unit_test/oci_container_test.py | 54 +++++++++++++------ 16 files changed, 126 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 5e86ca72b..a2f970fa1 100644 --- a/README.md +++ b/README.md @@ -22,20 +22,20 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult What does it do? ---------------- -| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | Pyodide | -|----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----|-----| -| CPython 3.6 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | -| CPython 3.7 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | -| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | -| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | -| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | -| CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | -| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁴ | -| CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | -| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | -| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | -| PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | -| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | +| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | musllinux armv7l | Pyodide | +|----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----|---|-----| +| CPython 3.6 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | +| CPython 3.7 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | +| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | +| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | +| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | +| CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | +| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁴ | +| CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | +| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | +| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | +| PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | +| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | ¹ PyPy is only supported for manylinux wheels.
² Windows arm64 support is experimental.
diff --git a/bin/generate_schema.py b/bin/generate_schema.py index 2c90fe925..41f4ad4cd 100755 --- a/bin/generate_schema.py +++ b/bin/generate_schema.py @@ -137,6 +137,9 @@ musllinux-aarch64-image: type: string description: Specify alternative manylinux / musllinux container images + musllinux-armv7l-image: + type: string + description: Specify alternative manylinux / musllinux container images musllinux-i686-image: type: string description: Specify alternative manylinux / musllinux container images diff --git a/bin/update_docker.py b/bin/update_docker.py index 9be3ae03d..a455afb72 100755 --- a/bin/update_docker.py +++ b/bin/update_docker.py @@ -65,6 +65,7 @@ class Image: Image("musllinux_1_2", "aarch64", "quay.io/pypa/musllinux_1_2_aarch64", None), Image("musllinux_1_2", "ppc64le", "quay.io/pypa/musllinux_1_2_ppc64le", None), Image("musllinux_1_2", "s390x", "quay.io/pypa/musllinux_1_2_s390x", None), + Image("musllinux_1_2", "armv7l", "quay.io/pypa/musllinux_1_2_armv7l", None), ] config = configparser.ConfigParser() diff --git a/cibuildwheel/architecture.py b/cibuildwheel/architecture.py index c6c4b623f..0f622def9 100644 --- a/cibuildwheel/architecture.py +++ b/cibuildwheel/architecture.py @@ -37,6 +37,7 @@ class Architecture(Enum): aarch64 = "aarch64" ppc64le = "ppc64le" s390x = "s390x" + armv7l = "armv7l" # mac archs universal2 = "universal2" @@ -132,6 +133,7 @@ def all_archs(platform: PlatformName) -> set[Architecture]: Architecture.aarch64, Architecture.ppc64le, Architecture.s390x, + Architecture.armv7l, }, "macos": {Architecture.x86_64, Architecture.arm64, Architecture.universal2}, "windows": {Architecture.x86, Architecture.AMD64, Architecture.ARM64}, @@ -140,17 +142,15 @@ def all_archs(platform: PlatformName) -> set[Architecture]: return all_archs_map[platform] @staticmethod - # pylint: disable-next=inconsistent-return-statements def bitness_archs(platform: PlatformName, bitness: Literal["64", "32"]) -> set[Architecture]: - archs_32 = {Architecture.i686, Architecture.x86} + archs_32 = {Architecture.i686, Architecture.x86, Architecture.armv7l} auto_archs = Architecture.auto_archs(platform) if bitness == "64": return auto_archs - archs_32 - elif bitness == "32": + if bitness == "32": return auto_archs & archs_32 - else: - assert_never(bitness) + assert_never(bitness) def allowed_architectures_check( diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index 863536c92..ce6b930d1 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -35,6 +35,7 @@ Architecture.aarch64: OCIPlatform.ARM64, Architecture.ppc64le: OCIPlatform.PPC64LE, Architecture.s390x: OCIPlatform.S390X, + Architecture.armv7l: OCIPlatform.ARMV7, } diff --git a/cibuildwheel/logger.py b/cibuildwheel/logger.py index 312e2f559..0b32fe35b 100644 --- a/cibuildwheel/logger.py +++ b/cibuildwheel/logger.py @@ -27,7 +27,8 @@ "musllinux_i686": "musllinux i686", "musllinux_aarch64": "musllinux aarch64", "musllinux_ppc64le": "musllinux ppc64le", - "musllinux_s390x": "manylinux s390x", + "musllinux_s390x": "musllinux s390x", + "musllinux_armv7l": "musllinux armv7l", "win32": "Windows 32bit", "win_amd64": "Windows 64bit", "win_arm64": "Windows on ARM 64bit", diff --git a/cibuildwheel/oci_container.py b/cibuildwheel/oci_container.py index bdd663b30..a93079f14 100644 --- a/cibuildwheel/oci_container.py +++ b/cibuildwheel/oci_container.py @@ -38,6 +38,7 @@ class OCIPlatform(Enum): i386 = "linux/386" AMD64 = "linux/amd64" + ARMV7 = "linux/arm/v7" ARM64 = "linux/arm64" PPC64LE = "linux/ppc64le" S390X = "linux/s390x" @@ -208,7 +209,11 @@ def _get_platform_args(self, *, oci_platform: OCIPlatform | None = None) -> tupl "inspect", self.image, "--format", - "{{.Os}}/{{.Architecture}}", + ( + "{{.Os}}/{{.Architecture}}/{{.Variant}}" + if len(oci_platform.value.split("/")) == 3 + else "{{.Os}}/{{.Architecture}}" + ), capture_stdout=True, ).strip() if image_platform == oci_platform.value: @@ -235,7 +240,7 @@ def __enter__(self) -> Self: platform_args = self._get_platform_args() simulate_32_bit = False - if self.oci_platform == OCIPlatform.i386: + if self.oci_platform in {OCIPlatform.i386, OCIPlatform.ARMV7}: # If the architecture running the image is already the right one # or the image entrypoint takes care of enforcing this, then we don't need to # simulate this @@ -246,13 +251,14 @@ def __enter__(self) -> Self: *run_cmd, *platform_args, self.image, *ctr_cmd, capture_stdout=True ).strip() except subprocess.CalledProcessError: - # The image might have been built with amd64 architecture - # Let's try that - platform_args = self._get_platform_args(oci_platform=OCIPlatform.AMD64) - container_machine = call( - *run_cmd, *platform_args, self.image, *ctr_cmd, capture_stdout=True - ).strip() - simulate_32_bit = container_machine != "i686" + if self.oci_platform == OCIPlatform.i386: + # The image might have been built with amd64 architecture + # Let's try that + platform_args = self._get_platform_args(oci_platform=OCIPlatform.AMD64) + container_machine = call( + *run_cmd, *platform_args, self.image, *ctr_cmd, capture_stdout=True + ).strip() + simulate_32_bit = container_machine not in {"i686", "armv7l", "armv8l"} shell_args = ["linux32", "/bin/bash"] if simulate_32_bit else ["/bin/bash"] diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 2c8e1e5c1..0a27238ca 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -102,6 +102,15 @@ python_configurations = [ { identifier = "cp312-musllinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp313t-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, + { identifier = "cp36-musllinux_armv7l", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, + { identifier = "cp37-musllinux_armv7l", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, + { identifier = "cp38-musllinux_armv7l", version = "3.8", path_str = "/opt/python/cp38-cp38" }, + { identifier = "cp39-musllinux_armv7l", version = "3.9", path_str = "/opt/python/cp39-cp39" }, + { identifier = "cp310-musllinux_armv7l", version = "3.10", path_str = "/opt/python/cp310-cp310" }, + { identifier = "cp311-musllinux_armv7l", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-musllinux_armv7l", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-musllinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, ] [macos] diff --git a/cibuildwheel/resources/cibuildwheel.schema.json b/cibuildwheel/resources/cibuildwheel.schema.json index 976751a55..8e2508bc9 100644 --- a/cibuildwheel/resources/cibuildwheel.schema.json +++ b/cibuildwheel/resources/cibuildwheel.schema.json @@ -312,6 +312,11 @@ "description": "Specify alternative manylinux / musllinux container images", "title": "CIBW_MUSLLINUX_AARCH64_IMAGE" }, + "musllinux-armv7l-image": { + "type": "string", + "description": "Specify alternative manylinux / musllinux container images", + "title": "CIBW_MUSLLINUX_ARMV7L_IMAGE" + }, "musllinux-i686-image": { "type": "string", "description": "Specify alternative manylinux / musllinux container images", @@ -542,6 +547,9 @@ "musllinux-aarch64-image": { "$ref": "#/properties/musllinux-aarch64-image" }, + "musllinux-armv7l-image": { + "$ref": "#/properties/musllinux-armv7l-image" + }, "musllinux-i686-image": { "$ref": "#/properties/musllinux-i686-image" }, @@ -630,6 +638,9 @@ "musllinux-aarch64-image": { "$ref": "#/properties/musllinux-aarch64-image" }, + "musllinux-armv7l-image": { + "$ref": "#/properties/musllinux-armv7l-image" + }, "musllinux-i686-image": { "$ref": "#/properties/musllinux-i686-image" }, diff --git a/cibuildwheel/resources/defaults.toml b/cibuildwheel/resources/defaults.toml index 984af48ea..21bac7a0c 100644 --- a/cibuildwheel/resources/defaults.toml +++ b/cibuildwheel/resources/defaults.toml @@ -37,6 +37,7 @@ musllinux-i686-image = "musllinux_1_2" musllinux-aarch64-image = "musllinux_1_2" musllinux-ppc64le-image = "musllinux_1_2" musllinux-s390x-image = "musllinux_1_2" +musllinux-armv7l-image = "musllinux_1_2" [tool.cibuildwheel.linux] diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 9a18d48d4..6a094a8ba 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -52,3 +52,6 @@ manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.28-3 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.28-3 +[armv7l] +musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.09.22-4 + diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index b9db4268b..bfbe50c7a 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -83,6 +83,7 @@ "aarch64", "ppc64le", "s390x", + "armv7l", ) DEFAULT_CIBW_CACHE_PATH: Final[Path] = user_cache_path(appname="cibuildwheel", appauthor="pypa") diff --git a/docs/options.md b/docs/options.md index 5cb238784..fa2fb7003 100644 --- a/docs/options.md +++ b/docs/options.md @@ -288,20 +288,20 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat
-| | macOS | Windows | Linux Intel | Linux Other | -|---------------|------------------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Python 3.6 | cp36-macosx_x86_64 | cp36-win_amd64
cp36-win32 | cp36-manylinux_x86_64
cp36-manylinux_i686
cp36-musllinux_x86_64
cp36-musllinux_i686 | cp36-manylinux_aarch64
cp36-manylinux_ppc64le
cp36-manylinux_s390x
cp36-musllinux_aarch64
cp36-musllinux_ppc64le
cp36-musllinux_s390x | -| Python 3.7 | cp37-macosx_x86_64 | cp37-win_amd64
cp37-win32 | cp37-manylinux_x86_64
cp37-manylinux_i686
cp37-musllinux_x86_64
cp37-musllinux_i686 | cp37-manylinux_aarch64
cp37-manylinux_ppc64le
cp37-manylinux_s390x
cp37-musllinux_aarch64
cp37-musllinux_ppc64le
cp37-musllinux_s390x | -| Python 3.8 | cp38-macosx_x86_64
cp38-macosx_universal2
cp38-macosx_arm64 | cp38-win_amd64
cp38-win32 | cp38-manylinux_x86_64
cp38-manylinux_i686
cp38-musllinux_x86_64
cp38-musllinux_i686 | cp38-manylinux_aarch64
cp38-manylinux_ppc64le
cp38-manylinux_s390x
cp38-musllinux_aarch64
cp38-musllinux_ppc64le
cp38-musllinux_s390x | -| Python 3.9 | cp39-macosx_x86_64
cp39-macosx_universal2
cp39-macosx_arm64 | cp39-win_amd64
cp39-win32
cp39-win_arm64 | cp39-manylinux_x86_64
cp39-manylinux_i686
cp39-musllinux_x86_64
cp39-musllinux_i686 | cp39-manylinux_aarch64
cp39-manylinux_ppc64le
cp39-manylinux_s390x
cp39-musllinux_aarch64
cp39-musllinux_ppc64le
cp39-musllinux_s390x | -| Python 3.10 | cp310-macosx_x86_64
cp310-macosx_universal2
cp310-macosx_arm64 | cp310-win_amd64
cp310-win32
cp310-win_arm64 | cp310-manylinux_x86_64
cp310-manylinux_i686
cp310-musllinux_x86_64
cp310-musllinux_i686 | cp310-manylinux_aarch64
cp310-manylinux_ppc64le
cp310-manylinux_s390x
cp310-musllinux_aarch64
cp310-musllinux_ppc64le
cp310-musllinux_s390x | -| Python 3.11 | cp311-macosx_x86_64
cp311-macosx_universal2
cp311-macosx_arm64 | cp311-win_amd64
cp311-win32
cp311-win_arm64 | cp311-manylinux_x86_64
cp311-manylinux_i686
cp311-musllinux_x86_64
cp311-musllinux_i686 | cp311-manylinux_aarch64
cp311-manylinux_ppc64le
cp311-manylinux_s390x
cp311-musllinux_aarch64
cp311-musllinux_ppc64le
cp311-musllinux_s390x | -| Python 3.12 | cp312-macosx_x86_64
cp312-macosx_universal2
cp312-macosx_arm64 | cp312-win_amd64
cp312-win32
cp312-win_arm64 | cp312-manylinux_x86_64
cp312-manylinux_i686
cp312-musllinux_x86_64
cp312-musllinux_i686 | cp312-manylinux_aarch64
cp312-manylinux_ppc64le
cp312-manylinux_s390x
cp312-musllinux_aarch64
cp312-musllinux_ppc64le
cp312-musllinux_s390x | -| Python 3.13 | cp313-macosx_x86_64
cp313-macosx_universal2
cp313-macosx_arm64 | cp313-win_amd64
cp313-win32
cp313-win_arm64 | cp313-manylinux_x86_64
cp313-manylinux_i686
cp313-musllinux_x86_64
cp313-musllinux_i686 | cp313-manylinux_aarch64
cp313-manylinux_ppc64le
cp313-manylinux_s390x
cp313-musllinux_aarch64
cp313-musllinux_ppc64le
cp313-musllinux_s390x | -| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64
pp37-manylinux_i686 | pp37-manylinux_aarch64 | -| PyPy3.8 v7.3 | pp38-macosx_x86_64
pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 | -| PyPy3.9 v7.3 | pp39-macosx_x86_64
pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64
pp39-manylinux_i686 | pp39-manylinux_aarch64 | -| PyPy3.10 v7.3 | pp310-macosx_x86_64
pp310-macosx_arm64 | pp310-win_amd64 | pp310-manylinux_x86_64
pp310-manylinux_i686 | pp310-manylinux_aarch64 | +| | macOS | Windows | Linux Intel | Linux Other | +|---------------|------------------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Python 3.6 | cp36-macosx_x86_64 | cp36-win_amd64
cp36-win32 | cp36-manylinux_x86_64
cp36-manylinux_i686
cp36-musllinux_x86_64
cp36-musllinux_i686 | cp36-manylinux_aarch64
cp36-manylinux_ppc64le
cp36-manylinux_s390x
cp36-musllinux_aarch64
cp36-musllinux_ppc64le
cp36-musllinux_s390x
cp36-musllinux_armv7l | +| Python 3.7 | cp37-macosx_x86_64 | cp37-win_amd64
cp37-win32 | cp37-manylinux_x86_64
cp37-manylinux_i686
cp37-musllinux_x86_64
cp37-musllinux_i686 | cp37-manylinux_aarch64
cp37-manylinux_ppc64le
cp37-manylinux_s390x
cp37-musllinux_aarch64
cp37-musllinux_ppc64le
cp37-musllinux_s390x
cp37-musllinux_armv7l | +| Python 3.8 | cp38-macosx_x86_64
cp38-macosx_universal2
cp38-macosx_arm64 | cp38-win_amd64
cp38-win32 | cp38-manylinux_x86_64
cp38-manylinux_i686
cp38-musllinux_x86_64
cp38-musllinux_i686 | cp38-manylinux_aarch64
cp38-manylinux_ppc64le
cp38-manylinux_s390x
cp38-musllinux_aarch64
cp38-musllinux_ppc64le
cp38-musllinux_s390x
cp38-musllinux_armv7l | +| Python 3.9 | cp39-macosx_x86_64
cp39-macosx_universal2
cp39-macosx_arm64 | cp39-win_amd64
cp39-win32
cp39-win_arm64 | cp39-manylinux_x86_64
cp39-manylinux_i686
cp39-musllinux_x86_64
cp39-musllinux_i686 | cp39-manylinux_aarch64
cp39-manylinux_ppc64le
cp39-manylinux_s390x
cp39-musllinux_aarch64
cp39-musllinux_ppc64le
cp39-musllinux_s390x
cp39-musllinux_armv7l | +| Python 3.10 | cp310-macosx_x86_64
cp310-macosx_universal2
cp310-macosx_arm64 | cp310-win_amd64
cp310-win32
cp310-win_arm64 | cp310-manylinux_x86_64
cp310-manylinux_i686
cp310-musllinux_x86_64
cp310-musllinux_i686 | cp310-manylinux_aarch64
cp310-manylinux_ppc64le
cp310-manylinux_s390x
cp310-musllinux_aarch64
cp310-musllinux_ppc64le
cp310-musllinux_s390x
cp310-musllinux_armv7l | +| Python 3.11 | cp311-macosx_x86_64
cp311-macosx_universal2
cp311-macosx_arm64 | cp311-win_amd64
cp311-win32
cp311-win_arm64 | cp311-manylinux_x86_64
cp311-manylinux_i686
cp311-musllinux_x86_64
cp311-musllinux_i686 | cp311-manylinux_aarch64
cp311-manylinux_ppc64le
cp311-manylinux_s390x
cp311-musllinux_aarch64
cp311-musllinux_ppc64le
cp311-musllinux_s390x
cp311-musllinux_armv7l | +| Python 3.12 | cp312-macosx_x86_64
cp312-macosx_universal2
cp312-macosx_arm64 | cp312-win_amd64
cp312-win32
cp312-win_arm64 | cp312-manylinux_x86_64
cp312-manylinux_i686
cp312-musllinux_x86_64
cp312-musllinux_i686 | cp312-manylinux_aarch64
cp312-manylinux_ppc64le
cp312-manylinux_s390x
cp312-musllinux_aarch64
cp312-musllinux_ppc64le
cp312-musllinux_s390x
cp312-musllinux_armv7l | +| Python 3.13 | cp313-macosx_x86_64
cp313-macosx_universal2
cp313-macosx_arm64 | cp313-win_amd64
cp313-win32
cp313-win_arm64 | cp313-manylinux_x86_64
cp313-manylinux_i686
cp313-musllinux_x86_64
cp313-musllinux_i686 | cp313-manylinux_aarch64
cp313-manylinux_ppc64le
cp313-manylinux_s390x
cp313-musllinux_aarch64
cp313-musllinux_ppc64le
cp313-musllinux_s390x
cp313-musllinux_armv7l | +| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64
pp37-manylinux_i686 | pp37-manylinux_aarch64 | +| PyPy3.8 v7.3 | pp38-macosx_x86_64
pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 | +| PyPy3.9 v7.3 | pp39-macosx_x86_64
pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64
pp39-manylinux_i686 | pp39-manylinux_aarch64 | +| PyPy3.10 v7.3 | pp310-macosx_x86_64
pp310-macosx_arm64 | pp310-win_amd64 | pp310-manylinux_x86_64
pp310-manylinux_i686 | pp310-manylinux_aarch64 | The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to cibuildwheel. The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details). @@ -475,7 +475,7 @@ machine, provided the cross-compiling tools are installed. Options: -- Linux: `x86_64` `i686` `aarch64` `ppc64le` `s390x` +- Linux: `x86_64` `i686` `aarch64` `ppc64le` `s390x` `armv7l` - macOS: `x86_64` `arm64` `universal2` - Windows: `AMD64` `x86` `ARM64` - Pyodide: `wasm32` @@ -1174,6 +1174,7 @@ The available options are (default value): - `CIBW_MUSLLINUX_AARCH64_IMAGE` ([`quay.io/pypa/musllinux_1_2_aarch64`](https://quay.io/pypa/musllinux_1_2_aarch64)) - `CIBW_MUSLLINUX_PPC64LE_IMAGE` ([`quay.io/pypa/musllinux_1_2_ppc64le`](https://quay.io/pypa/musllinux_1_2_ppc64le)) - `CIBW_MUSLLINUX_S390X_IMAGE` ([`quay.io/pypa/musllinux_1_2_s390x`](https://quay.io/pypa/musllinux_1_2_s390x)) +- `CIBW_MUSLLINUX_ARMV7L_IMAGE` ([`quay.io/pypa/musllinux_1_2_armv7l`](https://quay.io/pypa/musllinux_1_2_armv7l)) Set an alternative Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels. @@ -1599,7 +1600,7 @@ This option is not supported in the overrides section in `pyproject.toml`. ```yaml # Will avoid testing on emulated architectures - CIBW_TEST_SKIP: "*-*linux_{aarch64,ppc64le,s390x}" + CIBW_TEST_SKIP: "*-*linux_{aarch64,ppc64le,s390x,armv7l}" # Skip trying to test arm64 builds on Intel Macs CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" @@ -1610,7 +1611,7 @@ This option is not supported in the overrides section in `pyproject.toml`. ```toml [tool.cibuildwheel] # Will avoid testing on emulated architectures - test-skip = "*-*linux_{aarch64,ppc64le,s390x}" + test-skip = "*-*linux_{aarch64,ppc64le,s390x,armv7l}" # Skip trying to test arm64 builds on Intel Macs test-skip = "*-macosx_arm64 *-macosx_universal2:arm64" diff --git a/test/utils.py b/test/utils.py index 158527e81..f007069c2 100644 --- a/test/utils.py +++ b/test/utils.py @@ -170,7 +170,9 @@ def expected_wheels( machine_arch = "aarch64" if manylinux_versions is None: - if machine_arch == "x86_64": + if machine_arch == "armv7l": + manylinux_versions = [] + elif machine_arch == "x86_64": manylinux_versions = [ "manylinux_2_5", "manylinux1", diff --git a/unit_test/main_tests/main_platform_test.py b/unit_test/main_tests/main_platform_test.py index 5dca47d01..cdc2bebc6 100644 --- a/unit_test/main_tests/main_platform_test.py +++ b/unit_test/main_tests/main_platform_test.py @@ -179,6 +179,7 @@ def test_archs_platform_all(platform, intercepted_build_args, monkeypatch): Architecture.aarch64, Architecture.ppc64le, Architecture.s390x, + Architecture.armv7l, } elif platform == "windows": assert options.globals.architectures == { diff --git a/unit_test/oci_container_test.py b/unit_test/oci_container_test.py index 0f99618a6..f43a3641c 100644 --- a/unit_test/oci_container_test.py +++ b/unit_test/oci_container_test.py @@ -535,16 +535,33 @@ def test_disable_host_mount(tmp_path: Path, container_engine, config, should_hav container.call(["cat", host_mount_path], capture_output=True) -def test_local_image(container_engine): - local_image = f"cibw_test_{container_engine.name}_local:latest" +@pytest.mark.parametrize("platform", list(OCIPlatform)) +def test_local_image(container_engine, platform, tmp_path: Path): + if ( + detect_ci_provider() in {CIProvider.travis_ci} + and pm in {"s390x", "ppc64le"} + and platform != DEFAULT_OCI_PLATFORM + ): + pytest.skip("Skipping test because docker on this platform does not support QEMU") + if container_engine.name == "podman" and platform == OCIPlatform.ARMV7: + # both GHA & local macOS arm64 podman desktop are failing + pytest.xfail("podman fails with armv7l images") + + remote_image = "debian:12-slim" + platform_name = platform.value.replace("/", "_") + local_image = f"cibw_{container_engine.name}_{platform_name}_local:latest" + dockerfile = tmp_path / "Dockerfile" + dockerfile.write_text(f"FROM {remote_image}") subprocess.run( - [container_engine.name, "pull", f"--platform={DEFAULT_OCI_PLATFORM.value}", DEFAULT_IMAGE], + [container_engine.name, "pull", f"--platform={platform.value}", remote_image], check=True, ) - subprocess.run([container_engine.name, "image", "tag", DEFAULT_IMAGE, local_image], check=True) - with OCIContainer( - engine=container_engine, image=local_image, oci_platform=DEFAULT_OCI_PLATFORM - ): + subprocess.run( + [container_engine.name, "build", f"--platform={platform.value}", "-t", local_image, "."], + check=True, + cwd=tmp_path, + ) + with OCIContainer(engine=container_engine, image=local_image, oci_platform=platform): pass @@ -556,27 +573,32 @@ def test_multiarch_image(container_engine, platform): and platform != DEFAULT_OCI_PLATFORM ): pytest.skip("Skipping test because docker on this platform does not support QEMU") + if container_engine.name == "podman" and platform == OCIPlatform.ARMV7: + # both GHA & local macOS arm64 podman desktop are failing + pytest.xfail("podman fails with armv7l images") with OCIContainer( engine=container_engine, image="debian:12-slim", oci_platform=platform ) as container: output = container.call(["uname", "-m"], capture_output=True) - output_map = { - OCIPlatform.i386: "i686", - OCIPlatform.AMD64: "x86_64", - OCIPlatform.ARM64: "aarch64", - OCIPlatform.PPC64LE: "ppc64le", - OCIPlatform.S390X: "s390x", + output_map_kernel = { + OCIPlatform.i386: ("i686",), + OCIPlatform.AMD64: ("x86_64",), + OCIPlatform.ARMV7: ("armv7l", "armv8l"), + OCIPlatform.ARM64: ("aarch64",), + OCIPlatform.PPC64LE: ("ppc64le",), + OCIPlatform.S390X: ("s390x",), } - assert output_map[platform] == output.strip() + assert output.strip() in output_map_kernel[platform] output = container.call(["dpkg", "--print-architecture"], capture_output=True) - output_map = { + output_map_dpkg = { OCIPlatform.i386: "i386", OCIPlatform.AMD64: "amd64", + OCIPlatform.ARMV7: "armhf", OCIPlatform.ARM64: "arm64", OCIPlatform.PPC64LE: "ppc64el", OCIPlatform.S390X: "s390x", } - assert output_map[platform] == output.strip() + assert output_map_dpkg[platform] == output.strip() @pytest.mark.parametrize( From 895eae340a2488903e75e88d9d5bf6975d51b75f Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 00:22:22 -0400 Subject: [PATCH 09/20] [Bot] Update dependencies (#2025) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- cibuildwheel/resources/build-platforms.toml | 36 +++++++++--------- .../resources/constraints-pyodide312.txt | 4 +- .../resources/pinned_docker_images.cfg | 38 +++++++++---------- docs/working-examples.md | 8 ++-- 4 files changed, 43 insertions(+), 43 deletions(-) diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 0a27238ca..59e1d044c 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -129,15 +129,15 @@ python_configurations = [ { identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, - { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.6/python-3.12.6-macos11.pkg" }, - { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.6/python-3.12.6-macos11.pkg" }, - { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.6/python-3.12.6-macos11.pkg" }, - { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc2-macos11.pkg" }, - { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc2-macos11.pkg" }, - { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc2-macos11.pkg" }, - { identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc2-macos11.pkg" }, - { identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc2-macos11.pkg" }, - { identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc2-macos11.pkg" }, + { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, + { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, + { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, + { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, + { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, + { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, + { identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, + { identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, + { identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" }, { identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" }, @@ -161,18 +161,18 @@ python_configurations = [ { identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" }, { identifier = "cp311-win32", version = "3.11.9", arch = "32" }, { identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" }, - { identifier = "cp312-win32", version = "3.12.6", arch = "32" }, - { identifier = "cp312-win_amd64", version = "3.12.6", arch = "64" }, - { identifier = "cp313-win32", version = "3.13.0-rc2", arch = "32" }, - { identifier = "cp313t-win32", version = "3.13.0-rc2", arch = "32" }, - { identifier = "cp313-win_amd64", version = "3.13.0-rc2", arch = "64" }, - { identifier = "cp313t-win_amd64", version = "3.13.0-rc2", arch = "64" }, + { identifier = "cp312-win32", version = "3.12.7", arch = "32" }, + { identifier = "cp312-win_amd64", version = "3.12.7", arch = "64" }, + { identifier = "cp313-win32", version = "3.13.0-rc3", arch = "32" }, + { identifier = "cp313t-win32", version = "3.13.0-rc3", arch = "32" }, + { identifier = "cp313-win_amd64", version = "3.13.0-rc3", arch = "64" }, + { identifier = "cp313t-win_amd64", version = "3.13.0-rc3", arch = "64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, - { identifier = "cp312-win_arm64", version = "3.12.6", arch = "ARM64" }, - { identifier = "cp313-win_arm64", version = "3.13.0-rc2", arch = "ARM64" }, - { identifier = "cp313t-win_arm64", version = "3.13.0-rc2", arch = "ARM64" }, + { identifier = "cp312-win_arm64", version = "3.12.7", arch = "ARM64" }, + { identifier = "cp313-win_arm64", version = "3.13.0-rc3", arch = "ARM64" }, + { identifier = "cp313t-win_arm64", version = "3.13.0-rc3", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-pyodide312.txt b/cibuildwheel/resources/constraints-pyodide312.txt index 997a3c3d0..ca766e029 100644 --- a/cibuildwheel/resources/constraints-pyodide312.txt +++ b/cibuildwheel/resources/constraints-pyodide312.txt @@ -29,7 +29,7 @@ filelock==3.16.1 # via virtualenv h11==0.14.0 # via httpcore -httpcore==1.0.5 +httpcore==1.0.6 # via httpx httpx==0.27.2 # via unearth @@ -80,7 +80,7 @@ requests==2.32.3 # via pyodide-build resolvelib==1.0.1 # via pyodide-build -rich==13.8.1 +rich==13.9.1 # via # pyodide-build # pyodide-cli diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 6a094a8ba..91fe236f1 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,57 +1,57 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.28-3 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.09.28-3 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.09.28-3 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.01-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.01-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.10.01-1 [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.09.28-3 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.01-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.10.01-1 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.28-3 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.01-1 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.28-3 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.01-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.28-3 musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.28-3 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.09.28-3 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.10.01-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.28-3 musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.28-3 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.09.28-3 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.10.01-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.28-3 musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.28-3 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.28-3 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.28-3 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.01-1 [armv7l] -musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.09.22-4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.09.28-3 diff --git a/docs/working-examples.md b/docs/working-examples.md index ae92d302b..04399e544 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -96,12 +96,12 @@ title: Working examples | [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis | | [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 | | [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | -| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | | [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | +| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | | [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | -| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | | [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` | +| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | | [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. | | [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | | [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions | @@ -206,12 +206,12 @@ title: Working examples [power-grid-model]: https://github.com/PowerGridModel/power-grid-model [Python-WebRTC]: https://github.com/MarshalX/python-webrtc [pybase64]: https://github.com/mayeut/pybase64 -[fathon]: https://github.com/stfbnc/fathon [Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build +[fathon]: https://github.com/stfbnc/fathon [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example [Arbor]: https://github.com/arbor-sim/arbor -[polaroid]: https://github.com/daggy1234/polaroid [Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python +[polaroid]: https://github.com/daggy1234/polaroid [clang-format]: https://github.com/ssciwr/clang-format-wheel [etebase-py]: https://github.com/etesync/etebase-py [cf-units]: https://github.com/SciTools/cf-units From d625d18b91de85cefdba12b52e40ccf6adf56981 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Wed, 2 Oct 2024 00:22:31 -0400 Subject: [PATCH 10/20] ci: add 3.13 classifier (#2026) Signed-off-by: Henry Schreiner --- .github/workflows/test.yml | 3 ++- pyproject.toml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 54e950e80..629367433 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -38,7 +38,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-13, macos-14] - python_version: ['3.12'] + python_version: ['3.13'] include: - os: ubuntu-latest python_version: '3.8' @@ -49,6 +49,7 @@ jobs: name: Install Python ${{ matrix.python_version }} with: python-version: ${{ matrix.python_version }} + allow-prereleases: true - uses: astral-sh/setup-uv@v3 diff --git a/pyproject.toml b/pyproject.toml index 77a07fe90..def288a5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Build Tools", ] From ee7fa96f6d4c81347cbdab3e6afcedc882a03433 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Wed, 2 Oct 2024 00:22:40 -0400 Subject: [PATCH 11/20] chore: remove a couple of things pylint is unhappy about (#2027) Signed-off-by: Henry Schreiner --- cibuildwheel/__main__.py | 1 - cibuildwheel/options.py | 7 +++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index 6d97cdc67..973c48a86 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -271,7 +271,6 @@ def get_python_configurations( def build(self, options: Options, tmp_path: Path) -> None: ... -# pylint: disable-next=inconsistent-return-statements def get_platform_module(platform: PlatformName) -> PlatformModule: if platform == "linux": return cibuildwheel.linux diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py index 66da2ad49..5e1e71d16 100644 --- a/cibuildwheel/options.py +++ b/cibuildwheel/options.py @@ -307,7 +307,6 @@ def _resolve_cascade( return result -# pylint: disable-next=inconsistent-return-statements def _apply_inherit_rule( before: str | None, after: str, rule: InheritRule, option_format: OptionFormat | None ) -> str: @@ -329,10 +328,10 @@ def _apply_inherit_rule( if rule == InheritRule.APPEND: return option_format.merge_values(before, after) - elif rule == InheritRule.PREPEND: + if rule == InheritRule.PREPEND: return option_format.merge_values(after, before) - else: - assert_never(rule) + + assert_never(rule) def _stringify_setting( From ec591cdf473735b21f20a533f57ef1ce352bfa9a Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Wed, 2 Oct 2024 13:29:22 +0100 Subject: [PATCH 12/20] Add note about the planned change of the manylinux default (#1992) * Add note about the planned change of the manylinux default * Update docs/options.md Co-authored-by: Henry Schreiner * Change date to 6th May Co-authored-by: Matthieu Darbois * no manylinux_2_28 pypy_i686 image * no manylinux_2_28 i686 image * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Henry Schreiner Co-authored-by: Matthieu Darbois Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/extra.css | 10 ++++++++++ docs/options.md | 45 +++++++++++++++++++++++++-------------------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/docs/extra.css b/docs/extra.css index 403a4ffdd..9cd1c17f4 100644 --- a/docs/extra.css +++ b/docs/extra.css @@ -258,6 +258,16 @@ h1, h2, h3, h4, h5, h6 { font-size: 80%; } +.rst-content table.docutils td code, +.rst-content table.docutils th code, +.rst-content table.field-list td code, +.rst-content table.field-list th code, +.wy-table td code, +.wy-table th code { + /* table elements are already made smaller, the code styling on top of that makes the text too small */ + font-size: 82.5%; +} + /* expand all the toctree entries */ .wy-menu-vertical .toctree-l1.current .toctree-l2>ul, diff --git a/docs/options.md b/docs/options.md index fa2fb7003..a5947111a 100644 --- a/docs/options.md +++ b/docs/options.md @@ -1157,26 +1157,31 @@ Platform-specific environment variables are also available:
### `CIBW_MANYLINUX_*_IMAGE`, `CIBW_MUSLLINUX_*_IMAGE` {: #linux-image} -> Specify alternative manylinux / musllinux container images - -The available options are (default value): - -- `CIBW_MANYLINUX_X86_64_IMAGE` ([`quay.io/pypa/manylinux2014_x86_64`](https://quay.io/pypa/manylinux2014_x86_64)) -- `CIBW_MANYLINUX_I686_IMAGE` ([`quay.io/pypa/manylinux2014_i686`](https://quay.io/pypa/manylinux2014_i686)) -- `CIBW_MANYLINUX_PYPY_X86_64_IMAGE` ([`quay.io/pypa/manylinux2014_x86_64`](https://quay.io/pypa/manylinux2014_x86_64)) -- `CIBW_MANYLINUX_AARCH64_IMAGE` ([`quay.io/pypa/manylinux2014_aarch64`](https://quay.io/pypa/manylinux2014_aarch64)) -- `CIBW_MANYLINUX_PPC64LE_IMAGE` ([`quay.io/pypa/manylinux2014_ppc64le`](https://quay.io/pypa/manylinux2014_ppc64le)) -- `CIBW_MANYLINUX_S390X_IMAGE` ([`quay.io/pypa/manylinux2014_s390x`](https://quay.io/pypa/manylinux2014_s390x)) -- `CIBW_MANYLINUX_PYPY_AARCH64_IMAGE` ([`quay.io/pypa/manylinux2014_aarch64`](https://quay.io/pypa/manylinux2014_aarch64)) -- `CIBW_MANYLINUX_PYPY_I686_IMAGE` ([`quay.io/pypa/manylinux2014_i686`](https://quay.io/pypa/manylinux2014_i686)) -- `CIBW_MUSLLINUX_X86_64_IMAGE` ([`quay.io/pypa/musllinux_1_2_x86_64`](https://quay.io/pypa/musllinux_1_2_x86_64)) -- `CIBW_MUSLLINUX_I686_IMAGE` ([`quay.io/pypa/musllinux_1_2_i686`](https://quay.io/pypa/musllinux_1_2_i686)) -- `CIBW_MUSLLINUX_AARCH64_IMAGE` ([`quay.io/pypa/musllinux_1_2_aarch64`](https://quay.io/pypa/musllinux_1_2_aarch64)) -- `CIBW_MUSLLINUX_PPC64LE_IMAGE` ([`quay.io/pypa/musllinux_1_2_ppc64le`](https://quay.io/pypa/musllinux_1_2_ppc64le)) -- `CIBW_MUSLLINUX_S390X_IMAGE` ([`quay.io/pypa/musllinux_1_2_s390x`](https://quay.io/pypa/musllinux_1_2_s390x)) -- `CIBW_MUSLLINUX_ARMV7L_IMAGE` ([`quay.io/pypa/musllinux_1_2_armv7l`](https://quay.io/pypa/musllinux_1_2_armv7l)) - -Set an alternative Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels. + +> Specify manylinux / musllinux container images + +The available options are: + +| Option | Default | Future default* | +|---|---|---| +| CIBW_MANYLINUX_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) +| CIBW_MANYLINUX_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | +| CIBW_MANYLINUX_PYPY_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) +| CIBW_MANYLINUX_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) +| CIBW_MANYLINUX_PPC64LE_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_ppc64le) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_ppc64le) +| CIBW_MANYLINUX_S390X_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_s390x) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_s390x) +| CIBW_MANYLINUX_PYPY_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) +| CIBW_MANYLINUX_PYPY_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | +| CIBW_MUSLLINUX_X86_64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_x86_64) | +| CIBW_MUSLLINUX_I686_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_i686) | +| CIBW_MUSLLINUX_AARCH64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_aarch64) | +| CIBW_MUSLLINUX_PPC64LE_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_ppc64le) | +| CIBW_MUSLLINUX_S390X_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_s390x) | +| CIBW_MUSLLINUX_ARMV7L_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_armv7l) | + +* The default is scheduled to change in a cibuildwheel release on or after 6th May 2025 - if you don't want the new default, you should set the value to `manylinux2014`. + +Set the Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels. For `CIBW_MANYLINUX_*_IMAGE`, the value of this option can either be set to `manylinux1`, `manylinux2010`, `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` to use a pinned version of the [official manylinux images](https://github.com/pypa/manylinux). Alternatively, set these options to any other valid Docker image name. For PyPy, the `manylinux1` image is not available. For architectures other than x86 (x86\_64 and i686) `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`. `manylinux_2_28` is not supported for `i686` architecture. From 2e8e511106b207a45ea1a4f0fe4c50422144400a Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:59:31 +0200 Subject: [PATCH 13/20] [Bot] Update dependencies (#2029) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- cibuildwheel/resources/constraints-python310.txt | 2 +- cibuildwheel/resources/constraints-python38.txt | 2 +- cibuildwheel/resources/constraints-python39.txt | 2 +- cibuildwheel/resources/pinned_docker_images.cfg | 14 +++++++------- docs/working-examples.md | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 0bd4e1ab6..4e77fefa2 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -24,7 +24,7 @@ platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.2.0 # via build -tomli==2.0.1 +tomli==2.0.2 # via build typing-extensions==4.12.2 # via delocate diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 0bd4e1ab6..4e77fefa2 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -24,7 +24,7 @@ platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.2.0 # via build -tomli==2.0.1 +tomli==2.0.2 # via build typing-extensions==4.12.2 # via delocate diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 0bd4e1ab6..4e77fefa2 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -24,7 +24,7 @@ platformdirs==4.3.6 # via virtualenv pyproject-hooks==1.2.0 # via build -tomli==2.0.1 +tomli==2.0.2 # via build typing-extensions==4.12.2 # via delocate diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 91fe236f1..411817912 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -30,22 +30,22 @@ manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.01-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.28-3 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.01-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.10.01-1 [ppc64le] manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.10.01-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.09.28-3 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.01-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.10.01-1 [s390x] manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.10.01-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.10.01-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.28-3 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.28-3 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.01-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.10.01-1 [pypy_aarch64] manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.01-1 @@ -53,5 +53,5 @@ manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.01-1 [armv7l] -musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.09.28-3 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.10.01-1 diff --git a/docs/working-examples.md b/docs/working-examples.md index 04399e544..aa3398de1 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -100,8 +100,8 @@ title: Working examples | [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | | [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | -| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` | | [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | +| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` | | [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. | | [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | | [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions | @@ -210,8 +210,8 @@ title: Working examples [fathon]: https://github.com/stfbnc/fathon [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example [Arbor]: https://github.com/arbor-sim/arbor -[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python [polaroid]: https://github.com/daggy1234/polaroid +[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python [clang-format]: https://github.com/ssciwr/clang-format-wheel [etebase-py]: https://github.com/etesync/etebase-py [cf-units]: https://github.com/SciTools/cf-units From d5c6a83aeb038f0a0c0e2a17630988119f345bcf Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Wed, 2 Oct 2024 14:52:36 -0400 Subject: [PATCH 14/20] ci: update job slightly (#2028) * ci: update job slightly * Ignore check-wheel-content W002 --------- Co-authored-by: mayeut --- .github/workflows/release.yml | 16 ++++------------ pyproject.toml | 3 +++ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b123df1e5..2a220607f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,16 +13,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Build SDist and wheel - run: pipx run build - - - uses: actions/upload-artifact@v4 - with: - name: cibw-sdist - path: dist/* - - - name: Check metadata - run: pipx run twine check dist/* + - uses: hynek/build-and-inspect-python-package@v2 publish: needs: [dist] @@ -38,9 +29,8 @@ jobs: steps: - uses: actions/download-artifact@v4 with: - pattern: cibw-* + name: Packages path: dist - merge-multiple: true - name: Generate artifact attestation for sdist and wheel uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3 @@ -48,3 +38,5 @@ jobs: subject-path: "dist/cibuildwheel-*" - uses: pypa/gh-action-pypi-publish@release/v1 + with: + attestations: true diff --git a/pyproject.toml b/pyproject.toml index def288a5e..9f8b9d4e3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -240,3 +240,6 @@ flake8-unused-arguments.ignore-variadic-names = true [tool.repo-review] ignore = ["PC170", "PP303"] + +[tool.check-wheel-contents] +ignore = ["W002"] # requirements-*.txt are allowed to be duplicates of one another From f1859528322d7b29d4493ee241a167807661dfb4 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Wed, 2 Oct 2024 22:51:53 +0100 Subject: [PATCH 15/20] Bump version: v2.21.2 --- README.md | 24 ++++++++++++------------ cibuildwheel/__init__.py | 2 +- docs/changelog.md | 11 +++++++++++ docs/faq.md | 6 +++--- docs/setup.md | 4 ++-- examples/appveyor-minimal.yml | 2 +- examples/azure-pipelines-minimal.yml | 6 +++--- examples/circleci-minimal.yml | 6 +++--- examples/cirrus-ci-intel-mac.yml | 2 +- examples/cirrus-ci-minimal.yml | 2 +- examples/github-deploy.yml | 2 +- examples/github-minimal.yml | 2 +- examples/github-with-qemu.yml | 2 +- examples/gitlab-minimal.yml | 6 +++--- examples/gitlab-with-qemu.yml | 2 +- examples/travis-ci-deploy.yml | 2 +- examples/travis-ci-minimal.yml | 2 +- examples/travis-ci-test-and-deploy.yml | 4 ++-- pyproject.toml | 2 +- 19 files changed, 50 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index a2f970fa1..8cdf8ff9d 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ jobs: - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.21.1 + run: python -m pip install cibuildwheel==2.21.2 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse @@ -211,6 +211,17 @@ Changelog +### v2.21.2 + +_2 October 2024_ + +- ✨ Adds support for building 32-bit armv7l wheels on musllinux. On a Linux system with emulation set up, set [CIBW_ARCHS](https://cibuildwheel.pypa.io/en/stable/options/#archs) to `armv7l` on Linux to try it out if you're interested! (#2017) +- 🐛 Fix Linux Podman builds on some systems (#2016) +- ✨ Adds official support for running on Python 3.13 (#2026) +- 🛠 Update CPython 3.13 to 3.13.0rc3 (#2029) + +Note: the default [manylinux image](https://cibuildwheel.pypa.io/en/stable/options/#linux-image) is **scheduled to change** from `manylinux2014` to `manylinux_2_28` in a cibuildwheel release on or after **6th May 2025** - you can set the value now to avoid getting upgraded if you want. (#1992) + ### v2.21.1 _16 September 2024_ @@ -257,17 +268,6 @@ _2 July 2024_ - 📚 Document the macOS ARM workaround for 3.8 on GHA. (#1871) - 📚 GitLab CI + macOS is now a supported platform with an example. (#1911) - -### v2.19.1 - -_13 June 2024_ - -- 🐛 Don't require setup-python on GHA for Pyodide (#1868) -- 🐛 Specify full python path for uv (fixes issue in 0.2.10 & 0.2.11) (#1881) -- 🛠 Update for pip 24.1b2 on CPython 3.13. (#1879) -- 🛠 Fix a warning in our schema generation script. (#1866) -- 🛠 Cleaner output on pytest 8-8.2. (#1865) - --- diff --git a/cibuildwheel/__init__.py b/cibuildwheel/__init__.py index 6062c1e48..a226e9bdf 100644 --- a/cibuildwheel/__init__.py +++ b/cibuildwheel/__init__.py @@ -1,3 +1,3 @@ from __future__ import annotations -__version__ = "2.21.1" +__version__ = "2.21.2" diff --git a/docs/changelog.md b/docs/changelog.md index b0f885b44..068d72cd7 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,17 @@ title: Changelog # Changelog +### v2.21.2 + +_2 October 2024_ + +- ✨ Adds support for building 32-bit armv7l wheels on musllinux. On a Linux system with emulation set up, set [CIBW_ARCHS](https://cibuildwheel.pypa.io/en/stable/options/#archs) to `armv7l` on Linux to try it out if you're interested! (#2017) +- 🐛 Fix Linux Podman builds on some systems (#2016) +- ✨ Adds official support for running on Python 3.13 (#2026) +- 🛠 Update CPython 3.13 to 3.13.0rc3 (#2029) + +Note: the default [manylinux image](https://cibuildwheel.pypa.io/en/stable/options/#linux-image) is **scheduled to change** from `manylinux2014` to `manylinux_2_28` in a cibuildwheel release on or after **6th May 2025** - you can set the value now to avoid getting upgraded if you want. (#1992) + ### v2.21.1 _16 September 2024_ diff --git a/docs/faq.md b/docs/faq.md index 4c402f475..89a9f6892 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -142,7 +142,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead If you use GitHub Actions for builds, you can use cibuildwheel as an action: ```yaml -uses: pypa/cibuildwheel@v2.21.1 +uses: pypa/cibuildwheel@v2.21.2 ``` This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal. @@ -164,7 +164,7 @@ The second option, and the only one that supports other CI systems, is using a ` ```bash # requirements-cibw.txt -cibuildwheel==2.21.1 +cibuildwheel==2.21.2 ``` Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this: @@ -328,7 +328,7 @@ Solutions to this vary, but the simplest is to use pipx: # most runners have pipx preinstalled, but in case you don't python3 -m pip install pipx -pipx run cibuildwheel==2.21.1 --output-dir wheelhouse +pipx run cibuildwheel==2.21.2 --output-dir wheelhouse pipx run twine upload wheelhouse/*.whl ``` diff --git a/docs/setup.md b/docs/setup.md index 0ff803726..e93296b2d 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -161,7 +161,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/checkout@v4 - name: Build wheels - run: pipx run cibuildwheel==2.21.1 + run: pipx run cibuildwheel==2.21.2 - uses: actions/upload-artifact@v4 with: @@ -198,7 +198,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.21.1 + run: python -m pip install cibuildwheel==2.21.2 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/appveyor-minimal.yml b/examples/appveyor-minimal.yml index 0e4ec74d6..d4afadaa3 100644 --- a/examples/appveyor-minimal.yml +++ b/examples/appveyor-minimal.yml @@ -9,7 +9,7 @@ environment: stack: python 3.12 -install: python -m pip install cibuildwheel==2.21.1 +install: python -m pip install cibuildwheel==2.21.2 build_script: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/azure-pipelines-minimal.yml b/examples/azure-pipelines-minimal.yml index 3f170b0f4..2cb14f755 100644 --- a/examples/azure-pipelines-minimal.yml +++ b/examples/azure-pipelines-minimal.yml @@ -6,7 +6,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - pip3 install cibuildwheel==2.21.1 + pip3 install cibuildwheel==2.21.2 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -20,7 +20,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - python3 -m pip install cibuildwheel==2.21.1 + python3 -m pip install cibuildwheel==2.21.2 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -34,7 +34,7 @@ jobs: - bash: | set -o errexit python -m pip install --upgrade pip - pip install cibuildwheel==2.21.1 + pip install cibuildwheel==2.21.2 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels diff --git a/examples/circleci-minimal.yml b/examples/circleci-minimal.yml index c30b18189..3b3f45973 100644 --- a/examples/circleci-minimal.yml +++ b/examples/circleci-minimal.yml @@ -11,7 +11,7 @@ jobs: - run: name: Build the Linux wheels. command: | - python3 -m pip install --user cibuildwheel==2.21.1 + python3 -m pip install --user cibuildwheel==2.21.2 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -28,7 +28,7 @@ jobs: - run: name: Build the Linux aarch64 wheels. command: | - python3 -m pip install --user cibuildwheel==2.21.1 + python3 -m pip install --user cibuildwheel==2.21.2 python3 -m cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -44,7 +44,7 @@ jobs: name: Build the OS X wheels. command: | sudo softwareupdate --install-rosetta --agree-to-license # for python<=3.8 or x86_64/universal2 tests - pip3 install cibuildwheel==2.21.1 + pip3 install cibuildwheel==2.21.2 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ diff --git a/examples/cirrus-ci-intel-mac.yml b/examples/cirrus-ci-intel-mac.yml index d1ffcb78f..c5f82e6b3 100644 --- a/examples/cirrus-ci-intel-mac.yml +++ b/examples/cirrus-ci-intel-mac.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.21.1 + - python -m pip install cibuildwheel==2.21.2 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/cirrus-ci-minimal.yml b/examples/cirrus-ci-minimal.yml index dddbe065d..72f5bd90f 100644 --- a/examples/cirrus-ci-minimal.yml +++ b/examples/cirrus-ci-minimal.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.21.1 + - python -m pip install cibuildwheel==2.21.2 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml index ecea95a8e..ca3123612 100644 --- a/examples/github-deploy.yml +++ b/examples/github-deploy.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.21.1 + uses: pypa/cibuildwheel@v2.21.2 - uses: actions/upload-artifact@v4 with: diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml index c52115a31..fcec1d7b3 100644 --- a/examples/github-minimal.yml +++ b/examples/github-minimal.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.21.1 + uses: pypa/cibuildwheel@v2.21.2 # env: # CIBW_SOME_OPTION: value # ... diff --git a/examples/github-with-qemu.yml b/examples/github-with-qemu.yml index 78cf5c432..81af0f1d0 100644 --- a/examples/github-with-qemu.yml +++ b/examples/github-with-qemu.yml @@ -21,7 +21,7 @@ jobs: platforms: all - name: Build wheels - uses: pypa/cibuildwheel@v2.21.1 + uses: pypa/cibuildwheel@v2.21.2 env: # configure cibuildwheel to build native archs ('auto'), and some # emulated ones diff --git a/examples/gitlab-minimal.yml b/examples/gitlab-minimal.yml index 2cc46b1a4..de213dd37 100644 --- a/examples/gitlab-minimal.yml +++ b/examples/gitlab-minimal.yml @@ -12,7 +12,7 @@ linux: DOCKER_TLS_CERTDIR: "" script: - curl -sSL https://get.docker.com/ | sh - - python -m pip install cibuildwheel==2.21.1 + - python -m pip install cibuildwheel==2.21.2 - cibuildwheel --output-dir wheelhouse artifacts: paths: @@ -23,7 +23,7 @@ windows: before_script: - choco install python -y --version 3.12.4 - choco install git.install -y - - py -m pip install cibuildwheel==2.21.1 + - py -m pip install cibuildwheel==2.21.2 script: - py -m cibuildwheel --output-dir wheelhouse --platform windows artifacts: @@ -35,7 +35,7 @@ windows: macos: image: macos-14-xcode-15 before_script: - - python3 -m pip install cibuildwheel==2.21.1 + - python3 -m pip install cibuildwheel==2.21.2 script: - python3 -m cibuildwheel --output-dir wheelhouse artifacts: diff --git a/examples/gitlab-with-qemu.yml b/examples/gitlab-with-qemu.yml index 96eef80dc..13c9755f6 100644 --- a/examples/gitlab-with-qemu.yml +++ b/examples/gitlab-with-qemu.yml @@ -14,7 +14,7 @@ linux: - curl -sSL https://get.docker.com/ | sh # Warning: This is extremely slow, be careful with how many wheels you build - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - python -m pip install cibuildwheel==2.21.1 + - python -m pip install cibuildwheel==2.21.2 # Assuming your CI runner's default architecture is x86_64... - cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64 artifacts: diff --git a/examples/travis-ci-deploy.yml b/examples/travis-ci-deploy.yml index e60132481..48417475f 100644 --- a/examples/travis-ci-deploy.yml +++ b/examples/travis-ci-deploy.yml @@ -20,7 +20,7 @@ jobs: - ln -s /c/Python312/python.exe /c/Python312/python3.exe install: - - python3 -m pip install cibuildwheel==2.21.1 + - python3 -m pip install cibuildwheel==2.21.2 script: # build the wheels, put them into './dist' diff --git a/examples/travis-ci-minimal.yml b/examples/travis-ci-minimal.yml index ad93a1a89..2e7cf3c1d 100644 --- a/examples/travis-ci-minimal.yml +++ b/examples/travis-ci-minimal.yml @@ -26,7 +26,7 @@ jobs: - ln -s /c/Python312/python.exe /c/Python312/python3.exe install: - - python3 -m pip install cibuildwheel==2.21.1 + - python3 -m pip install cibuildwheel==2.21.2 script: # build the wheels, put them into './wheelhouse' diff --git a/examples/travis-ci-test-and-deploy.yml b/examples/travis-ci-test-and-deploy.yml index 8fb134440..86162b049 100644 --- a/examples/travis-ci-test-and-deploy.yml +++ b/examples/travis-ci-test-and-deploy.yml @@ -52,7 +52,7 @@ jobs: - stage: deploy name: Build and deploy Linux wheels services: docker - install: python3 -m pip install cibuildwheel==2.21.1 twine + install: python3 -m pip install cibuildwheel==2.21.2 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl # Deploy on windows @@ -60,7 +60,7 @@ jobs: name: Build and deploy Windows wheels os: windows language: shell - install: python3 -m pip install cibuildwheel==2.21.1 twine + install: python3 -m pip install cibuildwheel==2.21.2 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl diff --git a/pyproject.toml b/pyproject.toml index 9f8b9d4e3..4fd9ebacf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "cibuildwheel" -version = "2.21.1" +version = "2.21.2" description = "Build Python wheels on CI with minimal configuration." readme = "README.md" license = "BSD-2-Clause" From 006f1e6ec6781ec6d7879150958b6ca3915687da Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 18:25:09 -0400 Subject: [PATCH 16/20] [pre-commit.ci] pre-commit autoupdate (#2033) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.6.0 → v5.0.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.6.0...v5.0.0) - [github.com/astral-sh/ruff-pre-commit: v0.6.8 → v0.6.9](https://github.com/astral-sh/ruff-pre-commit/compare/v0.6.8...v0.6.9) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b535d33b1..225f7f144 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - id: check-case-conflict - id: check-merge-conflict @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.6.8 + rev: v0.6.9 hooks: - id: ruff args: ["--fix", "--show-fixes"] From 80ae9a50c95805c4e56ce825d64af367f703a192 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Tue, 8 Oct 2024 00:26:20 +0200 Subject: [PATCH 17/20] fix: do not subclass wheel.bdist_wheel command in ABI3 test (#2030) fix: do not subclass bdist_wheel command in ABI3 test With bdist_wheel becoming a first-class citizen command of setuptools, this trick might not work in the future. --- test/test_abi_variants.py | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/test/test_abi_variants.py b/test/test_abi_variants.py index a7879943d..a2dd43ac0 100644 --- a/test/test_abi_variants.py +++ b/test/test_abi_variants.py @@ -18,27 +18,16 @@ IS_CPYTHON = sys.implementation.name == "cpython" Py_GIL_DISABLED = sysconfig.get_config_var("Py_GIL_DISABLED") CAN_USE_ABI3 = IS_CPYTHON and not Py_GIL_DISABLED - cmdclass = {} + setup_options = {} extension_kwargs = {} if CAN_USE_ABI3 and sys.version_info[:2] >= (3, 10): - from wheel.bdist_wheel import bdist_wheel as _bdist_wheel - - class bdist_wheel_abi3(_bdist_wheel): - def finalize_options(self): - _bdist_wheel.finalize_options(self) - self.root_is_pure = False - - def get_tag(self): - python, abi, plat = _bdist_wheel.get_tag(self) - return python, "abi3", plat - - cmdclass["bdist_wheel"] = bdist_wheel_abi3 extension_kwargs["define_macros"] = [("Py_LIMITED_API", "0x030A0000")] extension_kwargs["py_limited_api"] = True + setup_options = {"bdist_wheel": {"py_limited_api": "cp310"}} """ ), setup_py_extension_args_add="**extension_kwargs", - setup_py_setup_args_add="cmdclass=cmdclass", + setup_py_setup_args_add="options=setup_options", ) limited_api_project.files["pyproject.toml"] = pyproject_toml @@ -65,7 +54,7 @@ def test_abi3(tmp_path): if utils.platform == "pyodide": # there's only 1 possible configuration for pyodide, the single_python_tag one expected_wheels = [ - w.replace(f"{single_python_tag}-{single_python_tag}", f"{single_python_tag}-abi3") + w.replace(f"{single_python_tag}-{single_python_tag}", "cp310-abi3") for w in expected_wheels ] else: From 0319c431dedc020ebffde8fdedf7a033c302bc19 Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:47:21 -0400 Subject: [PATCH 18/20] [Bot] Update dependencies (#2032) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- cibuildwheel/resources/build-platforms.toml | 24 ++++----- .../resources/constraints-pyodide312.txt | 4 +- .../resources/constraints-python310.txt | 2 +- .../resources/constraints-python311.txt | 2 +- .../resources/constraints-python312.txt | 2 +- .../resources/constraints-python313.txt | 2 +- .../resources/constraints-python38.txt | 2 +- .../resources/constraints-python39.txt | 2 +- cibuildwheel/resources/constraints.txt | 2 +- cibuildwheel/resources/nodejs.toml | 2 +- .../resources/pinned_docker_images.cfg | 50 +++++++++---------- docs/working-examples.md | 12 ++--- 12 files changed, 53 insertions(+), 53 deletions(-) diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 59e1d044c..f7327dd14 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -132,12 +132,12 @@ python_configurations = [ { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, - { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, - { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, - { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, - { identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, - { identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, - { identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0rc3-macos11.pkg" }, + { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, + { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, + { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, + { identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, + { identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, + { identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" }, { identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" }, @@ -163,16 +163,16 @@ python_configurations = [ { identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" }, { identifier = "cp312-win32", version = "3.12.7", arch = "32" }, { identifier = "cp312-win_amd64", version = "3.12.7", arch = "64" }, - { identifier = "cp313-win32", version = "3.13.0-rc3", arch = "32" }, - { identifier = "cp313t-win32", version = "3.13.0-rc3", arch = "32" }, - { identifier = "cp313-win_amd64", version = "3.13.0-rc3", arch = "64" }, - { identifier = "cp313t-win_amd64", version = "3.13.0-rc3", arch = "64" }, + { identifier = "cp313-win32", version = "3.13.0", arch = "32" }, + { identifier = "cp313t-win32", version = "3.13.0", arch = "32" }, + { identifier = "cp313-win_amd64", version = "3.13.0", arch = "64" }, + { identifier = "cp313t-win_amd64", version = "3.13.0", arch = "64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, { identifier = "cp312-win_arm64", version = "3.12.7", arch = "ARM64" }, - { identifier = "cp313-win_arm64", version = "3.13.0-rc3", arch = "ARM64" }, - { identifier = "cp313t-win_arm64", version = "3.13.0-rc3", arch = "ARM64" }, + { identifier = "cp313-win_arm64", version = "3.13.0", arch = "ARM64" }, + { identifier = "cp313t-win_arm64", version = "3.13.0", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-pyodide312.txt b/cibuildwheel/resources/constraints-pyodide312.txt index ca766e029..32a382d28 100644 --- a/cibuildwheel/resources/constraints-pyodide312.txt +++ b/cibuildwheel/resources/constraints-pyodide312.txt @@ -6,7 +6,7 @@ anyio==4.6.0 # via httpx auditwheel-emscripten==0.0.16 # via pyodide-build -build==1.2.2 +build==1.2.2.post1 # via # -r .nox/update_constraints/tmp/constraints-pyodide.in # pyodide-build @@ -80,7 +80,7 @@ requests==2.32.3 # via pyodide-build resolvelib==1.0.1 # via pyodide-build -rich==13.9.1 +rich==13.9.2 # via # pyodide-build # pyodide-cli diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 4e77fefa2..73e0e6d79 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -2,7 +2,7 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.2.2 +build==1.2.2.post1 # via -r cibuildwheel/resources/constraints.in delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index 4460e60cc..62c541550 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -2,7 +2,7 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.2.2 +build==1.2.2.post1 # via -r cibuildwheel/resources/constraints.in delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index 4460e60cc..62c541550 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -2,7 +2,7 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.2.2 +build==1.2.2.post1 # via -r cibuildwheel/resources/constraints.in delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt index 4460e60cc..62c541550 100644 --- a/cibuildwheel/resources/constraints-python313.txt +++ b/cibuildwheel/resources/constraints-python313.txt @@ -2,7 +2,7 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.2.2 +build==1.2.2.post1 # via -r cibuildwheel/resources/constraints.in delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 4e77fefa2..73e0e6d79 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -2,7 +2,7 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.2.2 +build==1.2.2.post1 # via -r cibuildwheel/resources/constraints.in delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 4e77fefa2..73e0e6d79 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -2,7 +2,7 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.2.2 +build==1.2.2.post1 # via -r cibuildwheel/resources/constraints.in delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 4460e60cc..62c541550 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -2,7 +2,7 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.2.2 +build==1.2.2.post1 # via -r cibuildwheel/resources/constraints.in delocate==0.12.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/nodejs.toml b/cibuildwheel/resources/nodejs.toml index e2ad94919..157d0c364 100644 --- a/cibuildwheel/resources/nodejs.toml +++ b/cibuildwheel/resources/nodejs.toml @@ -1,2 +1,2 @@ url = "https://nodejs.org/dist/" -v20 = "v20.17.0" +v20 = "v20.18.0" diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 411817912..cbd7c0c38 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,57 +1,57 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.01-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.01-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.10.01-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.07-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.07-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.10.07-1 [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.01-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.10.01-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.07-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.10.07-1 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.01-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.07-1 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.01-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.01-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.10.01-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.07-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.07-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.10.07-1 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.10.01-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.01-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.10.01-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.10.07-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.07-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.10.07-1 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.10.01-1 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.01-1 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.10.01-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.10.07-1 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.07-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.10.07-1 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.01-1 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.07-1 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.01-1 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.07-1 [armv7l] -musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.10.01-1 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.10.07-1 diff --git a/docs/working-examples.md b/docs/working-examples.md index aa3398de1..e91b10f7c 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -70,8 +70,8 @@ title: Working examples | [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. | | [Picologging][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A high-performance logging library for Python. | | [markupsafe][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Safely add untrusted strings to HTML/XML markup. | -| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS | | [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system | +| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS | | [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python | | [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub | | [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. | @@ -81,8 +81,8 @@ title: Working examples | [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. | | [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. | | [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing | -| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | | [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq | +| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | | [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 | | [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support | | [keyvi][] | ![github icon][] | ![linux icon][] ![apple icon][] | FST based key value index highly optimized for size and lookup performance, utilizes ccache action for improved runtime | @@ -100,8 +100,8 @@ title: Working examples | [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | | [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | -| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | | [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` | +| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | | [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. | | [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | | [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions | @@ -180,8 +180,8 @@ title: Working examples [time-machine]: https://github.com/adamchainz/time-machine [Picologging]: https://github.com/microsoft/picologging [markupsafe]: https://github.com/pallets/markupsafe -[Rtree]: https://github.com/Toblerity/rtree [pybind11 cmake_example]: https://github.com/pybind/cmake_example +[Rtree]: https://github.com/Toblerity/rtree [KDEpy]: https://github.com/tommyod/KDEpy [dd-trace-py]: https://github.com/DataDog/dd-trace-py [tgcalls]: https://github.com/MarshalX/tgcalls @@ -191,8 +191,8 @@ title: Working examples [abess]: https://github.com/abess-team/abess [sourmash]: https://github.com/sourmash-bio/sourmash [cyvcf2]: https://github.com/brentp/cyvcf2 -[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile [jq.py]: https://github.com/mwilliamson/jq.py +[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile [iminuit]: https://github.com/scikit-hep/iminuit [Tokenizer]: https://github.com/OpenNMT/Tokenizer [keyvi]: https://github.com/KeyviDev/keyvi @@ -210,8 +210,8 @@ title: Working examples [fathon]: https://github.com/stfbnc/fathon [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example [Arbor]: https://github.com/arbor-sim/arbor -[polaroid]: https://github.com/daggy1234/polaroid [Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python +[polaroid]: https://github.com/daggy1234/polaroid [clang-format]: https://github.com/ssciwr/clang-format-wheel [etebase-py]: https://github.com/etesync/etebase-py [cf-units]: https://github.com/SciTools/cf-units From 3d3159b37bcd2c183583b67136b5f5de757e8232 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Tue, 8 Oct 2024 10:26:58 -0400 Subject: [PATCH 19/20] docs: update for 3.13.0 final (#2035) Signed-off-by: Henry Schreiner --- README.md | 6 +++--- docs/cpp_standards.md | 5 ++--- docs/options.md | 12 +++++++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8cdf8ff9d..6c6bad6ec 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,10 @@ What does it do? ¹ PyPy is only supported for manylinux wheels.
² Windows arm64 support is experimental.
-³ CPython 3.13 is built by default using Python RCs, starting with cibuildwheel 2.20. Free-threaded mode will still require opt-in using [`CIBW_FREE_THREADED_SUPPORT`](https://cibuildwheel.pypa.io/en/stable/options/#free-threaded-support).
+³ Free-threaded mode requires opt-in using [`CIBW_FREE_THREADED_SUPPORT`](https://cibuildwheel.pypa.io/en/stable/options/#free-threaded-support).
⁴ Experimental, not yet supported on PyPI, but can be used directly in web deployment. Use `--platform pyodide` to build.
-- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy +- Builds manylinux, musllinux, macOS 10.9+ (10.13+ for Python 3.12+), and Windows wheels for CPython and PyPy - Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, GitLab CI, and Cirrus CI - Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate) - Runs your library's tests against the wheel-installed version of your library @@ -85,7 +85,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-13, macos-14] + os: [ubuntu-latest, windows-latest, macos-13, macos-latest] steps: - uses: actions/checkout@v4 diff --git a/docs/cpp_standards.md b/docs/cpp_standards.md index 93a548a09..ac820300a 100644 --- a/docs/cpp_standards.md +++ b/docs/cpp_standards.md @@ -8,7 +8,7 @@ Building Python wheels with modern C++ standards (C++11 and later) requires a fe ## manylinux1 and C++14 -The old `manylinux1` image (based on CentOS 5) contains a version of GCC and libstdc++ that only supports C++11 and earlier standards. There are however ways to compile wheels with the C++14 standard (and later): https://github.com/pypa/manylinux/issues/118 +The past end-of-life `manylinux1` image (based on CentOS 5) contains a version of GCC and libstdc++ that only supports C++11 and earlier standards. There are however ways to compile wheels with the C++14 standard (and later): https://github.com/pypa/manylinux/issues/118 `manylinux2010` and `manylinux2014` are newer and support all C++ standards (up to C++17). @@ -18,9 +18,8 @@ OS X/macOS allows you to specify a so-called "deployment target" version that wi However, to enable modern C++ standards, the deployment target needs to be set high enough (since older OS X/macOS versions did not have the necessary modern C++ standard library). -To get C++11 and C++14 support, `MACOSX_DEPLOYMENT_TARGET` needs to be set to (at least) `"10.9"`. By default, `cibuildwheel` already does this, building 64-bit-only wheels for macOS 10.9 and later. -To get C++17 support, Xcode 9.3+ is needed, requiring at least macOS 10.13 on the build machine. To use C++17 library features and link against the C++ runtime library, set `MACOSX_DEPLOYMENT_TARGET` to `"10.13"` or `"10.14"` (or higher) - macOS 10.13 offers partial C++17 support (e.g., the filesystem header is in experimental, offering `#include ` instead of `#include `); macOS 10.14 has full C++17 support. +To get C++17 support, Xcode 9.3+ is needed, requiring at least macOS 10.13 on the build machine. To use C++17 library features and link against the C++ runtime library, set `MACOSX_DEPLOYMENT_TARGET` to `"10.13"` or `"10.14"` (or higher) - macOS 10.13 offers partial C++17 support (e.g., the filesystem header is in experimental, offering `#include ` instead of `#include `); macOS 10.14 has full C++17 support. CPython 3.12+ require 10.13+ anyway. However, if only C++17 compiler and standard template library (STL) features are used (not needing a C++17 runtime) it might be possible to set `MACOSX_DEPLOYMENT_TARGET` to a lower value, such as `"10.9"`. To find out if this is the case, try compiling and running with a lower `MACOSX_DEPLOYMENT_TARGET`: if C++17 features are used that require a more recent deployment target, building the wheel should fail. diff --git a/docs/options.md b/docs/options.md index a5947111a..fc3b95e85 100644 --- a/docs/options.md +++ b/docs/options.md @@ -306,7 +306,17 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to cibuildwheel. The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details). -For CPython, the minimally supported macOS version is 10.9; for PyPy 3.7, macOS 10.13 or higher is required. +The lowest value you can set `MACOSX_DEPLOYMENT_TARGET` is as follows: + +| Arch | Python version range | Minimum target | +|-------|----------------------|----------------| +| Intel | CPython 3.6-3.11 | 10.9 | +| Intel | CPython 3.12+ | 10.13 | +| AS | CPython or PyPy | 11 | +| Intel | PyPy 3.7-3.8 | 10.13 | +| Intel | PyPy 3.9+ | 10.15 | + +If you set the value lower, cibuildwheel will cap it to the lowest supported value for each target as needed. Windows arm64 platform support is experimental. From 7940a4c0e76eb2030e473a5f864f291f63ee879b Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Wed, 9 Oct 2024 09:04:53 +0100 Subject: [PATCH 20/20] Bump version: v2.21.3 --- README.md | 23 ++++++++--------------- cibuildwheel/__init__.py | 2 +- docs/changelog.md | 7 +++++++ docs/faq.md | 6 +++--- docs/setup.md | 4 ++-- examples/appveyor-minimal.yml | 2 +- examples/azure-pipelines-minimal.yml | 6 +++--- examples/circleci-minimal.yml | 6 +++--- examples/cirrus-ci-intel-mac.yml | 2 +- examples/cirrus-ci-minimal.yml | 2 +- examples/github-deploy.yml | 2 +- examples/github-minimal.yml | 2 +- examples/github-with-qemu.yml | 2 +- examples/gitlab-minimal.yml | 6 +++--- examples/gitlab-with-qemu.yml | 2 +- examples/travis-ci-deploy.yml | 2 +- examples/travis-ci-minimal.yml | 2 +- examples/travis-ci-test-and-deploy.yml | 4 ++-- pyproject.toml | 2 +- 19 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 6c6bad6ec..68977ad01 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ jobs: - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.21.2 + run: python -m pip install cibuildwheel==2.21.3 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse @@ -211,6 +211,13 @@ Changelog +### v2.21.3 + +_9 October 2024_ + +- 🛠 Update CPython 3.13 to 3.13.0 final release (#2032) +- 📚 Docs updates and tidy ups (#2035) + ### v2.21.2 _2 October 2024_ @@ -254,20 +261,6 @@ _4 August 2024_ - 🛠 Undo cleaner output on pytest 8-8.2 now that 8.3 is out. (#1943) - 📚 Update examples to use Python 3.12 on host (cibuildwheel will require Python 3.11+ on the host machine starting in October 2024) (#1919) - -### v2.19.2 - -_2 July 2024_ - -- 🐛 Update manylinux2014 pins to versions that support past-EoL CentOS 7 mirrors. (#1917) -- 🐛 Support `--no-isolation` with `build[uv]` build-frontend. (#1889) -- 🛠 Provide attestations for releases at . (#1916) -- 🛠 Provide CPython 3.13.0b3. (#1913) -- 🛠 Remove some workarounds now that pip 21.1 is available. (#1891, #1892) -- 📚 Remove nosetest from our docs. (#1821) -- 📚 Document the macOS ARM workaround for 3.8 on GHA. (#1871) -- 📚 GitLab CI + macOS is now a supported platform with an example. (#1911) - --- diff --git a/cibuildwheel/__init__.py b/cibuildwheel/__init__.py index a226e9bdf..7fe330277 100644 --- a/cibuildwheel/__init__.py +++ b/cibuildwheel/__init__.py @@ -1,3 +1,3 @@ from __future__ import annotations -__version__ = "2.21.2" +__version__ = "2.21.3" diff --git a/docs/changelog.md b/docs/changelog.md index 068d72cd7..189cc7266 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,13 @@ title: Changelog # Changelog +### v2.21.3 + +_9 October 2024_ + +- 🛠 Update CPython 3.13 to 3.13.0 final release (#2032) +- 📚 Docs updates and tidy ups (#2035) + ### v2.21.2 _2 October 2024_ diff --git a/docs/faq.md b/docs/faq.md index 89a9f6892..230a6acb8 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -142,7 +142,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead If you use GitHub Actions for builds, you can use cibuildwheel as an action: ```yaml -uses: pypa/cibuildwheel@v2.21.2 +uses: pypa/cibuildwheel@v2.21.3 ``` This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal. @@ -164,7 +164,7 @@ The second option, and the only one that supports other CI systems, is using a ` ```bash # requirements-cibw.txt -cibuildwheel==2.21.2 +cibuildwheel==2.21.3 ``` Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this: @@ -328,7 +328,7 @@ Solutions to this vary, but the simplest is to use pipx: # most runners have pipx preinstalled, but in case you don't python3 -m pip install pipx -pipx run cibuildwheel==2.21.2 --output-dir wheelhouse +pipx run cibuildwheel==2.21.3 --output-dir wheelhouse pipx run twine upload wheelhouse/*.whl ``` diff --git a/docs/setup.md b/docs/setup.md index e93296b2d..32e0d01c5 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -161,7 +161,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/checkout@v4 - name: Build wheels - run: pipx run cibuildwheel==2.21.2 + run: pipx run cibuildwheel==2.21.3 - uses: actions/upload-artifact@v4 with: @@ -198,7 +198,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.21.2 + run: python -m pip install cibuildwheel==2.21.3 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/appveyor-minimal.yml b/examples/appveyor-minimal.yml index d4afadaa3..c68f9bc1e 100644 --- a/examples/appveyor-minimal.yml +++ b/examples/appveyor-minimal.yml @@ -9,7 +9,7 @@ environment: stack: python 3.12 -install: python -m pip install cibuildwheel==2.21.2 +install: python -m pip install cibuildwheel==2.21.3 build_script: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/azure-pipelines-minimal.yml b/examples/azure-pipelines-minimal.yml index 2cb14f755..2924dc95f 100644 --- a/examples/azure-pipelines-minimal.yml +++ b/examples/azure-pipelines-minimal.yml @@ -6,7 +6,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - pip3 install cibuildwheel==2.21.2 + pip3 install cibuildwheel==2.21.3 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -20,7 +20,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - python3 -m pip install cibuildwheel==2.21.2 + python3 -m pip install cibuildwheel==2.21.3 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -34,7 +34,7 @@ jobs: - bash: | set -o errexit python -m pip install --upgrade pip - pip install cibuildwheel==2.21.2 + pip install cibuildwheel==2.21.3 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels diff --git a/examples/circleci-minimal.yml b/examples/circleci-minimal.yml index 3b3f45973..ea8be74a4 100644 --- a/examples/circleci-minimal.yml +++ b/examples/circleci-minimal.yml @@ -11,7 +11,7 @@ jobs: - run: name: Build the Linux wheels. command: | - python3 -m pip install --user cibuildwheel==2.21.2 + python3 -m pip install --user cibuildwheel==2.21.3 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -28,7 +28,7 @@ jobs: - run: name: Build the Linux aarch64 wheels. command: | - python3 -m pip install --user cibuildwheel==2.21.2 + python3 -m pip install --user cibuildwheel==2.21.3 python3 -m cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -44,7 +44,7 @@ jobs: name: Build the OS X wheels. command: | sudo softwareupdate --install-rosetta --agree-to-license # for python<=3.8 or x86_64/universal2 tests - pip3 install cibuildwheel==2.21.2 + pip3 install cibuildwheel==2.21.3 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ diff --git a/examples/cirrus-ci-intel-mac.yml b/examples/cirrus-ci-intel-mac.yml index c5f82e6b3..9fd674da3 100644 --- a/examples/cirrus-ci-intel-mac.yml +++ b/examples/cirrus-ci-intel-mac.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.21.2 + - python -m pip install cibuildwheel==2.21.3 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/cirrus-ci-minimal.yml b/examples/cirrus-ci-minimal.yml index 72f5bd90f..0de74a928 100644 --- a/examples/cirrus-ci-minimal.yml +++ b/examples/cirrus-ci-minimal.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.21.2 + - python -m pip install cibuildwheel==2.21.3 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml index ca3123612..eb5d881c1 100644 --- a/examples/github-deploy.yml +++ b/examples/github-deploy.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.21.2 + uses: pypa/cibuildwheel@v2.21.3 - uses: actions/upload-artifact@v4 with: diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml index fcec1d7b3..a97bbb8e7 100644 --- a/examples/github-minimal.yml +++ b/examples/github-minimal.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.21.2 + uses: pypa/cibuildwheel@v2.21.3 # env: # CIBW_SOME_OPTION: value # ... diff --git a/examples/github-with-qemu.yml b/examples/github-with-qemu.yml index 81af0f1d0..b1a3a5fe5 100644 --- a/examples/github-with-qemu.yml +++ b/examples/github-with-qemu.yml @@ -21,7 +21,7 @@ jobs: platforms: all - name: Build wheels - uses: pypa/cibuildwheel@v2.21.2 + uses: pypa/cibuildwheel@v2.21.3 env: # configure cibuildwheel to build native archs ('auto'), and some # emulated ones diff --git a/examples/gitlab-minimal.yml b/examples/gitlab-minimal.yml index de213dd37..27e7b705e 100644 --- a/examples/gitlab-minimal.yml +++ b/examples/gitlab-minimal.yml @@ -12,7 +12,7 @@ linux: DOCKER_TLS_CERTDIR: "" script: - curl -sSL https://get.docker.com/ | sh - - python -m pip install cibuildwheel==2.21.2 + - python -m pip install cibuildwheel==2.21.3 - cibuildwheel --output-dir wheelhouse artifacts: paths: @@ -23,7 +23,7 @@ windows: before_script: - choco install python -y --version 3.12.4 - choco install git.install -y - - py -m pip install cibuildwheel==2.21.2 + - py -m pip install cibuildwheel==2.21.3 script: - py -m cibuildwheel --output-dir wheelhouse --platform windows artifacts: @@ -35,7 +35,7 @@ windows: macos: image: macos-14-xcode-15 before_script: - - python3 -m pip install cibuildwheel==2.21.2 + - python3 -m pip install cibuildwheel==2.21.3 script: - python3 -m cibuildwheel --output-dir wheelhouse artifacts: diff --git a/examples/gitlab-with-qemu.yml b/examples/gitlab-with-qemu.yml index 13c9755f6..512da4440 100644 --- a/examples/gitlab-with-qemu.yml +++ b/examples/gitlab-with-qemu.yml @@ -14,7 +14,7 @@ linux: - curl -sSL https://get.docker.com/ | sh # Warning: This is extremely slow, be careful with how many wheels you build - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - python -m pip install cibuildwheel==2.21.2 + - python -m pip install cibuildwheel==2.21.3 # Assuming your CI runner's default architecture is x86_64... - cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64 artifacts: diff --git a/examples/travis-ci-deploy.yml b/examples/travis-ci-deploy.yml index 48417475f..98b9e88e0 100644 --- a/examples/travis-ci-deploy.yml +++ b/examples/travis-ci-deploy.yml @@ -20,7 +20,7 @@ jobs: - ln -s /c/Python312/python.exe /c/Python312/python3.exe install: - - python3 -m pip install cibuildwheel==2.21.2 + - python3 -m pip install cibuildwheel==2.21.3 script: # build the wheels, put them into './dist' diff --git a/examples/travis-ci-minimal.yml b/examples/travis-ci-minimal.yml index 2e7cf3c1d..ab2b24aec 100644 --- a/examples/travis-ci-minimal.yml +++ b/examples/travis-ci-minimal.yml @@ -26,7 +26,7 @@ jobs: - ln -s /c/Python312/python.exe /c/Python312/python3.exe install: - - python3 -m pip install cibuildwheel==2.21.2 + - python3 -m pip install cibuildwheel==2.21.3 script: # build the wheels, put them into './wheelhouse' diff --git a/examples/travis-ci-test-and-deploy.yml b/examples/travis-ci-test-and-deploy.yml index 86162b049..82f0fee78 100644 --- a/examples/travis-ci-test-and-deploy.yml +++ b/examples/travis-ci-test-and-deploy.yml @@ -52,7 +52,7 @@ jobs: - stage: deploy name: Build and deploy Linux wheels services: docker - install: python3 -m pip install cibuildwheel==2.21.2 twine + install: python3 -m pip install cibuildwheel==2.21.3 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl # Deploy on windows @@ -60,7 +60,7 @@ jobs: name: Build and deploy Windows wheels os: windows language: shell - install: python3 -m pip install cibuildwheel==2.21.2 twine + install: python3 -m pip install cibuildwheel==2.21.3 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl diff --git a/pyproject.toml b/pyproject.toml index 4fd9ebacf..47c8464e6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "cibuildwheel" -version = "2.21.2" +version = "2.21.3" description = "Build Python wheels on CI with minimal configuration." readme = "README.md" license = "BSD-2-Clause"