Skip to content

fix(ci): keep JupyterLite wasm build on JSPI-safe cp312 - #626

Merged
petercorke merged 4 commits into
mainfrom
fix/jupyterlite-pyodide-jspi-safari
Aug 22, 2026
Merged

fix(ci): keep JupyterLite wasm build on JSPI-safe cp312#626
petercorke merged 4 commits into
mainfrom
fix/jupyterlite-pyodide-jspi-safari

Conversation

@petercorke

Copy link
Copy Markdown
Owner

Summary

  • The cibuildwheel 3.4.1→4.1.1 bump silently moved the pyodide platform's default build target from cp312/Pyodide 0.27.7 to cp313/Pyodide 0.29.4, which broke docs-build's JupyterLite ("Try it Now") step once the v1.4.0 release actually exercised it.
  • Forces CIBW_BUILD: cp312-pyodide_wasm32 explicitly rather than adapting to the new default: Pyodide only gained cp313 support at 0.28.0a1, by which point WebAssembly JSPI ("stack switching") was already on by default (>=0.27.7) — and Safari has no JSPI support, Firefox only behind a flag. cp312/0.27.x is the newest JSPI-safe line, matching MVTB's and bdsim's existing jupyterlite-pyodide-kernel==0.6.1 pins.
  • Restores GitHub-Release-asset delivery for the wasm wheel (PyPI still rejects the old pyodide_* tag this cp312 build produces) and adds a matching fetch of spatialgeometry's own cp312 wasm wheel from its GitHub Release, since RTB 1.4.0 stopped vendoring a pure-Python copy of it.
  • Also fixes skip_existing:skip-existing: (deprecated alias) in release.yml while in the file.

Test plan

  • Verified via a real Pyodide 0.27.6 runtime (Node.js + pyodide npm package, not just a successful build) that spatialgeometry's cp312/old-tag wheel installs cleanly — matches the combination this fix relies on.
  • RTB's own cp312 wasm wheel doesn't exist yet (v1.4.0's actual release only built cp313 under the old unpinned default) — needs a real CI run to produce and verify.
  • Manual backfill of a cp312 wasm asset onto the existing v1.4.0 GitHub Release, so docs-build goes green without waiting for the next version bump (in progress).

🤖 Generated with Claude Code

petercorke and others added 4 commits August 23, 2026 08:56
…heel's new cp313 default

cibuildwheel's 3.4.1->4.1.1 bump silently moved the pyodide platform's
default build target from cp312/Pyodide 0.27.7 to cp313/Pyodide 0.29.4,
breaking docs-build once a real release exercised it. Adapting to the
new default (and its PyPI-accepted pyemscripten_* tag) was tried and
reverted same-day: Pyodide only gained cp313 support at 0.28.0a1, by
which point WebAssembly JSPI was already on by default, and Safari has
no JSPI support (Firefox only behind a flag) -- so cp312/0.27.x is the
newest JSPI-safe line, matching MVTB's and bdsim's existing pins.

Forces CIBW_BUILD: cp312-pyodide_wasm32 explicitly, restores the
GitHub-Release-asset delivery mechanism (PyPI still rejects the old
pyodide_* tag this produces), and fetches spatialgeometry's equivalent
cp312 wheel from its own GitHub Release too, since RTB 1.4.0 stopped
vendoring spatialgeometry as a pure-Python copy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…dide target

cibuildwheel 4.1.1 considers cp312/Pyodide 0.27.x "end of life" now that
cp313/0.29.x is its new default, and refuses to build it at all without
this explicit opt-in. Confirmed directly via a real workflow_dispatch
run: without this, the job fails immediately with "Invalid build
selector: 'cp312-pyodide_wasm32'. This selector matches a group that
wasn't enabled."

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The tag format pyodide-build emits (pyemscripten_* vs the old pyodide_*)
turns out to be a property of the pyodide-build tool version bundled
with cibuildwheel, not of which Pyodide version is targeted. Confirmed
directly: cibuildwheel 4.1.1 forced onto cp312/Pyodide 0.27.7 still
produces a pyemscripten_*-tagged wheel, which Pyodide 0.27.6's micropip
(like every pre-PEP-783 release) hard-rejects as an unrecognized tag --
there is no pyodide-version override that fixes this on 4.1.1.

cibuildwheel 3.4.1 predates the tag-format change and defaults to
cp312/0.27.7 unprompted, producing the old pyodide_* tag that
Pyodide 0.27.6 actually understands -- matches spatialgeometry's own
pyodide build (same cibuildwheel version, same underlying reason).
Drops the now-unnecessary CIBW_BUILD/CIBW_ENABLE overrides.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… 3.4.1 self-resolve

Confirmed via a real build failure: cibuildwheel 3.4.1's bundled
pyodide-build (0.33.0) rejects an explicit pyodide-version = "0.27.7"
override as "not compatible", even though 0.27.7 is that same tool's
own documented default for cp312. Matches spatialgeometry's own
pyproject.toml, which never overrides this either.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@codecov

codecov Bot commented Aug 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 0.00%. Comparing base (d46929c) to head (394d258).

Additional details and impacted files
@@          Coverage Diff          @@
##            main    #626   +/-   ##
=====================================
  Coverage   0.00%   0.00%           
=====================================
  Files        142     142           
  Lines      13938   13938           
=====================================
  Misses     13938   13938           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@petercorke
petercorke merged commit 7b5f921 into main Aug 22, 2026
52 of 53 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant