From 65f1d05a07230c5e941e8bd086ba4f4e255fe052 Mon Sep 17 00:00:00 2001 From: Revar Desmera Date: Thu, 27 Aug 2026 19:39:56 -0700 Subject: [PATCH 1/2] wheels: fetch bison from a mirror, not only ftp.gnu.org Both Linux wheel jobs failed the v0.51.3 release twice in a row with `curl: (7) Failed to connect to ftp.gnu.org port 443: Connection timed out`, on x86_64 and aarch64 alike. ftp.gnu.org is unreachable, and it was the sole source for the bison 3.8.2 tarball every Linux wheel needs (manylinux_2_28's AppStream only has 3.0.4; the grammar wants 3.8). Try ftpmirror.gnu.org (GNU's own redirector to a nearby mirror), then mirrors.kernel.org, then ftp.gnu.org last. Each gets --retry 3 --retry-all-errors and a 20s connect timeout so a slow mirror fails over instead of hanging. The folded `>-` scalar needs every line at one indent: a more-indented line keeps its newline instead of folding to a space, which would split a URL from its curl. Verified the parsed value contains zero newlines, and ran the resulting one-liner end to end (downloads and extracts). No version bump: 0.51.3 has not shipped, so this is part of it. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/wheels.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 3e4585f..1a1c043 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -85,9 +85,19 @@ jobs: # grammar requires %require "3.8". No newer bison package is # available via dnf on this base image, so build one from source # (fast: a few seconds) rather than switching manylinux images. + # Mirrors first, ftp.gnu.org last: ftp.gnu.org went unreachable + # (curl 7, connection timed out on 443) on both architectures for + # two consecutive runs of the v0.51.3 release, and it is a single + # point of failure for every Linux wheel we ship. + # ftpmirror.gnu.org is GNU's own redirector to a nearby mirror. + # Every line stays at THIS indent on purpose -- a more-indented + # line in a `>-` folded scalar keeps its newline instead of + # folding to a space, which would split a URL from its curl. CIBW_BEFORE_ALL_LINUX: >- dnf install -y flex && - curl -fsSL https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.gz -o /tmp/bison.tar.gz && + { curl -fsSL --retry 3 --retry-all-errors --connect-timeout 20 https://ftpmirror.gnu.org/bison/bison-3.8.2.tar.gz -o /tmp/bison.tar.gz || + curl -fsSL --retry 3 --retry-all-errors --connect-timeout 20 https://mirrors.kernel.org/gnu/bison/bison-3.8.2.tar.gz -o /tmp/bison.tar.gz || + curl -fsSL --retry 3 --retry-all-errors --connect-timeout 20 https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.gz -o /tmp/bison.tar.gz ; } && cd /tmp && tar xzf bison.tar.gz && cd bison-3.8.2 && ./configure --prefix=/usr/local && make -j$(nproc) && make install # Mirrors ci.yml's macOS step: the hosted runner image ships an From d42729ea419ce8458ffd8597d977128b64da0448 Mon Sep 17 00:00:00 2001 From: Revar Desmera Date: Thu, 27 Aug 2026 19:40:29 -0700 Subject: [PATCH 2/2] Sync uv.lock's pinned self-version (0.37.0 -> 0.51.3) CLAUDE.md requires uv.lock's own self-version to track pyproject.toml on every bump. It had drifted 14 releases behind, unnoticed because nothing reads it during a wheel build. Noticed when a `uv run` re-locked it. Co-Authored-By: Claude Opus 5 (1M context) --- uv.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uv.lock b/uv.lock index 71a7cfb..d068169 100644 --- a/uv.lock +++ b/uv.lock @@ -55,7 +55,7 @@ wheels = [ [[package]] name = "openscad-cpp-evaluator" -version = "0.37.0" +version = "0.51.3" source = { editable = "." } dependencies = [ { name = "numpy" },