* Add an integration test with the meson backend
* Modify script to allow testing of the GHA action on a PR
* Try adding cython to languages in meson config
* Revert "Try adding cython to languages in meson config"
This reverts commit 50378a1c7e38665492ad0c683b178e4d96928e1e.
* Pass --vsenv to meson on windows
As seen here https://github.com/matplotlib/matplotlib/blob/9957c394bd01deb7a9bd9cb27804f447a52dc522/.github/workflows/cibuildwheel.yml#L114
* Disable win32 builds for the meson test
* Move the windows-specific config into the test project definition
This is so it can be tested with bin/run_example_ci_configs.py
* Add some docs to the FAQ about meson on windows
* Update bin/run_example_ci_configs.py
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
---------
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
test: replace badssl.com with google.com/generate_204 in SSL test
Switch to a more reliable HTTPS endpoint and add retry logic with
exponential backoff to reduce flaky test failures.
* Bump to Pyodide v0.29.2
* Bump the Pyodide constraints too
* Include new auditwheel-emscripten and pyodide-build release
* Bump pyodide-build in test to a newer version
Co-Authored-By: Gyeongjae Choi <def6488@gmail.com>
---------
Co-authored-by: Gyeongjae Choi <def6488@gmail.com>
* Make the {project} placeholder available to repair-wheel-command
* Add separate test for {project} placeholder in repair-wheel-command
* Make the {project} placeholder available to repair-wheel-command
* reduce duplicated work in tests
* Use a valid wheel filename for the post-repair name
---------
Co-authored-by: Joe Rickerby <joerick@mac.com>
pypa/manylinux now has a manylinux_2_35_armv7l image allowing for better C++20 support.
piwheels is still building for Debian Bullseye so keeping manylinux_2_31 as the default image.
* Don't constrain build-system.requires with dependency-versions
* Remove setting of VIRTUALENV_PIP (it doesn't appear to have any effect)
* Alter tests to assert the versions in before_build, not setup.py
* Skip the util-test on linux
---------
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
* Update Android test-command handling
* Update to Python 3.13.8
* Update documentation and tests
* Deal with `sysconfig.get_config_var("exec_prefix")` changing in Python 3.14, and add cross venv tests
* Allow test commands starting with `python3`
* test-command cleanups
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* Fix a few bugs in run_example_ci_config tooling
Github-deploy.yml had a fix to make it work out-of-the-box.
* Add flaky marker on test_ssl
(due to external internet access during the test, it does occasionally fail)
* Add Python 3.14 for Android
* Simplify GitHub Actions workflows
* Update tests
* Allow running `patchelf` even when the environment's `bin` directory is not on the PATH
* Search in both the environment's bin directory and the PATH
* Use `sysconfig.get_path`
* Fix lint warning
* ci: rework tests to break out ios/android tests
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Apply suggestions from code review
* ci: fix check for wheels
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Update .github/workflows/test.yml
* tests: pass via flag instead of envvar
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* tests: apply to serial/parallel
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* tests: join together marks
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* tests: join together marks
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* ci: break up azure job
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* ci: use matrix for azure pipelines
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Try installing Java on macos as well
* Revert "Try installing Java on macos as well"
This reverts commit aedf0f5106d2467938705b85180a0b249d49b99d.
* Try to get the most basic android test running first
* Rename platform to test_select, move headers in run_tests
Maybe it's a personal thing, but the header location was really making
me have to think more than I needed to look at that file!
* Only run docker unit tests on machines that are testing linux
* Update the flag name in azure-pipelines too
* Update azure-pipelines.yml
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Matthieu Darbois <mayeut@users.noreply.github.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
* Add Android to resource files
* Add Android to miscellaneous places
* Add Android documentation
* Docs cleanups
* Add Android platform module; implement top-level structure and target Python installation
* Implement setup_env and build_wheel
* lru-dict build working
* Alter prefix in sysconfigdata file; fix various issues with FLAGS variables
* Implement Android testing
* Add type annotations to _cross_venv
* Revert Python 3.8 to pip 25.0.1
* Make test-sources required on Android
* Add Android integration tests
* Test cleanups
* Add test of all available Python versions
* Update test-sources and test-command behavior to match iOS
* Documentation cleanups
* Replace Builder class with a set of global functions
* Rename "env" to "build_env"
* Remove Chaquopy repository from default pip command line
* Move native_platform to platforms module
* Fix parse_config_settings
Co-authored-by: Joe Rickerby <joerick@mac.com>
* Add unit tests for parse_config_settings and arch_synonym
* Make `shell_prepared` arguments keyword-only, and add tests for the commands that use it
* Replace `importlib.util.spec_from_file_location` with `runpy.run_path`
* Use python-build-standalone
* Update Android Python
* Enable KVM in Linux CI
* Move KVM code to test_android.py
* Use Java 17 on Azure
* Install emulator if necessary before running -accel-check
* Free up additional disk space on Linux runners
* Add sudo
* Skip emulator tests on CI platforms that don't support it
* Download Android Python from Maven Central
* Free up more disk space on Linux runners
* fix: minor fixups
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Set sysconfig._BASE_PREFIX to support sysconfig.get_path("include")
* Get ANDROID_API_LEVEL from the build environment, not cibuildwheel's own environment
* Correct relative path of test-sources
* Pass a CMake toolchain file to the build
* Add "repair" step which adds libc++ to the wheel when necessary
* Add missing needs_emulator decorator
* Provide useful error message if ANDROID_HOME is not set
* Remove use of HOST environment variable
* Update to Python 3.15.5
* Fix PyLint warnings, clarify comment
* Group common arguments into a dataclass
* Handle environment variables containing newlines
* Discourage the use of `pytest` test commands without `python -m`
* Use single quotes in user-visible messages
* Improve testing documentation
* Pass wheel filename to `log.build_end`
* In GitHub Actions example, skip Android tests on macOS
* Correct relative paths in `patchelf --set-rpath`
* Clarify `test-sources` docs
* Update to Python 3.13.5+20250722.214220
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
This is no longer experimental in 3.13 beta 3, so we don't need an enable for it anymore. Someone can skip expliclity with `'cp31?t-*'` if they really don't want free-threaded wheels.
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* 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>
* Added Python 3.14 preview for iOS
* Test all Python versions with iOS
* add cp314-ios to the build selector table
---------
Co-authored-by: Andrew Murray <radarhere@users.noreply.github.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
* feat: remove 32-bit linux from auto arch, fix auto32 on linux aarch64
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Apply suggestions from code review
Co-authored-by: Joe Rickerby <joerick@mac.com>
* Update cibuildwheel/architecture.py
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
* Add pyodide 0.28.0a3
* Add docs and tests for 0.28
This reverts commit 2e7d716a9ecfbdac159eed798ebf1b0170e6858d.
* fix: add selector for pyodide-prerelease, and add graalpy to schema
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
* feat: support multiple commands on iOS
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Move split_command into a util module
* (unrelated) fix test docstring
* Implement short-circuit behaviour on test-command
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
* Skip Cirrus CI iOS testing
* Remove support tick in readme
* Debugging cirrus windows failure
* Use a separate file to avoid error messages from vsdevcmd getting into the output
* cirrus: TEMP target just the test i care about
* Revert "cirrus: TEMP target just the test i care about"
This reverts commit 7ed4417970930ab9e0e1cb1f17497d406310d6ff.
* Remove debug code
* Fix windows issues with multiline -c Python commands
* Update dependencies
* tests: ignore tag order
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* tests: use sorted platform tags
Per PEP 425, compressed tag sets should be sorted.
This was fixed in auditwheel 6.4.0
* tests: use sorted platform tags
this shouldn't change that often, use static order to allow override.
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: mayeut <mayeut@users.noreply.github.com>
* Revert to running tests from from a temp dir when test-sources is unset
* Fix placeholders error message, add test for it
* Add back {project} placeholders to CIBW_TEST_COMMAND in tests & docs
* Update test/test_before_test.py
---------
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
* [travis-ci] debugging ci failures on travis
* [travis-ci] Use JSON to encode env vars
* [travis-ci] Use a more broadly compatible before_all command
* Drop CIBW_ENABLE=all on Travis windows
It doesn't fit into the time limit
* [travis-ci] try upgrading certifi to get around SSL errors
* Revert "[travis-ci] try upgrading certifi to get around SSL errors"
This reverts commit 02eee0e1946d2116d1ce23ccd86945ad33d1ae24.
* [travis-ci] upgrade windows certificates
* [travis-ci] re-enable linux builds
* Drop CIBW_ENABLE=all on Travis Linux
It doesn't fit into the time limit
---------
Co-authored-by: mayeut <mayeut@users.noreply.github.com>
* Fix a typo: pyoodide ➡️ pyodide
* Add `pyodide_build_version` attribute
* Add version to xbuildenv log step
* Add version to Emscripten log step
* Use `pyodide-build`'s version for updating constraints
* Bump Pyodide constraints by updating `pyodide-build`
* Add a schema for `pyodide-version`
* Update Pyodide constraints
* Bump `pyodide-build` to new 0.29.0
* Test out another Pyodide identifier
* Update outdated Pyodide constraints
* Add Pyodide version to temp directory name
* Remove Pyodide 0.26.1 from build configurations
* Retrieve + validate + install specific xbuildenvs
* Test wheel builds with Pyodide 0.26.2
* Add correct Pyodide version to identifier temp dir
* Don't pre-call Pyodide xbuildenv search
* Fetch just the stable Pyodide versions
* Refactor search + validation + install into one step
* Move all of it under a lock
* Reorder xbuildenv installation
* Add env and cwd to xbuildenv search call
* Temporarily lower to 0.26.2 target
* Separate out search, validate, install; again
* Run xbuildenv search in `CIBW_CACHE_PATH`
* Remove prior `PYODIDE_ROOT` env vars, copy envs
* Validate doesn't need to depend on searching
* Add file lock when searching xbuildenvs
* Test the original version: 0.26.1
* Update Pyodide constraints
* Update constraints for `pyodide-build` 0.29.0 again
* Bump Pyodide from version 0.26.1 ➡️ version 0.26.4
* Add note on compatibility for macOS + other archs
* Note Pyodide version for Pyodide identifier
* Docs about `CIBW_PYODIDE_VERSION`
* Don't fetch just the stable versions
* Discard a variable that's not used later
* Rename `search_xbuildenv` ➡️ `get_xbuildenv_versions`
* `validate_xbuildenv` ➡️ `validate_xbuildenv_version`
* Replace ordered comment, add newline
* Replace sentence on macOS support
Co-Authored-By: Hood Chatham <roberthoodchatham@gmail.com>
* Capitalise: "pyodide" ➡️ "Pyodide"
Co-Authored-By: Hood Chatham <roberthoodchatham@gmail.com>
* "work" ➡️ "may succeed"
Co-Authored-By: Hood Chatham <roberthoodchatham@gmail.com>
* Add another job to test a custom Pyodide version
* Handle "v"-prefixed + non-prefixed versions
* Convert to a proper toml-able option, and remove some hardcoded versions
This removes the enscripten and pyodide-build version specs from
pyproject.toml - pyodide-build is spec'd in the constraints file, and
the emscripten version can be read from the pyodide-build output.
* Add a schema entry
* Add docs for CIBW_PYODIDE_VERSION
* Rephrase
* Add tests for pyodide-version
* Apply suggestions from code review
* Add python_build_standalone util
* Hook up to python-build-standalone, removing dependency on host python
* Remove python hard-code in action.yml
* Add log step
* Add workaround for https://github.com/pyodide/pyodide-build/issues/143
* Add emscripten pytest test
* Remove unneeded checks
* Fix a pytest invoke for emscripten
* Generate pyodide-build constraints from the pinned pyodide version
* Remove pyodide python-build-standalone workaround
* Fixup paths from newer version of pyodide-build
* Fix/skip some failing tests
* Use `python -m pytest` on pyodide, even on Linux
* Docs fixes
* Don't call the github API at runtime, cache the release assets instead
* Ignore pylint false positive
* Add version auto-updating for pyodide
* Add support for pyodide 3.13.
* Fix tests for multiple pyodide wheels
* Remove workaround for unreleased pyodide-build
* Rename to "test_pyodide"
* Fix pathname confusion
* Remove extra github actions job
* Fix expectation for test_abi_none
* Fix the custom_repair_wheel test to actually have clashing names
* Fix pinned version test
* Document test-command limitation
* Remove pyodide 0.28.0a1 for now
* Update constraints files
* Docs/test fixes post removing pyodide cp313
* Fix ABI test expectation
* Docs improvements
* Improve some comments
* Remove logic duplication
* remove pyodide special casing
* Refactor constraints code to use a utility script, circumventing import issues
* chore: nicer nox env
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* fix: typo in variable name found by copilot
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Apply suggestions from code review
* Some more Pyodide version updates in the docs section
* We haven't released Pyodide v0.27.6 yet
* Back to the Github URL for cross-build-environments
* `pyodide-build`, not `emsdk` for Windows skips
Co-Authored-By: Hood Chatham <roberthoodchatham@gmail.com>
* Move to a separate `_json_request` function
Co-Authored-By: Hood Chatham <roberthoodchatham@gmail.com>
* Rename "retries" ➡️ "retry_count"
* Add some type hints
* Copy env vars before `UV_CUSTOM_COMPILE_COMMAND`
* Use `HTTPError.headers.get` instead
* Remove extra end quote
* Change download tests URL to `https://badssl.com/`
Co-Authored-By: Joe Rickerby <1244307+joerick@users.noreply.github.com>
* Download size changes, too
* Use jsdelivr for Github asset mirroring
* Bump to Pyodide v0.27.6
* Fix unit tests
* Move to pyodide v0.27.6 again
* Bump to pyodide-build 0.30.4
* Use new URL for cross-build environments metadata
Co-authored-by: Joe Rickerby <joerick@mac.com>
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Joe Rickerby <1244307+joerick@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* Add TEST_ENVIRONMENT option and set PYTHONSAFEPATH=1 in the test env
Closes https://github.com/pypa/cibuildwheel/issues/2358
* Add toml docs examples
* Add TOML examples
* Use double-quotes for windows
* Change to the iOS testing option semantics
Don't assume the presence of `python -m` in the test command. Less magic
and allows more option reuse between platforms.
* Update schema
* Add a test for this warning
* Don't try to execute a test-command when it doesn't look like a module
* Update docs/options.md
Co-authored-by: Malcolm Smith <smith@chaquo.com>
* Only allow invalid test command if the first part is 'pytest'
* Responses to code review from @freakboy3742
* Fixes post-merge
---------
Co-authored-by: Malcolm Smith <smith@chaquo.com>