From b4cad6b89fbb87f4c7d56574ef0355026d446573 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 23 Aug 2026 06:26:00 +0000 Subject: [PATCH 1/2] Fix Windows wheel build: double-quote the Cython version spec in before-build cibuildwheel runs before-build through the native shell, which on windows-2022 is cmd.exe. cmd.exe does not treat single quotes as a quoting character, so `pip install 'Cython>=3.1'` left the `>` exposed as cmd's output-redirection operator: the command ran as `pip install 'Cython` with stdout redirected to a file named `3.1'`, installing nothing and failing the whole build matrix (no fail-fast), which blocked every PyPI release. Double quotes are honored by both cmd.exe and bash/zsh, so quote the spec with those instead. Fixes #790 Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01TzUaDNbLSKGwTF8iWTMkPF --- pyproject.toml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e45684343..c6e47171d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -175,7 +175,16 @@ skip = ["*musllinux*"] # unknown directives instead of failing, so a lower version here would quietly # produce extensions that re-enable the GIL -- see the note in # `[build-system].requires`. -before-build = "pip install 'Cython>=3.1'" +# +# Double-quoted, not single-quoted: cibuildwheel runs `before-build` through +# the native shell, which on windows-2022 is cmd.exe. cmd.exe does not treat +# single quotes as a quoting character, so `'Cython>=3.1'` left the `>` +# exposed as its output-redirection operator -- the command ran as `pip +# install 'Cython` with stdout redirected to a file literally named `3.1'`, +# which fails with no Cython installed. cmd.exe does honor double quotes, and +# bash/zsh treat `"..."` as a quoted string too, so this is quoted correctly +# on every platform cibuildwheel builds on here. +before-build = 'pip install "Cython>=3.1"' manylinux-x86_64-image = "manylinux2014" manylinux-pypy_x86_64-image = "manylinux2014" From 3bb79eec39733f54c590a01dab80b5db5ad1308c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 23 Aug 2026 06:26:40 +0000 Subject: [PATCH 2/2] Drop windows-2022 from the release wheel-build matrix publish needs build_wheels, and a matrix job only succeeds if every leg does -- so a single broken Windows build blocks the release for every platform, not just Windows (this is what happened in #790). Remove windows-2022 from build_wheels' os list so releases can go out on the other platforms independent of Windows wheel status. --- .github/workflows/python-package.yml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 65f25175b..33b7e0f76 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -427,10 +427,17 @@ jobs: strategy: matrix: # Modern, supported runner images (ubuntu-20.04 was retired in 2025). - # macos-15-intel -> x86_64 wheels, macos-14 -> arm64 wheels, - # windows-2022 -> AMD64 wheels. Build config lives in - # pyproject.toml's [tool.cibuildwheel] (cp3*, auto64, Cython). - os: [ubuntu-latest, macos-15-intel, macos-14, windows-2022] + # macos-15-intel -> x86_64 wheels, macos-14 -> arm64 wheels. Build + # config lives in pyproject.toml's [tool.cibuildwheel] (cp3*, auto64, + # Cython). + # + # windows-2022 is deliberately not in this list: a failure on that leg + # fails the whole `build_wheels` job (matrix legs are ANDed together + # for job success, independent of fail-fast), and `publish` needs + # `build_wheels` -- so one broken Windows build blocks every + # platform's release, not just Windows' (see #790). Re-add it once + # Windows wheel builds have proven stable again. + os: [ubuntu-latest, macos-15-intel, macos-14] steps: - uses: actions/checkout@v4 with: