diff --git a/.cirrus.yml b/.cirrus.yml deleted file mode 100644 index f8e84294..00000000 --- a/.cirrus.yml +++ /dev/null @@ -1,91 +0,0 @@ -only_if: changesInclude('.cirrus.yml') || ($CIRRUS_BRANCH == "main" && !changesIncludeOnly('.github/*', 'bin/*', 'docs/*', '.circleci/*', '.travis.yml', '.pre-commit-config.yaml', '.readthedocs.yml', 'azure-pipelines.yml', 'README.md', 'mkdocs.yml', 'noxfile.py')) || $CIRRUS_BRANCH =~ 'cirrus.*' - -run_tests: &RUN_TESTS - install_cibuildwheel_script: - - python -m pip install -U pip - - python -m pip install -e. --group test - run_cibuildwheel_tests_script: - - python ./bin/run_tests.py - -linux_x86_task: - timeout_in: 120m - compute_engine_instance: - image_project: cirrus-images - image: family/docker-builder - platform: linux - cpu: 8 - memory: 8G - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - install_pre_requirements_script: - - docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all - - add-apt-repository -y ppa:deadsnakes/ppa - - apt-get update - - apt-get install -y python3.12-venv - - python3.12 -m venv ${VENV_ROOT} - <<: *RUN_TESTS - -linux_aarch64_task: - compute_engine_instance: - image_project: cirrus-images - image: family/docker-builder-arm64 - architecture: arm64 - platform: linux - cpu: 4 - memory: 4G - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - install_pre_requirements_script: - - docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all - - add-apt-repository -y ppa:deadsnakes/ppa - - apt-get update - - apt-get install -y python3.12-venv - - python3.12 -m venv ${VENV_ROOT} - <<: *RUN_TESTS - -windows_x86_task: - # The task takes ~55 minutes while the timeout happens after 60 minutes by default, - # let's allow some wiggle room. - timeout_in: 120m - windows_container: - image: cirrusci/windowsservercore:visualstudio2022 - cpu: 8 - memory: 8G - - install_pre_requirements_script: - - certutil -generateSSTFromWU roots.sst - - certutil -addstore -f root roots.sst - - del roots.sst - - choco install -y --no-progress python3 --version 3.12.4 - - refreshenv - - powershell -Command "$cleanPath = $env:PATH -replace ';+$', ''; Add-Content -Path $env:CIRRUS_ENV -Value ('PATH=' + $cleanPath)" - <<: *RUN_TESTS - -macos_arm64_task: - macos_instance: - image: ghcr.io/cirruslabs/macos-runner:sequoia - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - install_pre_requirements_script: - - brew install python@3.12 - - python3.12 -m venv ${VENV_ROOT} - <<: *RUN_TESTS - -macos_arm64_cp38_task: - macos_instance: - image: ghcr.io/cirruslabs/macos-runner:sequoia - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - PYTEST_ADDOPTS: --run-cp38-universal2 -k 'test_cp38_arm64_testing_universal2_installer or test_arch_auto or test_dummy_serial' - install_pre_requirements_script: - - brew install python@3.12 - - python3.12 -m venv ${VENV_ROOT} - - curl -fsSLO https://www.python.org/ftp/python/3.8.10/python-3.8.10-macos11.pkg - - sudo installer -pkg python-3.8.10-macos11.pkg -target / - - rm python-3.8.10-macos11.pkg - - sh "/Applications/Python 3.8/Install Certificates.command" - <<: *RUN_TESTS diff --git a/CI.md b/CI.md index b79b6405..5ff62c1f 100644 --- a/CI.md +++ b/CI.md @@ -1,9 +1,9 @@ This is a summary of the host Python versions and platforms covered by the different CI platforms: -| | 3.11 | 3.12 | 3.13 | 3.14 | -|---------|----------------------------------|---------------------------------|----------------|----------------| -| Linux | Azure Pipelines / GitHub Actions | CircleCI¹ / Cirrus CI / GitLab¹ | GitHub Actions | GitHub Actions | -| macOS | Azure Pipelines | CircleCI¹ / Cirrus CI / GitLab¹ | GitHub Actions | | -| Windows | Azure Pipelines | Cirrus CI / GitLab¹ | GitHub Actions | | +| | 3.11 | 3.12 | 3.13 | 3.14 | +|---------|----------------------------------|-----------------------|----------------|----------------| +| Linux | Azure Pipelines / GitHub Actions | CircleCI¹ / GitLab¹ | GitHub Actions | GitHub Actions | +| macOS | Azure Pipelines | CircleCI¹ / GitLab¹ | GitHub Actions | | +| Windows | Azure Pipelines | GitLab¹ | GitHub Actions | | > ¹ Runs a reduced set of tests to reduce CI load diff --git a/README.md b/README.md index 7dfbc066..3a66c630 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ While cibuildwheel itself requires a recent Python version to run (we support th **5** manylinux armv7l support is experimental. As there are no RHEL based image for this architecture, it's using an Ubuntu based image instead.
- Builds manylinux, musllinux, macOS, and Windows wheels for CPython, PyPy, and GraalPy -- Works on GitHub Actions, Azure Pipelines, CircleCI, GitLab CI, and Cirrus CI +- Works on GitHub Actions, Azure Pipelines, CircleCI, and GitLab CI - Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate) - Runs your library's tests against the wheel-installed version of your library @@ -62,7 +62,6 @@ Usage | Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅2 | ✅4 | ✅3 | ✅5 | | CircleCI | ✅ | ✅ | | ✅ | ✅ | | ✅45 | ✅35 | ✅5 | | GitLab CI | ✅ | ✅ | ✅ | ✅1 | ✅ | | ✅45 | ✅35 | ✅5 | -| Cirrus CI | ✅ | ✅ | ✅ | ✅ | ✅ | | ✅45 | | ✅5 | **1** [Requires emulation](https://cibuildwheel.pypa.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.
**2** [Uses cross-compilation](https://cibuildwheel.pypa.io/en/stable/faq/#windows-arm64). It is not possible to test `arm64` on this CI platform.
@@ -213,7 +212,6 @@ Here are some repos that use cibuildwheel. [circleci icon]: docs/data/readme_icons/circleci.svg [gitlab icon]: docs/data/readme_icons/gitlab.svg [travisci icon]: docs/data/readme_icons/travisci.svg -[cirrusci icon]: docs/data/readme_icons/cirrusci.svg [windows icon]: docs/data/readme_icons/windows.svg [apple icon]: docs/data/readme_icons/apple.svg [linux icon]: docs/data/readme_icons/linux.svg diff --git a/bin/projects.py b/bin/projects.py index 0cf57976..8caa7535 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -39,7 +39,6 @@ ICONS = ( "circleci", "gitlab", "travisci", - "cirrusci", "windows", "apple", "linux", diff --git a/bin/run_example_ci_configs.py b/bin/run_example_ci_configs.py index 22fb94e5..71bbd338 100755 --- a/bin/run_example_ci_configs.py +++ b/bin/run_example_ci_configs.py @@ -115,11 +115,6 @@ services = [ dst_config_path=".gitlab-ci.yml", badge_md="[![Gitlab](https://gitlab.com/joerick/cibuildwheel/badges/{branch}/pipeline.svg)](https://gitlab.com/joerick/cibuildwheel/-/commits/{branch})", ), - CIService( - name="cirrus-ci", - dst_config_path=".cirrus.yml", - badge_md="[![Cirrus CI](https://api.cirrus-ci.com/github/pypa/cibuildwheel.svg?branch={branch})](https://cirrus-ci.com/github/pypa/cibuildwheel/{branch})", - ), ] diff --git a/cibuildwheel/ci.py b/cibuildwheel/ci.py index ae111de3..648f29c2 100644 --- a/cibuildwheel/ci.py +++ b/cibuildwheel/ci.py @@ -14,7 +14,6 @@ class CIProvider(Enum): azure_pipelines = "azure_pipelines" github_actions = "github_actions" gitlab = "gitlab" - cirrus_ci = "cirrus_ci" # unofficial support appveyor = "appveyor" @@ -35,8 +34,6 @@ def detect_ci_provider() -> CIProvider | None: return CIProvider.github_actions elif "GITLAB_CI" in os.environ: return CIProvider.gitlab - elif "CIRRUS_CI" in os.environ: - return CIProvider.cirrus_ci elif strtobool(os.environ.get("CI", "false")): return CIProvider.other else: diff --git a/cibuildwheel/platforms/linux.py b/cibuildwheel/platforms/linux.py index 595835f4..d5d9366b 100644 --- a/cibuildwheel/platforms/linux.py +++ b/cibuildwheel/platforms/linux.py @@ -481,8 +481,7 @@ def build(options: Options, tmp_path: Path) -> None: Docker or Podman is required to run Linux builds. If you're building on Travis CI, add `services: [docker]` to your .travis.yml. If you're building on Circle CI in Linux, add a - `setup_remote_docker` step to your .circleci/config.yml. If - you're building on Cirrus CI, use `docker_builder` task. + `setup_remote_docker` step to your .circleci/config.yml. """ ) raise errors.ConfigurationError(msg) from error diff --git a/docs/ci-services.md b/docs/ci-services.md index d87af74c..864bba36 100644 --- a/docs/ci-services.md +++ b/docs/ci-services.md @@ -103,20 +103,6 @@ Commit this file, and push to Gitlab. The pipeline should start automatically. Gitlab will store the built wheels for you - you can access them from the Pipelines view. Check out the Gitlab [docs](https://docs.gitlab.com/ee/ci/yaml/) for more info on this config file. -### Cirrus CI [linux/mac/windows] {: #cirrus-ci} - -To build Linux, Mac, and Windows wheels on Cirrus CI, create a `.cirrus.yml` file in your repo, - -> .cirrus.yml - -```yaml -{% include "../examples/cirrus-ci-minimal.yml" %} -``` - -Commit this file, enable building of your repo on Cirrus CI, and push. - -Cirrus CI will store the built wheels for you - you can access them from the individual task view. Check out the Cirrus CI [docs](https://cirrus-ci.org/guide/writing-tasks/) for more info on this config file. - > ⚠️ Got an error? Check the [FAQ](faq.md). ### Other CI services @@ -125,6 +111,10 @@ Cirrus CI will store the built wheels for you - you can access them from the ind Appveyor official support was dropped in cibuildwheel v3.0, due to a lack of CI credits. However, it can probably still be used as-is. Check the Appveyor example from the cibuildwheel v2.0 branch: [appveyor-minimal.yml](https://github.com/pypa/cibuildwheel/blob/v2.23.3/examples/appveyor-minimal.yml). +### Cirrus CI [linux/mac/windows] {: #cirrus-ci} + +Due to Cirrus CI [end-of-life](https://cirruslabs.org) on June 1, 2026, we no longer officially support this service. + ## Next steps Once you've got the wheel building successfully, you might want to set up [testing](options.md#test-command) or [automatic releases to PyPI](deliver-to-pypi.md#automatic-method). diff --git a/docs/configuration.md b/docs/configuration.md index 0bdfd01b..c35c697f 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -53,16 +53,6 @@ cibuildwheel to run tests, add the following YAML to your CI config file: CIBW_TEST_COMMAND: "pytest {project}/tests" ``` -!!! tab "Cirrus CI" - - > .cirrus.yml ([docs](https://cirrus-ci.org/guide/writing-tasks/#environment-variables)) - - ```yaml - env: - CIBW_TEST_REQUIRES: pytest - CIBW_TEST_COMMAND: "pytest {project}/tests" - ``` - ## Configuration file {: #configuration-file} You can configure cibuildwheel with a config file, such as `pyproject.toml`. diff --git a/docs/data/projects.schema.json b/docs/data/projects.schema.json index 0d62dec3..9657127d 100644 --- a/docs/data/projects.schema.json +++ b/docs/data/projects.schema.json @@ -20,7 +20,6 @@ "travisci", "circleci", "gitlab", - "cirrusci", "azurepipelines" ] } diff --git a/docs/data/projects.yml b/docs/data/projects.yml index 530e9754..2eade095 100644 --- a/docs/data/projects.yml +++ b/docs/data/projects.yml @@ -4,7 +4,7 @@ # stars: GitHub repo (optional, if different from package, such as for Twisted) # pypi: The pypi name, if different from the GitHub package name # os: Operating system list, [windows, apple, linux, android, ios, pyodide] (optional) -# ci: [github, azurepipelines, circleci, gitlab, travisci, cirrusci] (optional) +# ci: [github, azurepipelines, circleci, gitlab, travisci] (optional) # notes: (text, optional) - name: abess @@ -401,7 +401,7 @@ - name: pillow-heif gh: bigcat88/pillow_heif pypi: pillow-heif - ci: [github, cirrusci] + ci: [github] os: [apple, linux, windows] notes: Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. diff --git a/docs/data/readme_icons/cirrusci.svg b/docs/data/readme_icons/cirrusci.svg deleted file mode 100644 index c92d3fe7..00000000 --- a/docs/data/readme_icons/cirrusci.svg +++ /dev/null @@ -1 +0,0 @@ -Cirrus CI icon \ No newline at end of file diff --git a/docs/extra.js b/docs/extra.js index c6013f53..b204c509 100644 --- a/docs/extra.js +++ b/docs/extra.js @@ -103,7 +103,6 @@ fragmentRedirect([ { source: 'setup/#appveyor', destination: 'ci-services/' }, { source: 'setup/#circleci', destination: 'ci-services/' }, { source: 'setup/#gitlab-ci', destination: 'ci-services/' }, - { source: 'setup/#cirrus-ci', destination: 'ci-services/' }, { source: 'faq/#linux-builds-in-containers', destination: 'platforms/#linux-containers' }, { source: 'faq/#apple-silicon', destination: 'platforms/#macos-architectures' }, diff --git a/docs/working-examples.md b/docs/working-examples.md index 2230820e..5df97f50 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -87,8 +87,8 @@ title: Working examples | [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing | | [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | | [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support | -| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | Jupyter-friendly Python interface for C++ MINUIT2 | -| [pillow-heif][] | ![github icon][] ![cirrusci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. | +| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 | +| [pillow-heif][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. | | [keyvi][] | ![github icon][] | ![linux icon][] ![apple icon][] | FST based key value index highly optimized for size and lookup performance, utilizes ccache action for improved runtime | | [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python | | [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 | @@ -235,7 +235,6 @@ title: Working examples [circleci icon]: data/readme_icons/circleci.svg [gitlab icon]: data/readme_icons/gitlab.svg [travisci icon]: data/readme_icons/travisci.svg -[cirrusci icon]: data/readme_icons/cirrusci.svg [windows icon]: data/readme_icons/windows.svg [apple icon]: data/readme_icons/apple.svg [linux icon]: data/readme_icons/linux.svg diff --git a/examples/cirrus-ci-intel-mac.yml b/examples/cirrus-ci-intel-mac.yml deleted file mode 100644 index d7631a58..00000000 --- a/examples/cirrus-ci-intel-mac.yml +++ /dev/null @@ -1,21 +0,0 @@ -build_and_store_wheels: &BUILD_AND_STORE_WHEELS - install_cibuildwheel_script: - - python -m pip install cibuildwheel==3.4.1 - run_cibuildwheel_script: - - cibuildwheel - wheels_artifacts: - path: "wheelhouse/*" - - -macos_task: - name: Build macOS x86_64 and arm64 wheels. - macos_instance: - image: ghcr.io/cirruslabs/macos-runner:sonoma - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - CIBW_ARCHS_MACOS: x86_64 arm64 - install_pre_requirements_script: - - brew install python@3.12 - - python3.12 -m venv ${VENV_ROOT} - <<: *BUILD_AND_STORE_WHEELS diff --git a/examples/cirrus-ci-minimal.yml b/examples/cirrus-ci-minimal.yml deleted file mode 100644 index 0a04e435..00000000 --- a/examples/cirrus-ci-minimal.yml +++ /dev/null @@ -1,74 +0,0 @@ -build_and_store_wheels: &BUILD_AND_STORE_WHEELS - install_cibuildwheel_script: - - python -m pip install cibuildwheel==3.4.1 - run_cibuildwheel_script: - - cibuildwheel - wheels_artifacts: - path: "wheelhouse/*" - - -linux_x86_task: - name: Build Linux x86 wheels. - compute_engine_instance: - image_project: cirrus-images - image: family/docker-builder - platform: linux - cpu: 4 - memory: 4G - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - install_pre_requirements_script: - - add-apt-repository -y ppa:deadsnakes/ppa - - apt-get update - - apt-get install -y python3.12-venv - - python3.12 -m venv ${VENV_ROOT} - <<: *BUILD_AND_STORE_WHEELS - -linux_aarch64_task: - name: Build Linux aarch64 wheels. - compute_engine_instance: - image_project: cirrus-images - image: family/docker-builder-arm64 - architecture: arm64 - platform: linux - cpu: 4 - memory: 4G - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - install_pre_requirements_script: - - add-apt-repository -y ppa:deadsnakes/ppa - - apt-get update - - apt-get install -y python3.12-venv - - python3.12 -m venv ${VENV_ROOT} - <<: *BUILD_AND_STORE_WHEELS - -windows_x86_task: - name: Build Windows x86 wheels. - windows_container: - image: cirrusci/windowsservercore:visualstudio2022 - cpu: 4 - memory: 4G - - install_pre_requirements_script: - - certutil -generateSSTFromWU roots.sst - - certutil -addstore -f root roots.sst - - del roots.sst - - choco install -y --no-progress python3 --version 3.12.4 - - refreshenv - - powershell -Command "$cleanPath = $env:PATH -replace ';+$', ''; Add-Content -Path $env:CIRRUS_ENV -Value ('PATH=' + $cleanPath)" - - <<: *BUILD_AND_STORE_WHEELS - -macos_arm64_task: - name: Build macOS arm64 wheels. - macos_instance: - image: ghcr.io/cirruslabs/macos-runner:sequoia - env: - VENV_ROOT: ${HOME}/venv-cibuildwheel - PATH: ${VENV_ROOT}/bin:${PATH} - install_pre_requirements_script: - - brew install python@3.12 - - python3.12 -m venv ${VENV_ROOT} - <<: *BUILD_AND_STORE_WHEELS diff --git a/test/test_android.py b/test/test_android.py index 64bbbad1..2d52cb76 100644 --- a/test/test_android.py +++ b/test/test_android.py @@ -42,11 +42,7 @@ if "ANDROID_HOME" not in os.environ: # Fail if we're on a CI service which is supposed to have the Android SDK # pre-installed; otherwise skip the module. - if ( - ("CIRRUS_CI" in os.environ and platform.system() == "Darwin") - or "GITHUB_ACTIONS" in os.environ - or "TF_BUILD" in os.environ - ): + if "GITHUB_ACTIONS" in os.environ or "TF_BUILD" in os.environ: pytest.fail(msg) else: pytest.skip(msg, allow_module_level=True) diff --git a/test/test_ios.py b/test/test_ios.py index 14e1e45c..b0739d58 100644 --- a/test/test_ios.py +++ b/test/test_ios.py @@ -7,8 +7,6 @@ from pathlib import Path import pytest -from cibuildwheel.ci import CIProvider, detect_ci_provider - from . import test_projects, utils pytestmark = pytest.mark.ios @@ -36,11 +34,6 @@ def skip_if_ios_testing_not_supported() -> None: pytest.skip("this test can only run on macOS") if utils.get_xcode_version() < (13, 0): pytest.skip("this test only works with Xcode 13.0 or greater") - if detect_ci_provider() == CIProvider.cirrus_ci: - pytest.skip( - "iOS testing not currently supported on Cirrus CI due to a failure " - "to start the simulator." - ) # iOS tests shouldn't be run in parallel, because they're dependent on calling diff --git a/test/utils.py b/test/utils.py index dc04640f..7bf3d184 100644 --- a/test/utils.py +++ b/test/utils.py @@ -35,7 +35,6 @@ include_graalpy_in_expected_wheels: bool = True _AARCH64_CAN_RUN_ARMV7: Final[bool] = Architecture.aarch64.value not in EMULATED_ARCHS and { None: Architecture.armv7l.value not in EMULATED_ARCHS, CIProvider.travis_ci: False, - CIProvider.cirrus_ci: False, }.get(detect_ci_provider(), True)