feat: Pyodide 0.28 release (#2487)

* Bump testing version to 0.28.0

* Bump Pyodide constraints

* Add Pyodide 0.28.0 identifier

* Override to a different, alpha version for testing

* Update docs for Pyodide versions everywhere

* Add comment on using older Pyodide alpha version

* Bump to `"cp313*"` for compatibility

* Drop identifier for Pyodide 0.28.0a3

* Add back Pyodide 0.28.0a3 identifier

* Add helpful comment about pyodide-prerelease option

* Fix test and add a comment about it

* Keep one Pyodide version per Python version

* Fix docs for `pyodide-prerelease`; Python ➡️ Pyodide

* Update utils.py

* Drop CI test step for overridden Pyodide version

Suggested-by: Joe Rickerby <joerick@mac.com>

---------

Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
This commit is contained in:
Agriya Khetarpal
2025-07-12 18:38:50 -07:00
committed by GitHub
co-authored by Henry Schreiner
parent 5e245905b3
commit cd9b48cb74
7 changed files with 24 additions and 32 deletions
-13
View File
@@ -233,19 +233,6 @@ jobs:
env:
CIBW_PLATFORM: pyodide
- name: Run a sample build (GitHub Action) for an overridden Pyodide version
uses: ./
with:
package-dir: sample_proj
output-dir: wheelhouse
# In case this breaks at any point in time, switch to using the latest version
# available or any other version that is not the same as the default one set
# in cibuildwheel/resources/build-platforms.toml.
env:
CIBW_PLATFORM: pyodide
CIBW_BUILD: "cp312*"
CIBW_PYODIDE_VERSION: "0.27.6"
- name: Run tests with 'CIBW_PLATFORM' set to 'pyodide'
run: |
uv run --no-sync ./bin/run_tests.py
+11 -4
View File
@@ -99,10 +99,17 @@ class BuildSelector:
return False
if EnableGroup.GraalPy not in self.enable and fnmatch(build_id, "gp*"):
return False
if EnableGroup.PyodidePrerelease not in self.enable and fnmatch(
build_id, "cp313-pyodide_*"
):
return False
# TODO: Re-enable this when we have Pyodide prereleases again (e.g., 0.29.0a1+)
# Python 3.13 support became stable in Pyodide 0.28.0, so it no longer needs a prerelease
# flag.
# Also update Pyodide tests in unit_test/build_selector_test.py accordingly.
# When re-enabling, update the pattern to match the experimental Python version in case
# it is bumped to Python 3.14 (likely cp314-pyodide_* but could remain as 3.13 as well).
# This depends on the CPython version being used in the Pyodide runtime at the time.
# if EnableGroup.PyodidePrerelease not in self.enable and fnmatch(
# build_id, "cp313-pyodide_*"
# ):
# return False
should_build = selector_matches(self.build_config, build_id)
should_skip = selector_matches(self.skip_config, build_id)
+8 -8
View File
@@ -1288,22 +1288,22 @@ The available Pyodide versions are determined by the version of `pyodide-build`
```toml
[tool.cibuildwheel.pyodide]
# Build Pyodide wheels using Pyodide version 0.27.6
pyodide-version = "0.27.6"
# Build Pyodide wheels using Pyodide version 0.28.0
pyodide-version = "0.28.0"
[tool.cibuildwheel.pyodide]
# Build Pyodide wheels using a specific alpha release
pyodide-version = "0.28.0a2"
# Build Pyodide wheels using a specific, previously released alpha release of 0.28.0
pyodide-version = "0.28.0a3"
```
!!! tab examples "Environment variables"
```yaml
# Build Pyodide wheels using Pyodide version 0.27.6
CIBW_PYODIDE_VERSION: 0.27.6
# Build Pyodide wheels using Pyodide version 0.28.0
CIBW_PYODIDE_VERSION: 0.28.0
# Build Pyodide wheels using a specific alpha release
CIBW_PYODIDE_VERSION: 0.28.0a2
# Build Pyodide wheels using a specific, previously released alpha release of 0.28.0
CIBW_PYODIDE_VERSION: 0.28.0a3
```
+1 -1
View File
@@ -172,7 +172,7 @@ You must target pyodide with `--platform pyodide` (or use `--only` on the identi
It is also possible to target a specific Pyodide version by setting the [`pyodide-version`](options.md#pyodide-version) option to the desired version. Users are responsible for setting an appropriate Pyodide version according to the `pyodide-build` version. A list is available in Pyodide's [cross-build environments metadata file](https://github.com/pyodide/pyodide/blob/main/pyodide-cross-build-environments.json), which can be viewed more easily by installing `pyodide-build` from PyPI and using `pyodide xbuildenv search --all` to see a compatibility table.
If there are pre-releases available for a newer Python version, the `pyodide-prerelease` [`enable`](options.md#enable) can be used to include pre-release versions.
If there are pre-releases available for a newer Pyodide version, the `pyodide-prerelease` [`enable`](options.md#enable) can be used to include pre-release versions.
### Running tests
+1 -3
View File
@@ -261,9 +261,7 @@ def _expected_wheels(
musllinux_versions = ["musllinux_1_2"]
if platform == "pyodide" and python_abi_tags is None:
python_abi_tags = ["cp312-cp312"]
if EnableGroup.PyodidePrerelease in enable_groups:
python_abi_tags.append("cp313-cp313")
python_abi_tags = ["cp312-cp312", "cp313-cp313"]
elif platform == "ios" and python_abi_tags is None:
python_abi_tags = ["cp313-cp313"]
elif python_abi_tags is None:
+1 -1
View File
@@ -107,7 +107,7 @@ def test_build_filter_pyodide():
enable=frozenset(),
)
assert build_selector("cp312-pyodide_wasm32")
assert not build_selector("cp313-pyodide_wasm32")
assert build_selector("cp313-pyodide_wasm32")
def test_skip():
+2 -2
View File
@@ -35,7 +35,7 @@ manylinux-x86_64-image = "manylinux_2_28"
environment-pass = ["EXAMPLE_ENV"]
pyodide-version = "0.27.6"
pyodide-version = "0.28.0"
[tool.cibuildwheel.macos]
test-requires = "else"
@@ -92,7 +92,7 @@ def test_options_1(tmp_path, monkeypatch):
assert local.manylinux_images["x86_64"] == pinned_x86_64_container_image["manylinux_2_34"]
local = options.build_options("cp312-pyodide_wasm32")
assert local.pyodide_version == "0.27.6"
assert local.pyodide_version == "0.28.0"
def test_passthrough(tmp_path, monkeypatch):