Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4a2945fcc | ||
|
|
9913c03128 | ||
|
|
c0e28d3401 | ||
|
|
8c42e7980c | ||
|
|
01ecd4e011 | ||
|
|
33da1f7d14 |
@@ -50,7 +50,7 @@ jobs:
|
||||
with:
|
||||
python-version: ${{ matrix.python_version }}
|
||||
|
||||
- uses: yezz123/setup-uv@v4
|
||||
- uses: astral-sh/setup-uv@v3
|
||||
|
||||
# free some space to prevent reaching GHA disk space limits
|
||||
- name: Clean docker images
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
output-dir: wheelhouse_config_file
|
||||
config-file: sample_proj/cibw.toml
|
||||
|
||||
- name: Check Action artefacts
|
||||
- name: Check Action artifacts
|
||||
shell: bash
|
||||
run: |
|
||||
test $(find wheelhouse -name '*.whl' | wc -l) -ge 1
|
||||
|
||||
@@ -14,7 +14,7 @@ repos:
|
||||
- id: trailing-whitespace
|
||||
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: v0.6.4
|
||||
rev: v0.6.5
|
||||
hooks:
|
||||
- id: ruff
|
||||
args: ["--fix", "--show-fixes"]
|
||||
|
||||
@@ -94,7 +94,7 @@ jobs:
|
||||
- uses: actions/setup-python@v5
|
||||
|
||||
- name: Install cibuildwheel
|
||||
run: python -m pip install cibuildwheel==2.21.0
|
||||
run: python -m pip install cibuildwheel==2.21.1
|
||||
|
||||
- name: Build wheels
|
||||
run: python -m cibuildwheel --output-dir wheelhouse
|
||||
@@ -211,6 +211,15 @@ Changelog
|
||||
|
||||
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
||||
|
||||
### v2.21.1
|
||||
|
||||
_16 September 2024_
|
||||
|
||||
- 🐛 Fix a bug in the Linux build, where files copied to the container would have invalid ownership permissions (#2007)
|
||||
- 🐛 Fix a bug on Windows where cibuildwheel would call upon `uv` to install dependencies for versions of CPython that it does not support (#2005)
|
||||
- 🐛 Fix a bug where `uv 0.4.10` would not use the right Python when testing on Linux. (#2008)
|
||||
- 🛠 Bump our documentation pins, fixes an issue with a missing package (#2011)
|
||||
|
||||
### v2.21.0
|
||||
|
||||
_13 September 2024_
|
||||
@@ -259,25 +268,6 @@ _13 June 2024_
|
||||
- 🛠 Fix a warning in our schema generation script. (#1866)
|
||||
- 🛠 Cleaner output on pytest 8-8.2. (#1865)
|
||||
|
||||
|
||||
### v2.19.0
|
||||
|
||||
_10 June 2024_
|
||||
|
||||
See the [release post](https://iscinumpy.dev/post/cibuildwheel-2-19-0/) for more info on new features!
|
||||
|
||||
- 🌟 Add Pyodide platform. Set with `--platform pyodide` or `CIBW_PLATFORM: pyodide` on Linux with a host Python 3.12 to build WebAssembly wheels. Not accepted on PyPI currently, but usable directly in a website using Pyodide, for live docs, etc. (#1456, #1859)
|
||||
- 🌟 Add `build[uv]` backend, which will take a pre-existing uv install (or install `cibuildwheel[uv]`) and use `uv` for all environment setup and installs on Python 3.8+. This is significantly faster in most cases. (#1856)
|
||||
- ✨ Add free-threaded macOS builds and update CPython to 3.13.0b2. (#1854)
|
||||
- 🐛 Issue copying a wheel to a non-existent output dir fixed. (#1851, #1862)
|
||||
- 🐛 Better determinism for the test environment seeding. (#1835)
|
||||
- 🛠 `VIRTUAL_ENV` variable now set. (#1842)
|
||||
- 🛠 Remove a pip<21.3 workaround. (#1842)
|
||||
- 🛠 Error handling was refactored to use exceptions. (#1719)
|
||||
- 🛠 Hardcoded paths in tests avoided. (#1834)
|
||||
- 🛠 Single Python tests made more generic. (#1835)
|
||||
- 🛠 Sped up our ci by splitting up emulation tests. (#1839)
|
||||
|
||||
<!-- END bin/update_readme_changelog.py -->
|
||||
|
||||
---
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
from __future__ import annotations
|
||||
|
||||
__version__ = "2.21.0"
|
||||
__version__ = "2.21.1"
|
||||
|
||||
@@ -345,7 +345,7 @@ def build_in_container(
|
||||
venv_dir = testing_temp_dir / "venv"
|
||||
|
||||
if use_uv:
|
||||
container.call(["uv", "venv", venv_dir], env=env)
|
||||
container.call(["uv", "venv", venv_dir, "--python", python_bin / "python"], env=env)
|
||||
else:
|
||||
# Use embedded dependencies from virtualenv to ensure determinism
|
||||
venv_args = ["--no-periodic-update", "--pip=embed"]
|
||||
|
||||
@@ -193,6 +193,11 @@ def install_pypy(tmp: Path, url: str) -> Path:
|
||||
return installation_path / "bin" / "pypy3"
|
||||
|
||||
|
||||
def can_use_uv(python_configuration: PythonConfiguration) -> bool:
|
||||
conditions = (Version(python_configuration.version) >= Version("3.8"),)
|
||||
return all(conditions)
|
||||
|
||||
|
||||
def setup_python(
|
||||
tmp: Path,
|
||||
python_configuration: PythonConfiguration,
|
||||
@@ -200,13 +205,11 @@ def setup_python(
|
||||
environment: ParsedEnvironment,
|
||||
build_frontend: BuildFrontendName,
|
||||
) -> tuple[Path, dict[str, str]]:
|
||||
if build_frontend == "build[uv]" and Version(python_configuration.version) < Version("3.8"):
|
||||
if build_frontend == "build[uv]" and not can_use_uv(python_configuration):
|
||||
build_frontend = "build"
|
||||
|
||||
uv_path = find_uv()
|
||||
use_uv = build_frontend == "build[uv]" and Version(python_configuration.version) >= Version(
|
||||
"3.8"
|
||||
)
|
||||
use_uv = build_frontend == "build[uv]"
|
||||
|
||||
tmp.mkdir()
|
||||
implementation_id = python_configuration.identifier.split("-")[0]
|
||||
@@ -415,9 +418,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
for config in python_configurations:
|
||||
build_options = options.build_options(config.identifier)
|
||||
build_frontend = build_options.build_frontend or BuildFrontendConfig("pip")
|
||||
use_uv = build_frontend.name == "build[uv]" and Version(config.version) >= Version(
|
||||
"3.8"
|
||||
)
|
||||
use_uv = build_frontend.name == "build[uv]" and can_use_uv(config)
|
||||
uv_path = find_uv()
|
||||
if use_uv and uv_path is None:
|
||||
msg = "uv not found"
|
||||
|
||||
@@ -5,6 +5,7 @@ import json
|
||||
import os
|
||||
import platform
|
||||
import shlex
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import typing
|
||||
@@ -169,6 +170,9 @@ class OCIContainer:
|
||||
self.cwd = cwd
|
||||
self.name: str | None = None
|
||||
self.engine = engine
|
||||
self.host_tar_format = ""
|
||||
if sys.platform.startswith("darwin"):
|
||||
self.host_tar_format = "--format gnutar"
|
||||
|
||||
def _get_platform_args(self, *, oci_platform: OCIPlatform | None = None) -> tuple[str, str]:
|
||||
if oci_platform is None:
|
||||
@@ -311,10 +315,38 @@ class OCIContainer:
|
||||
def copy_into(self, from_path: Path, to_path: PurePath) -> None:
|
||||
if from_path.is_dir():
|
||||
self.call(["mkdir", "-p", to_path])
|
||||
call(self.engine.name, "cp", f"{from_path}/.", f"{self.name}:{to_path}")
|
||||
subprocess.run(
|
||||
f"tar -c {self.host_tar_format} -f - . | {self.engine.name} exec -i {self.name} tar --no-same-owner -xC {shell_quote(to_path)} -f -",
|
||||
shell=True,
|
||||
check=True,
|
||||
cwd=from_path,
|
||||
)
|
||||
else:
|
||||
self.call(["mkdir", "-p", to_path.parent])
|
||||
call(self.engine.name, "cp", from_path, f"{self.name}:{to_path}")
|
||||
exec_process: subprocess.Popen[bytes]
|
||||
with subprocess.Popen(
|
||||
[
|
||||
self.engine.name,
|
||||
"exec",
|
||||
"-i",
|
||||
str(self.name),
|
||||
"sh",
|
||||
"-c",
|
||||
f"cat > {shell_quote(to_path)}",
|
||||
],
|
||||
stdin=subprocess.PIPE,
|
||||
) as exec_process:
|
||||
assert exec_process.stdin
|
||||
with open(from_path, "rb") as from_file:
|
||||
# Bug in mypy, https://github.com/python/mypy/issues/15031
|
||||
shutil.copyfileobj(from_file, exec_process.stdin) # type: ignore[misc]
|
||||
|
||||
exec_process.stdin.close()
|
||||
exec_process.wait()
|
||||
|
||||
if exec_process.returncode:
|
||||
raise subprocess.CalledProcessError(
|
||||
exec_process.returncode, exec_process.args, None, None
|
||||
)
|
||||
|
||||
def copy_out(self, from_path: PurePath, to_path: Path) -> None:
|
||||
# note: we assume from_path is a dir
|
||||
|
||||
@@ -33,7 +33,7 @@ httpcore==1.0.5
|
||||
# via httpx
|
||||
httpx==0.27.2
|
||||
# via unearth
|
||||
idna==3.8
|
||||
idna==3.10
|
||||
# via
|
||||
# anyio
|
||||
# httpx
|
||||
@@ -54,13 +54,13 @@ packaging==24.1
|
||||
# unearth
|
||||
pip==24.2
|
||||
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pydantic==2.9.0
|
||||
pydantic==2.9.1
|
||||
# via
|
||||
# pyodide-build
|
||||
# pyodide-lock
|
||||
pydantic-core==2.23.2
|
||||
pydantic-core==2.23.3
|
||||
# via pydantic
|
||||
pygments==2.18.0
|
||||
# via rich
|
||||
@@ -80,7 +80,7 @@ requests==2.32.3
|
||||
# via pyodide-build
|
||||
resolvelib==1.0.1
|
||||
# via pyodide-build
|
||||
rich==13.8.0
|
||||
rich==13.8.1
|
||||
# via
|
||||
# pyodide-build
|
||||
# pyodide-cli
|
||||
@@ -100,18 +100,16 @@ typer==0.12.5
|
||||
# auditwheel-emscripten
|
||||
# pyodide-build
|
||||
# pyodide-cli
|
||||
types-requests==2.32.0.20240907
|
||||
types-requests==2.32.0.20240914
|
||||
# via pyodide-build
|
||||
typing-extensions==4.12.2
|
||||
# via
|
||||
# pydantic
|
||||
# pydantic-core
|
||||
# typer
|
||||
tzdata==2024.1
|
||||
# via pydantic
|
||||
unearth==0.17.2
|
||||
# via pyodide-build
|
||||
urllib3==2.2.2
|
||||
urllib3==2.2.3
|
||||
# via
|
||||
# requests
|
||||
# types-requests
|
||||
|
||||
@@ -10,7 +10,7 @@ distlib==0.3.8
|
||||
# via virtualenv
|
||||
filelock==3.16.0
|
||||
# via virtualenv
|
||||
importlib-metadata==8.4.0
|
||||
importlib-metadata==8.5.0
|
||||
# via build
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -20,7 +20,7 @@ packaging==24.1
|
||||
# delocate
|
||||
pip==24.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.1.0
|
||||
# via build
|
||||
@@ -30,5 +30,5 @@ typing-extensions==4.12.2
|
||||
# via delocate
|
||||
virtualenv==20.26.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.20.1
|
||||
zipp==3.20.2
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -18,7 +18,7 @@ packaging==24.1
|
||||
# delocate
|
||||
pip==24.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.1.0
|
||||
# via build
|
||||
|
||||
@@ -18,7 +18,7 @@ packaging==24.1
|
||||
# delocate
|
||||
pip==24.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.1.0
|
||||
# via build
|
||||
|
||||
@@ -18,7 +18,7 @@ packaging==24.1
|
||||
# delocate
|
||||
pip==24.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.1.0
|
||||
# via build
|
||||
|
||||
@@ -10,7 +10,7 @@ distlib==0.3.8
|
||||
# via virtualenv
|
||||
filelock==3.16.0
|
||||
# via virtualenv
|
||||
importlib-metadata==8.4.0
|
||||
importlib-metadata==8.5.0
|
||||
# via build
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -20,7 +20,7 @@ packaging==24.1
|
||||
# delocate
|
||||
pip==24.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.1.0
|
||||
# via build
|
||||
@@ -30,5 +30,5 @@ typing-extensions==4.12.2
|
||||
# via delocate
|
||||
virtualenv==20.26.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.20.1
|
||||
zipp==3.20.2
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -10,7 +10,7 @@ distlib==0.3.8
|
||||
# via virtualenv
|
||||
filelock==3.16.0
|
||||
# via virtualenv
|
||||
importlib-metadata==8.4.0
|
||||
importlib-metadata==8.5.0
|
||||
# via build
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -20,7 +20,7 @@ packaging==24.1
|
||||
# delocate
|
||||
pip==24.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.1.0
|
||||
# via build
|
||||
@@ -30,5 +30,5 @@ typing-extensions==4.12.2
|
||||
# via delocate
|
||||
virtualenv==20.26.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.20.1
|
||||
zipp==3.20.2
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -18,7 +18,7 @@ packaging==24.1
|
||||
# delocate
|
||||
pip==24.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.2
|
||||
platformdirs==4.3.3
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.1.0
|
||||
# via build
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
[x86_64]
|
||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.09-0
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.16-1
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.09-0
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.09.09-0
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.09.09-0
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.16-1
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.09.16-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.09.16-1
|
||||
|
||||
[i686]
|
||||
manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.09-0
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.16-1
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.09.09-0
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.09.09-0
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.09.16-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.09.16-1
|
||||
|
||||
[pypy_x86_64]
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.09-0
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.09.16-1
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.09-0
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.09.16-1
|
||||
|
||||
[pypy_i686]
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.09-0
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.09.16-1
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
||||
|
||||
[aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.09-0
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.16-1
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.09-0
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.09.09-0
|
||||
@@ -48,7 +48,7 @@ musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.09.09-0
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.09.09-0
|
||||
|
||||
[pypy_aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.09-0
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.09.16-1
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.09.09-0
|
||||
|
||||
|
||||
+13
-10
@@ -225,6 +225,14 @@ def setup_rust_cross_compile(
|
||||
)
|
||||
|
||||
|
||||
def can_use_uv(python_configuration: PythonConfiguration) -> bool:
|
||||
conditions = (
|
||||
Version(python_configuration.version) >= Version("3.8"),
|
||||
not python_configuration.identifier.startswith("pp38-"),
|
||||
)
|
||||
return all(conditions)
|
||||
|
||||
|
||||
def setup_python(
|
||||
tmp: Path,
|
||||
python_configuration: PythonConfiguration,
|
||||
@@ -254,11 +262,10 @@ def setup_python(
|
||||
raise ValueError(msg)
|
||||
assert base_python.exists()
|
||||
|
||||
use_uv = (
|
||||
build_frontend == "build[uv]"
|
||||
and Version(python_configuration.version) >= Version("3.8")
|
||||
and not python_configuration.identifier.startswith("pp38-")
|
||||
)
|
||||
if build_frontend == "build[uv]" and not can_use_uv(python_configuration):
|
||||
build_frontend = "build"
|
||||
|
||||
use_uv = build_frontend == "build[uv]"
|
||||
uv_path = find_uv()
|
||||
|
||||
log.step("Setting up build environment...")
|
||||
@@ -368,11 +375,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
for config in python_configurations:
|
||||
build_options = options.build_options(config.identifier)
|
||||
build_frontend = build_options.build_frontend or BuildFrontendConfig("pip")
|
||||
use_uv = (
|
||||
build_frontend.name == "build[uv]"
|
||||
and Version(config.version) >= Version("3.8")
|
||||
and not config.identifier.startswith("pp38-")
|
||||
)
|
||||
use_uv = build_frontend.name == "build[uv]" and can_use_uv(config)
|
||||
log.build_start(config.identifier)
|
||||
|
||||
identifier_tmp_dir = tmp_path / config.identifier
|
||||
|
||||
@@ -4,6 +4,15 @@ title: Changelog
|
||||
|
||||
# Changelog
|
||||
|
||||
### v2.21.1
|
||||
|
||||
_16 September 2024_
|
||||
|
||||
- 🐛 Fix a bug in the Linux build, where files copied to the container would have invalid ownership permissions (#2007)
|
||||
- 🐛 Fix a bug on Windows where cibuildwheel would call upon `uv` to install dependencies for versions of CPython that it does not support (#2005)
|
||||
- 🐛 Fix a bug where `uv 0.4.10` would not use the right Python when testing on Linux. (#2008)
|
||||
- 🛠 Bump our documentation pins, fixes an issue with a missing package (#2011)
|
||||
|
||||
### v2.21.0
|
||||
|
||||
_13 September 2024_
|
||||
|
||||
+3
-3
@@ -142,7 +142,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead
|
||||
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
|
||||
|
||||
```yaml
|
||||
uses: pypa/cibuildwheel@v2.21.0
|
||||
uses: pypa/cibuildwheel@v2.21.1
|
||||
```
|
||||
|
||||
This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal.
|
||||
@@ -164,7 +164,7 @@ The second option, and the only one that supports other CI systems, is using a `
|
||||
|
||||
```bash
|
||||
# requirements-cibw.txt
|
||||
cibuildwheel==2.21.0
|
||||
cibuildwheel==2.21.1
|
||||
```
|
||||
|
||||
Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this:
|
||||
@@ -328,7 +328,7 @@ Solutions to this vary, but the simplest is to use pipx:
|
||||
# most runners have pipx preinstalled, but in case you don't
|
||||
python3 -m pip install pipx
|
||||
|
||||
pipx run cibuildwheel==2.21.0 --output-dir wheelhouse
|
||||
pipx run cibuildwheel==2.21.1 --output-dir wheelhouse
|
||||
pipx run twine upload wheelhouse/*.whl
|
||||
```
|
||||
|
||||
|
||||
+2
-2
@@ -161,7 +161,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Build wheels
|
||||
run: pipx run cibuildwheel==2.21.0
|
||||
run: pipx run cibuildwheel==2.21.1
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
@@ -198,7 +198,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
||||
- uses: actions/setup-python@v5
|
||||
|
||||
- name: Install cibuildwheel
|
||||
run: python -m pip install cibuildwheel==2.21.0
|
||||
run: python -m pip install cibuildwheel==2.21.1
|
||||
|
||||
- name: Build wheels
|
||||
run: python -m cibuildwheel --output-dir wheelhouse
|
||||
|
||||
@@ -81,13 +81,13 @@ title: Working examples
|
||||
| [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. |
|
||||
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
|
||||
| [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. |
|
||||
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
|
||||
| [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. |
|
||||
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
|
||||
| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
|
||||
| [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 |
|
||||
| [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. |
|
||||
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
||||
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
||||
| [streaming-form-data][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Streaming parser for multipart/form-data written in Cython |
|
||||
@@ -101,9 +101,9 @@ title: Working examples
|
||||
| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. |
|
||||
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
||||
| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
|
||||
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
||||
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
||||
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
|
||||
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
||||
| [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions |
|
||||
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
||||
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
|
||||
@@ -191,13 +191,13 @@ title: Working examples
|
||||
[abess]: https://github.com/abess-team/abess
|
||||
[sourmash]: https://github.com/sourmash-bio/sourmash
|
||||
[cyvcf2]: https://github.com/brentp/cyvcf2
|
||||
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
|
||||
[jq.py]: https://github.com/mwilliamson/jq.py
|
||||
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
|
||||
[iminuit]: https://github.com/scikit-hep/iminuit
|
||||
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
||||
[keyvi]: https://github.com/KeyviDev/keyvi
|
||||
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
||||
[pillow-heif]: https://github.com/bigcat88/pillow_heif
|
||||
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
||||
[TgCrypto]: https://github.com/pyrogram/tgcrypto
|
||||
[iDynTree]: https://github.com/robotology/idyntree
|
||||
[streaming-form-data]: https://github.com/siddhantgoel/streaming-form-data
|
||||
@@ -211,9 +211,9 @@ title: Working examples
|
||||
[Arbor]: https://github.com/arbor-sim/arbor
|
||||
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
||||
[polaroid]: https://github.com/daggy1234/polaroid
|
||||
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
|
||||
[clang-format]: https://github.com/ssciwr/clang-format-wheel
|
||||
[etebase-py]: https://github.com/etesync/etebase-py
|
||||
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
|
||||
[cf-units]: https://github.com/SciTools/cf-units
|
||||
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
||||
[numpythia]: https://github.com/scikit-hep/numpythia
|
||||
|
||||
@@ -9,7 +9,7 @@ environment:
|
||||
|
||||
stack: python 3.12
|
||||
|
||||
install: python -m pip install cibuildwheel==2.21.0
|
||||
install: python -m pip install cibuildwheel==2.21.1
|
||||
|
||||
build_script: python -m cibuildwheel --output-dir wheelhouse
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python3 -m pip install --upgrade pip
|
||||
pip3 install cibuildwheel==2.21.0
|
||||
pip3 install cibuildwheel==2.21.1
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install cibuildwheel==2.21.0
|
||||
python3 -m pip install cibuildwheel==2.21.1
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
@@ -34,7 +34,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python -m pip install --upgrade pip
|
||||
pip install cibuildwheel==2.21.0
|
||||
pip install cibuildwheel==2.21.1
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
- run:
|
||||
name: Build the Linux wheels.
|
||||
command: |
|
||||
python3 -m pip install --user cibuildwheel==2.21.0
|
||||
python3 -m pip install --user cibuildwheel==2.21.1
|
||||
cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
- run:
|
||||
name: Build the Linux aarch64 wheels.
|
||||
command: |
|
||||
python3 -m pip install --user cibuildwheel==2.21.0
|
||||
python3 -m pip install --user cibuildwheel==2.21.1
|
||||
python3 -m cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
name: Build the OS X wheels.
|
||||
command: |
|
||||
sudo softwareupdate --install-rosetta --agree-to-license # for python<=3.8 or x86_64/universal2 tests
|
||||
pip3 install cibuildwheel==2.21.0
|
||||
pip3 install cibuildwheel==2.21.1
|
||||
cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||
install_cibuildwheel_script:
|
||||
- python -m pip install cibuildwheel==2.21.0
|
||||
- python -m pip install cibuildwheel==2.21.1
|
||||
run_cibuildwheel_script:
|
||||
- cibuildwheel
|
||||
wheels_artifacts:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||
install_cibuildwheel_script:
|
||||
- python -m pip install cibuildwheel==2.21.0
|
||||
- python -m pip install cibuildwheel==2.21.1
|
||||
run_cibuildwheel_script:
|
||||
- cibuildwheel
|
||||
wheels_artifacts:
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.21.0
|
||||
uses: pypa/cibuildwheel@v2.21.1
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.21.0
|
||||
uses: pypa/cibuildwheel@v2.21.1
|
||||
# env:
|
||||
# CIBW_SOME_OPTION: value
|
||||
# ...
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
platforms: all
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.21.0
|
||||
uses: pypa/cibuildwheel@v2.21.1
|
||||
env:
|
||||
# configure cibuildwheel to build native archs ('auto'), and some
|
||||
# emulated ones
|
||||
|
||||
@@ -12,7 +12,7 @@ linux:
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
script:
|
||||
- curl -sSL https://get.docker.com/ | sh
|
||||
- python -m pip install cibuildwheel==2.21.0
|
||||
- python -m pip install cibuildwheel==2.21.1
|
||||
- cibuildwheel --output-dir wheelhouse
|
||||
artifacts:
|
||||
paths:
|
||||
@@ -23,7 +23,7 @@ windows:
|
||||
before_script:
|
||||
- choco install python -y --version 3.12.4
|
||||
- choco install git.install -y
|
||||
- py -m pip install cibuildwheel==2.21.0
|
||||
- py -m pip install cibuildwheel==2.21.1
|
||||
script:
|
||||
- py -m cibuildwheel --output-dir wheelhouse --platform windows
|
||||
artifacts:
|
||||
@@ -35,7 +35,7 @@ windows:
|
||||
macos:
|
||||
image: macos-14-xcode-15
|
||||
before_script:
|
||||
- python3 -m pip install cibuildwheel==2.21.0
|
||||
- python3 -m pip install cibuildwheel==2.21.1
|
||||
script:
|
||||
- python3 -m cibuildwheel --output-dir wheelhouse
|
||||
artifacts:
|
||||
|
||||
@@ -14,7 +14,7 @@ linux:
|
||||
- curl -sSL https://get.docker.com/ | sh
|
||||
# Warning: This is extremely slow, be careful with how many wheels you build
|
||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
- python -m pip install cibuildwheel==2.21.0
|
||||
- python -m pip install cibuildwheel==2.21.1
|
||||
# Assuming your CI runner's default architecture is x86_64...
|
||||
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
|
||||
artifacts:
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
- ln -s /c/Python312/python.exe /c/Python312/python3.exe
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==2.21.0
|
||||
- python3 -m pip install cibuildwheel==2.21.1
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './dist'
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
- ln -s /c/Python312/python.exe /c/Python312/python3.exe
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==2.21.0
|
||||
- python3 -m pip install cibuildwheel==2.21.1
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './wheelhouse'
|
||||
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
- stage: deploy
|
||||
name: Build and deploy Linux wheels
|
||||
services: docker
|
||||
install: python3 -m pip install cibuildwheel==2.21.0 twine
|
||||
install: python3 -m pip install cibuildwheel==2.21.1 twine
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||
# Deploy on windows
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
name: Build and deploy Windows wheels
|
||||
os: windows
|
||||
language: shell
|
||||
install: python3 -m pip install cibuildwheel==2.21.0 twine
|
||||
install: python3 -m pip install cibuildwheel==2.21.1 twine
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "cibuildwheel"
|
||||
version = "2.21.0"
|
||||
version = "2.21.1"
|
||||
description = "Build Python wheels on CI with minimal configuration."
|
||||
readme = "README.md"
|
||||
license = "BSD-2-Clause"
|
||||
@@ -64,9 +64,9 @@ dev = [
|
||||
]
|
||||
docs = [
|
||||
"jinja2>=3.1.2",
|
||||
"mkdocs-include-markdown-plugin==2.8.0",
|
||||
"mkdocs-include-markdown-plugin==6.2.2",
|
||||
"mkdocs-macros-plugin",
|
||||
"mkdocs==1.3.1",
|
||||
"mkdocs==1.6.1",
|
||||
"pymdown-extensions",
|
||||
]
|
||||
test = [
|
||||
|
||||
@@ -244,6 +244,9 @@ def test_file_operation(tmp_path: Path, container_engine):
|
||||
|
||||
container.copy_into(original_test_file, dst_file)
|
||||
|
||||
owner = container.call(["stat", "-c", "%u:%g", dst_file], capture_output=True).strip()
|
||||
assert owner == "0:0"
|
||||
|
||||
output = container.call(["cat", dst_file], capture_output=True)
|
||||
assert test_binary_data == bytes(output, encoding="utf8", errors="surrogateescape")
|
||||
|
||||
@@ -266,6 +269,12 @@ def test_dir_operations(tmp_path: Path, container_engine):
|
||||
dst_file = dst_dir / "test.dat"
|
||||
container.copy_into(test_dir, dst_dir)
|
||||
|
||||
owner = container.call(["stat", "-c", "%u:%g", dst_dir], capture_output=True).strip()
|
||||
assert owner == "0:0"
|
||||
|
||||
owner = container.call(["stat", "-c", "%u:%g", dst_file], capture_output=True).strip()
|
||||
assert owner == "0:0"
|
||||
|
||||
output = container.call(["cat", dst_file], capture_output=True)
|
||||
assert test_binary_data == bytes(output, encoding="utf8", errors="surrogateescape")
|
||||
|
||||
@@ -276,6 +285,11 @@ def test_dir_operations(tmp_path: Path, container_engine):
|
||||
new_test_dir = tmp_path / "test_dir_new"
|
||||
container.copy_out(dst_dir, new_test_dir)
|
||||
|
||||
assert os.getuid() == new_test_dir.stat().st_uid
|
||||
assert os.getgid() == new_test_dir.stat().st_gid
|
||||
assert os.getuid() == (new_test_dir / "test.dat").stat().st_uid
|
||||
assert os.getgid() == (new_test_dir / "test.dat").stat().st_gid
|
||||
|
||||
assert test_binary_data == (new_test_dir / "test.dat").read_bytes()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user