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="[](https://gitlab.com/joerick/cibuildwheel/-/commits/{branch})",
),
- CIService(
- name="cirrus-ci",
- dst_config_path=".cirrus.yml",
- badge_md="[](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 @@
-
\ 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)