Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fff9ec32ed | ||
|
|
f4291e7492 | ||
|
|
9da4ede616 | ||
|
|
77d3a5f98e | ||
|
|
9535d168fa | ||
|
|
70fae8d0b7 | ||
|
|
7699db3017 | ||
|
|
6dceb29008 | ||
|
|
035f5a2297 | ||
|
|
951d453a2e | ||
|
|
b05d91ee01 | ||
|
|
cbffaf76d2 | ||
|
|
46a7bf14dc | ||
|
|
1e2942dd68 | ||
|
|
de4fe44dc8 | ||
|
|
96e0efe076 | ||
|
|
84ffe27f78 | ||
|
|
129137d894 | ||
|
|
35a8d6486e | ||
|
|
74c99e0d93 | ||
|
|
86248929ed | ||
|
|
5fee29256d | ||
|
|
d4af0ac229 | ||
|
|
7da7df1efc | ||
|
|
9deb1b6794 | ||
|
|
271c5fe6e4 | ||
|
|
c716cfaeb8 | ||
|
|
28ad6e4b40 | ||
|
|
13599a1a10 | ||
|
|
a1bebe5362 | ||
|
|
687981060f | ||
|
|
29cb13893f | ||
|
|
099d397aee | ||
|
|
d7a6d04353 | ||
|
|
72222654f4 | ||
|
|
7a8b8012ff | ||
|
|
0ccf1dc016 | ||
|
|
ba11212a13 | ||
|
|
6d0890e7e0 | ||
|
|
cf7586ce7e | ||
|
|
137dc1a2cf | ||
|
|
1646b08659 | ||
|
|
391249a1ca | ||
|
|
62a06d28b5 | ||
|
|
647b509c74 |
@@ -62,6 +62,13 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get -y install podman
|
sudo apt-get -y install podman
|
||||||
|
|
||||||
|
# free some space to prevent reaching GHA disk space limits
|
||||||
|
- name: Clean docker images
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
run: |
|
||||||
|
docker system prune -a -f
|
||||||
|
df -h
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install ".[test]"
|
python -m pip install ".[test]"
|
||||||
|
|||||||
@@ -19,13 +19,13 @@ repos:
|
|||||||
- id: black
|
- id: black
|
||||||
|
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: v0.0.288
|
rev: v0.0.292
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
- id: ruff
|
||||||
args: ["--fix", "--show-fixes"]
|
args: ["--fix", "--show-fixes"]
|
||||||
|
|
||||||
- repo: https://github.com/asottile/setup-cfg-fmt
|
- repo: https://github.com/asottile/setup-cfg-fmt
|
||||||
rev: v2.4.0
|
rev: v2.5.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: setup-cfg-fmt
|
- id: setup-cfg-fmt
|
||||||
args: [--include-version-classifiers, --min-py-version=3.8, --max-py-version=3.11]
|
args: [--include-version-classifiers, --min-py-version=3.8, --max-py-version=3.11]
|
||||||
@@ -35,9 +35,10 @@ repos:
|
|||||||
hooks:
|
hooks:
|
||||||
- id: mypy
|
- id: mypy
|
||||||
name: mypy 3.8 on cibuildwheel/
|
name: mypy 3.8 on cibuildwheel/
|
||||||
exclude: ^cibuildwheel/resources/.*py$
|
exclude: ^cibuildwheel/resources/.*py|bin/generate_schema.py$
|
||||||
args: ["--python-version=3.8"]
|
args: ["--python-version=3.8"]
|
||||||
additional_dependencies: &mypy-dependencies
|
additional_dependencies: &mypy-dependencies
|
||||||
|
- bracex
|
||||||
- nox
|
- nox
|
||||||
- packaging
|
- packaging
|
||||||
- pygithub
|
- pygithub
|
||||||
@@ -49,7 +50,7 @@ repos:
|
|||||||
- types-jinja2
|
- types-jinja2
|
||||||
- types-pyyaml
|
- types-pyyaml
|
||||||
- types-requests
|
- types-requests
|
||||||
- bracex
|
- validate-pyproject
|
||||||
- id: mypy
|
- id: mypy
|
||||||
name: mypy 3.11
|
name: mypy 3.11
|
||||||
exclude: ^cibuildwheel/resources/.*py$
|
exclude: ^cibuildwheel/resources/.*py$
|
||||||
@@ -57,7 +58,7 @@ repos:
|
|||||||
additional_dependencies: *mypy-dependencies
|
additional_dependencies: *mypy-dependencies
|
||||||
|
|
||||||
- repo: https://github.com/shellcheck-py/shellcheck-py
|
- repo: https://github.com/shellcheck-py/shellcheck-py
|
||||||
rev: v0.9.0.5
|
rev: v0.9.0.6
|
||||||
hooks:
|
hooks:
|
||||||
- id: shellcheck
|
- id: shellcheck
|
||||||
|
|
||||||
@@ -77,8 +78,8 @@ repos:
|
|||||||
files: ^docs/changelog.md$
|
files: ^docs/changelog.md$
|
||||||
|
|
||||||
- repo: https://github.com/codespell-project/codespell
|
- repo: https://github.com/codespell-project/codespell
|
||||||
rev: v2.2.5
|
rev: v2.2.6
|
||||||
hooks:
|
hooks:
|
||||||
- id: codespell
|
- id: codespell
|
||||||
args: ["-L", "sur"]
|
args: ["-L", "sur", "-w"]
|
||||||
exclude: ^docs/working-examples\.md$ # Autogenerated
|
exclude: ^docs/working-examples\.md$ # Autogenerated
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
- uses: actions/setup-python@v3
|
- uses: actions/setup-python@v3
|
||||||
|
|
||||||
- name: Install cibuildwheel
|
- name: Install cibuildwheel
|
||||||
run: python -m pip install cibuildwheel==2.16.0
|
run: python -m pip install cibuildwheel==2.16.2
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: python -m cibuildwheel --output-dir wheelhouse
|
run: python -m cibuildwheel --output-dir wheelhouse
|
||||||
@@ -213,6 +213,24 @@ Changelog
|
|||||||
|
|
||||||
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
||||||
|
|
||||||
|
### v2.16.2
|
||||||
|
|
||||||
|
_3 October 2023_
|
||||||
|
|
||||||
|
- 🛠 Updates CPython 3.12 version to 3.12.0, final release (#1635)
|
||||||
|
- ✨ Adds a debug option [`CIBW_DEBUG_KEEP_CONTAINER`](https://cibuildwheel.readthedocs.io/en/stable/options/#cibw_debug_keep_container) to stop cibuildwheel deleting build containers after the build finishes. (#1620)
|
||||||
|
- 📚 Adds support for `[tool.cibuildwheel]` checking by adding a schema compatible with the [validate-pyproject](https://github.com/abravalheri/validate-pyproject/) tool (#1622, #1628, #1629)
|
||||||
|
- 🐛 Fix parsing of `CIBW_CONTAINER_ENGINE` and `CIBW_BUILD_FRONTEND` options to not break arguments on `:` characters (#1621)
|
||||||
|
- 🐛 Fix the evaluation order of `CIBW_ENVIRONMENT` and `CIBW_ENVIRONMENT_PASS` so that `CIBW_ENVIRONMENT` assignments can reference environment variables passed through from the host machine. (#1617)
|
||||||
|
- 🛠 Supports manylinux images' deferred installation of interpreters through the `manylinux-interpreters` tool (#1630)
|
||||||
|
|
||||||
|
### v2.16.1
|
||||||
|
|
||||||
|
_26 September 2023_
|
||||||
|
|
||||||
|
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0rc3 (#1625)
|
||||||
|
- 🛠 Only calls `linux32` in containers when necessary (#1599)
|
||||||
|
|
||||||
### v2.16.0
|
### v2.16.0
|
||||||
|
|
||||||
_18 September 2023_
|
_18 September 2023_
|
||||||
@@ -220,7 +238,7 @@ _18 September 2023_
|
|||||||
- ✨ Add the ability to pass additional flags to a build frontend through the [CIBW_BUILD_FRONTEND](https://cibuildwheel.readthedocs.io/en/stable/options/#build-frontend) option (#1588).
|
- ✨ Add the ability to pass additional flags to a build frontend through the [CIBW_BUILD_FRONTEND](https://cibuildwheel.readthedocs.io/en/stable/options/#build-frontend) option (#1588).
|
||||||
- ✨ The environment variable SOURCE_DATE_EPOCH is now automatically passed through to container Linux builds (useful for [reproducible builds](https://reproducible-builds.org/docs/source-date-epoch/)!) (#1589)
|
- ✨ The environment variable SOURCE_DATE_EPOCH is now automatically passed through to container Linux builds (useful for [reproducible builds](https://reproducible-builds.org/docs/source-date-epoch/)!) (#1589)
|
||||||
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0rc2 (#1604)
|
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0rc2 (#1604)
|
||||||
- 🐛 Fix `requires_python` auto-detection from setup.py when the call to `setup()` is within an `if __name__ == "__main__" block (#1613)
|
- 🐛 Fix `requires_python` auto-detection from setup.py when the call to `setup()` is within an `if __name__ == "__main__"` block (#1613)
|
||||||
- 🐛 Fix a bug that prevented building Linux wheels in Docker on a Windows host (#1573)
|
- 🐛 Fix a bug that prevented building Linux wheels in Docker on a Windows host (#1573)
|
||||||
- 🐛 `--only` can now select prerelease-pythons (#1564)
|
- 🐛 `--only` can now select prerelease-pythons (#1564)
|
||||||
- 📚 Docs & examples updates (#1582, #1593, #1598, #1615)
|
- 📚 Docs & examples updates (#1582, #1593, #1598, #1615)
|
||||||
@@ -238,23 +256,6 @@ _15 July 2023_
|
|||||||
|
|
||||||
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0b4 (#1550)
|
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0b4 (#1550)
|
||||||
|
|
||||||
### v2.14.0
|
|
||||||
|
|
||||||
_10 July 2023_
|
|
||||||
|
|
||||||
- ✨ Adds support for building PyPy 3.10 wheels. (#1525)
|
|
||||||
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0b3.
|
|
||||||
- ✨ Allow the use of the `{wheel}` placeholder in CIBW_TEST_COMMAND (#1533)
|
|
||||||
- 📚 Docs & examples updates (#1532, #1416)
|
|
||||||
- ⚠️ Removed support for running cibuildwheel in Python 3.7. Python 3.7 is EOL. However, cibuildwheel continues to build Python 3.7 wheels for the moment. (#1175)
|
|
||||||
|
|
||||||
### v2.13.1
|
|
||||||
|
|
||||||
_10 June 2023_
|
|
||||||
|
|
||||||
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0b2. (#1516)
|
|
||||||
- 🛠 Adds a moving `v<major>.<minor>` tag for use in GitHub Actions workflow files. If you use this, you'll get the latest patch release within a minor version. Additionally, Dependabot won't send you PRs for patch releases. (#1517)
|
|
||||||
|
|
||||||
<!-- END bin/update_readme_changelog.py -->
|
<!-- END bin/update_readme_changelog.py -->
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Executable
+260
@@ -0,0 +1,260 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import copy
|
||||||
|
import json
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
starter = """
|
||||||
|
$id: https://github.com/pypa/cibuildwheel/blob/main/cibuildwheel/resources/cibuildwheel.schema.json
|
||||||
|
$schema: http://json-schema.org/draft-07/schema
|
||||||
|
additionalProperties: false
|
||||||
|
description: cibuildwheel's settings.
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
archs:
|
||||||
|
description: Change the architectures built on your machine by default.
|
||||||
|
type: string_array
|
||||||
|
before-all:
|
||||||
|
description: Execute a shell command on the build system before any wheels are built.
|
||||||
|
type: string_array
|
||||||
|
before-build:
|
||||||
|
description: Execute a shell command preparing each wheel's build.
|
||||||
|
type: string_array
|
||||||
|
before-test:
|
||||||
|
description: Execute a shell command before testing each wheel.
|
||||||
|
type: string_array
|
||||||
|
build:
|
||||||
|
default: ['*']
|
||||||
|
description: Choose the Python versions to build.
|
||||||
|
type: string_array
|
||||||
|
build-frontend:
|
||||||
|
default: default
|
||||||
|
description: Set the tool to use to build, either "pip" (default for now) or "build"
|
||||||
|
oneOf:
|
||||||
|
- enum: [pip, build, default]
|
||||||
|
- type: string
|
||||||
|
pattern: '^pip; ?args:'
|
||||||
|
- type: string
|
||||||
|
pattern: '^build; ?args:'
|
||||||
|
- type: object
|
||||||
|
additionalProperties: false
|
||||||
|
required: [name]
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
enum: [pip, build]
|
||||||
|
args:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
build-verbosity:
|
||||||
|
type: integer
|
||||||
|
minimum: -3
|
||||||
|
maximum: 3
|
||||||
|
default: 0
|
||||||
|
description: Increase/decrease the output of pip wheel.
|
||||||
|
config-settings:
|
||||||
|
description: Specify config-settings for the build backend.
|
||||||
|
type: string_table_array
|
||||||
|
container-engine:
|
||||||
|
oneOf:
|
||||||
|
- enum: [docker, podman]
|
||||||
|
- type: string
|
||||||
|
pattern: '^docker; ?create_args:'
|
||||||
|
- type: string
|
||||||
|
pattern: '^podman; ?create_args:'
|
||||||
|
- type: object
|
||||||
|
additionalProperties: false
|
||||||
|
required: [name]
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
enum: [docker, podman]
|
||||||
|
create-args:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
dependency-versions:
|
||||||
|
default: pinned
|
||||||
|
description: Specify how cibuildwheel controls the versions of the tools it uses
|
||||||
|
type: string
|
||||||
|
environment:
|
||||||
|
description: Set environment variables needed during the build.
|
||||||
|
type: string_table
|
||||||
|
environment-pass:
|
||||||
|
description: Set environment variables on the host to pass-through to the container
|
||||||
|
during the build.
|
||||||
|
type: string_array
|
||||||
|
manylinux-aarch64-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
manylinux-i686-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
manylinux-ppc64le-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
manylinux-pypy_aarch64-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
manylinux-pypy_i686-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
manylinux-pypy_x86_64-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
manylinux-s390x-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
manylinux-x86_64-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
musllinux-aarch64-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
musllinux-i686-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
musllinux-ppc64le-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
musllinux-s390x-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
musllinux-x86_64-image:
|
||||||
|
type: string
|
||||||
|
description: Specify alternative manylinux / musllinux container images
|
||||||
|
repair-wheel-command:
|
||||||
|
type: string_array
|
||||||
|
description: Execute a shell command to repair each built wheel.
|
||||||
|
skip:
|
||||||
|
description: Choose the Python versions to skip.
|
||||||
|
type: string_array
|
||||||
|
test-command:
|
||||||
|
description: Execute a shell command to test each built wheel.
|
||||||
|
type: string_array
|
||||||
|
test-extras:
|
||||||
|
description: Install your wheel for testing using `extras_require`
|
||||||
|
type: string_array
|
||||||
|
test-requires:
|
||||||
|
description: Install Python dependencies before running the tests
|
||||||
|
type: string_array
|
||||||
|
test-skip:
|
||||||
|
description: Skip running tests on some builds.
|
||||||
|
type: string_array
|
||||||
|
"""
|
||||||
|
|
||||||
|
schema = yaml.safe_load(starter)
|
||||||
|
|
||||||
|
string_array = yaml.safe_load(
|
||||||
|
"""
|
||||||
|
- type: string
|
||||||
|
- type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
string_table_array = yaml.safe_load(
|
||||||
|
"""
|
||||||
|
- type: string
|
||||||
|
- type: object
|
||||||
|
additionalProperties: false
|
||||||
|
patternProperties:
|
||||||
|
.+:
|
||||||
|
oneOf:
|
||||||
|
- type: string
|
||||||
|
- type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
string_table = yaml.safe_load(
|
||||||
|
"""
|
||||||
|
- type: string
|
||||||
|
- type: object
|
||||||
|
additionalProperties: false
|
||||||
|
patternProperties:
|
||||||
|
.+:
|
||||||
|
- type: string
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
for value in schema["properties"].values():
|
||||||
|
match value:
|
||||||
|
case {"type": "string_array"}:
|
||||||
|
del value["type"]
|
||||||
|
value["oneOf"] = string_array
|
||||||
|
case {"type": "string_table"}:
|
||||||
|
del value["type"]
|
||||||
|
value["oneOf"] = string_table
|
||||||
|
case {"type": "string_table_array"}:
|
||||||
|
del value["type"]
|
||||||
|
value["oneOf"] = string_table_array
|
||||||
|
|
||||||
|
overrides = yaml.safe_load(
|
||||||
|
"""
|
||||||
|
type: array
|
||||||
|
description: An overrides array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required: ["select"]
|
||||||
|
minProperties: 2
|
||||||
|
additionalProperties: false
|
||||||
|
properties:
|
||||||
|
select: {}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
for key, value in schema["properties"].items():
|
||||||
|
value["title"] = f'CIBW_{key.replace("-", "_").upper()}'
|
||||||
|
|
||||||
|
non_global_options = {k: {"$ref": f"#/properties/{k}"} for k in schema["properties"]}
|
||||||
|
del non_global_options["build"]
|
||||||
|
del non_global_options["skip"]
|
||||||
|
del non_global_options["container-engine"]
|
||||||
|
del non_global_options["test-skip"]
|
||||||
|
|
||||||
|
overrides["items"]["properties"]["select"]["oneOf"] = string_array
|
||||||
|
overrides["items"]["properties"] |= non_global_options.copy()
|
||||||
|
|
||||||
|
del overrides["items"]["properties"]["archs"]
|
||||||
|
|
||||||
|
not_linux = non_global_options.copy()
|
||||||
|
|
||||||
|
del not_linux["environment-pass"]
|
||||||
|
for key in list(not_linux):
|
||||||
|
if "linux-" in key:
|
||||||
|
del not_linux[key]
|
||||||
|
|
||||||
|
|
||||||
|
def as_object(d: dict[str, Any]) -> dict[str, Any]:
|
||||||
|
return {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": False,
|
||||||
|
"properties": copy.deepcopy(d),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
oses = {
|
||||||
|
"linux": as_object(non_global_options),
|
||||||
|
"windows": as_object(not_linux),
|
||||||
|
"macos": as_object(not_linux),
|
||||||
|
}
|
||||||
|
|
||||||
|
oses["linux"]["properties"]["repair-wheel-command"] = {
|
||||||
|
**schema["properties"]["repair-wheel-command"],
|
||||||
|
"default": "auditwheel repair -w {dest_dir} {wheel}",
|
||||||
|
}
|
||||||
|
oses["macos"]["properties"]["repair-wheel-command"] = {
|
||||||
|
**schema["properties"]["repair-wheel-command"],
|
||||||
|
"default": "delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}",
|
||||||
|
}
|
||||||
|
|
||||||
|
del oses["linux"]["properties"]["dependency-versions"]
|
||||||
|
|
||||||
|
schema["properties"]["overrides"] = overrides
|
||||||
|
schema["properties"] |= oses
|
||||||
|
|
||||||
|
print(json.dumps(schema, indent=2))
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
__version__ = "2.16.0"
|
__version__ = "2.16.2"
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ from __future__ import annotations
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
from tomllib import load
|
from tomllib import load, loads
|
||||||
else:
|
else:
|
||||||
from tomli import load
|
from tomli import load, loads
|
||||||
|
|
||||||
__all__ = ("load",)
|
__all__ = ["load", "loads"]
|
||||||
|
|||||||
@@ -124,8 +124,12 @@ class ParsedEnvironment:
|
|||||||
|
|
||||||
return environment
|
return environment
|
||||||
|
|
||||||
def add(self, name: str, value: str) -> None:
|
def add(self, name: str, value: str, prepend: bool = False) -> None:
|
||||||
self.assignments.append(EnvironmentAssignmentRaw(name=name, value=value))
|
assignment = EnvironmentAssignmentRaw(name=name, value=value)
|
||||||
|
if prepend:
|
||||||
|
self.assignments.insert(0, assignment)
|
||||||
|
else:
|
||||||
|
self.assignments.append(assignment)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"{self.__class__.__name__}({[repr(a) for a in self.assignments]!r})"
|
return f"{self.__class__.__name__}({[repr(a) for a in self.assignments]!r})"
|
||||||
|
|||||||
+11
-1
@@ -117,10 +117,20 @@ def check_all_python_exist(
|
|||||||
*, platform_configs: Iterable[PythonConfiguration], container: OCIContainer
|
*, platform_configs: Iterable[PythonConfiguration], container: OCIContainer
|
||||||
) -> None:
|
) -> None:
|
||||||
exist = True
|
exist = True
|
||||||
|
has_manylinux_interpreters = True
|
||||||
messages = []
|
messages = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
# use capture_output to keep quiet
|
||||||
|
container.call(["manylinux-interpreters", "--help"], capture_output=True)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
has_manylinux_interpreters = False
|
||||||
|
|
||||||
for config in platform_configs:
|
for config in platform_configs:
|
||||||
python_path = config.path / "bin" / "python"
|
python_path = config.path / "bin" / "python"
|
||||||
try:
|
try:
|
||||||
|
if has_manylinux_interpreters:
|
||||||
|
container.call(["manylinux-interpreters", "ensure", config.path.name])
|
||||||
container.call(["test", "-x", python_path])
|
container.call(["test", "-x", python_path])
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
messages.append(
|
messages.append(
|
||||||
@@ -423,7 +433,7 @@ def build(options: Options, tmp_path: Path) -> None: # noqa: ARG001
|
|||||||
|
|
||||||
with OCIContainer(
|
with OCIContainer(
|
||||||
image=build_step.container_image,
|
image=build_step.container_image,
|
||||||
simulate_32_bit=build_step.platform_tag.endswith("i686"),
|
enforce_32_bit=build_step.platform_tag.endswith("i686"),
|
||||||
cwd=container_project_path,
|
cwd=container_project_path,
|
||||||
engine=options.globals.container_engine,
|
engine=options.globals.container_engine,
|
||||||
) as container:
|
) as container:
|
||||||
|
|||||||
@@ -17,7 +17,13 @@ from types import TracebackType
|
|||||||
from typing import IO, Dict, Literal
|
from typing import IO, Dict, Literal
|
||||||
|
|
||||||
from .typing import PathOrStr, PopenBytes
|
from .typing import PathOrStr, PopenBytes
|
||||||
from .util import CIProvider, detect_ci_provider, parse_key_value_string
|
from .util import (
|
||||||
|
CIProvider,
|
||||||
|
call,
|
||||||
|
detect_ci_provider,
|
||||||
|
parse_key_value_string,
|
||||||
|
strtobool,
|
||||||
|
)
|
||||||
|
|
||||||
ContainerEngineName = Literal["docker", "podman"]
|
ContainerEngineName = Literal["docker", "podman"]
|
||||||
|
|
||||||
@@ -85,7 +91,7 @@ class OCIContainer:
|
|||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
image: str,
|
image: str,
|
||||||
simulate_32_bit: bool = False,
|
enforce_32_bit: bool = False,
|
||||||
cwd: PathOrStr | None = None,
|
cwd: PathOrStr | None = None,
|
||||||
engine: OCIContainerEngineConfig = DEFAULT_ENGINE,
|
engine: OCIContainerEngineConfig = DEFAULT_ENGINE,
|
||||||
):
|
):
|
||||||
@@ -94,7 +100,7 @@ class OCIContainer:
|
|||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
self.image = image
|
self.image = image
|
||||||
self.simulate_32_bit = simulate_32_bit
|
self.enforce_32_bit = enforce_32_bit
|
||||||
self.cwd = cwd
|
self.cwd = cwd
|
||||||
self.name: str | None = None
|
self.name: str | None = None
|
||||||
self.engine = engine
|
self.engine = engine
|
||||||
@@ -110,7 +116,17 @@ class OCIContainer:
|
|||||||
if detect_ci_provider() == CIProvider.travis_ci and platform.machine() == "ppc64le":
|
if detect_ci_provider() == CIProvider.travis_ci and platform.machine() == "ppc64le":
|
||||||
network_args = ["--network=host"]
|
network_args = ["--network=host"]
|
||||||
|
|
||||||
shell_args = ["linux32", "/bin/bash"] if self.simulate_32_bit else ["/bin/bash"]
|
simulate_32_bit = False
|
||||||
|
if self.enforce_32_bit:
|
||||||
|
# If the architecture running the image is already the right one
|
||||||
|
# or the image entrypoint takes care of enforcing this, then we don't need to
|
||||||
|
# simulate this
|
||||||
|
container_machine = call(
|
||||||
|
self.engine.name, "run", "--rm", self.image, "uname", "-m", capture_stdout=True
|
||||||
|
).strip()
|
||||||
|
simulate_32_bit = container_machine != "i686"
|
||||||
|
|
||||||
|
shell_args = ["linux32", "/bin/bash"] if simulate_32_bit else ["/bin/bash"]
|
||||||
|
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
[
|
[
|
||||||
@@ -178,12 +194,14 @@ class OCIContainer:
|
|||||||
|
|
||||||
assert isinstance(self.name, str)
|
assert isinstance(self.name, str)
|
||||||
|
|
||||||
subprocess.run(
|
keep_container = strtobool(os.environ.get("CIBW_DEBUG_KEEP_CONTAINER", ""))
|
||||||
[self.engine.name, "rm", "--force", "-v", self.name],
|
if not keep_container:
|
||||||
stdout=subprocess.DEVNULL,
|
subprocess.run(
|
||||||
check=False,
|
[self.engine.name, "rm", "--force", "-v", self.name],
|
||||||
)
|
stdout=subprocess.DEVNULL,
|
||||||
self.name = None
|
check=False,
|
||||||
|
)
|
||||||
|
self.name = None
|
||||||
|
|
||||||
def copy_into(self, from_path: Path, to_path: PurePath) -> None:
|
def copy_into(self, from_path: Path, to_path: PurePath) -> None:
|
||||||
# `docker cp` causes 'no space left on device' error when
|
# `docker cp` causes 'no space left on device' error when
|
||||||
|
|||||||
@@ -532,9 +532,9 @@ class Options:
|
|||||||
|
|
||||||
# Pass through environment variables
|
# Pass through environment variables
|
||||||
if self.platform == "linux":
|
if self.platform == "linux":
|
||||||
for env_var_name in environment_pass:
|
for env_var_name in reversed(environment_pass):
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
environment.add(env_var_name, self.env[env_var_name])
|
environment.add(env_var_name, self.env[env_var_name], prepend=True)
|
||||||
|
|
||||||
if dependency_versions == "pinned":
|
if dependency_versions == "pinned":
|
||||||
dependency_constraints: None | (
|
dependency_constraints: None | (
|
||||||
|
|||||||
@@ -97,19 +97,19 @@ python_configurations = [
|
|||||||
{ identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" },
|
{ identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" },
|
||||||
{ identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" },
|
{ identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" },
|
||||||
{ identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" },
|
{ identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.5/python-3.11.5-macos11.pkg" },
|
{ identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.6/python-3.11.6-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.5/python-3.11.5-macos11.pkg" },
|
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.6/python-3.11.6-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.5/python-3.11.5-macos11.pkg" },
|
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.6/python-3.11.6-macos11.pkg" },
|
||||||
{ identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0rc2-macos11.pkg" },
|
{ identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0-macos11.pkg" },
|
||||||
{ identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0rc2-macos11.pkg" },
|
{ identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0-macos11.pkg" },
|
||||||
{ identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0rc2-macos11.pkg" },
|
{ identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0-macos11.pkg" },
|
||||||
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" },
|
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" },
|
||||||
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" },
|
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" },
|
||||||
{ identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
|
{ identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
|
||||||
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.12-macos_x86_64.tar.bz2" },
|
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.13-macos_x86_64.tar.bz2" },
|
||||||
{ identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.12-macos_arm64.tar.bz2" },
|
{ identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.13-macos_arm64.tar.bz2" },
|
||||||
{ identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.12-macos_x86_64.tar.bz2" },
|
{ identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.13-macos_x86_64.tar.bz2" },
|
||||||
{ identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.12-macos_arm64.tar.bz2" },
|
{ identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.13-macos_arm64.tar.bz2" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[windows]
|
[windows]
|
||||||
@@ -124,16 +124,16 @@ python_configurations = [
|
|||||||
{ identifier = "cp39-win_amd64", version = "3.9.13", arch = "64" },
|
{ identifier = "cp39-win_amd64", version = "3.9.13", arch = "64" },
|
||||||
{ identifier = "cp310-win32", version = "3.10.11", arch = "32" },
|
{ identifier = "cp310-win32", version = "3.10.11", arch = "32" },
|
||||||
{ identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" },
|
{ identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" },
|
||||||
{ identifier = "cp311-win32", version = "3.11.5", arch = "32" },
|
{ identifier = "cp311-win32", version = "3.11.6", arch = "32" },
|
||||||
{ identifier = "cp311-win_amd64", version = "3.11.5", arch = "64" },
|
{ identifier = "cp311-win_amd64", version = "3.11.6", arch = "64" },
|
||||||
{ identifier = "cp312-win32", version = "3.12.0-rc2", arch = "32" },
|
{ identifier = "cp312-win32", version = "3.12.0", arch = "32" },
|
||||||
{ identifier = "cp312-win_amd64", version = "3.12.0-rc2", arch = "64" },
|
{ identifier = "cp312-win_amd64", version = "3.12.0", arch = "64" },
|
||||||
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
|
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
|
||||||
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
|
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
|
||||||
{ identifier = "cp311-win_arm64", version = "3.11.5", arch = "ARM64" },
|
{ identifier = "cp311-win_arm64", version = "3.11.6", arch = "ARM64" },
|
||||||
{ identifier = "cp312-win_arm64", version = "3.12.0-rc2", arch = "ARM64" },
|
{ identifier = "cp312-win_arm64", version = "3.12.0", arch = "ARM64" },
|
||||||
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" },
|
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" },
|
||||||
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
|
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
|
||||||
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.12-win64.zip" },
|
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.13-win64.zip" },
|
||||||
{ identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.12-win64.zip" },
|
{ identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.13-win64.zip" },
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,707 @@
|
|||||||
|
{
|
||||||
|
"$id": "https://github.com/pypa/cibuildwheel/blob/main/cibuildwheel/resources/cibuildwheel.schema.json",
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"description": "cibuildwheel's settings.",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"archs": {
|
||||||
|
"description": "Change the architectures built on your machine by default.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_ARCHS"
|
||||||
|
},
|
||||||
|
"before-all": {
|
||||||
|
"description": "Execute a shell command on the build system before any wheels are built.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_BEFORE_ALL"
|
||||||
|
},
|
||||||
|
"before-build": {
|
||||||
|
"description": "Execute a shell command preparing each wheel's build.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_BEFORE_BUILD"
|
||||||
|
},
|
||||||
|
"before-test": {
|
||||||
|
"description": "Execute a shell command before testing each wheel.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_BEFORE_TEST"
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"default": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"description": "Choose the Python versions to build.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_BUILD"
|
||||||
|
},
|
||||||
|
"build-frontend": {
|
||||||
|
"default": "default",
|
||||||
|
"description": "Set the tool to use to build, either \"pip\" (default for now) or \"build\"",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"enum": [
|
||||||
|
"pip",
|
||||||
|
"build",
|
||||||
|
"default"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^pip; ?args:"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^build; ?args:"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"enum": [
|
||||||
|
"pip",
|
||||||
|
"build"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"args": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_BUILD_FRONTEND"
|
||||||
|
},
|
||||||
|
"build-verbosity": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": -3,
|
||||||
|
"maximum": 3,
|
||||||
|
"default": 0,
|
||||||
|
"description": "Increase/decrease the output of pip wheel.",
|
||||||
|
"title": "CIBW_BUILD_VERBOSITY"
|
||||||
|
},
|
||||||
|
"config-settings": {
|
||||||
|
"description": "Specify config-settings for the build backend.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"patternProperties": {
|
||||||
|
".+": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_CONFIG_SETTINGS"
|
||||||
|
},
|
||||||
|
"container-engine": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"enum": [
|
||||||
|
"docker",
|
||||||
|
"podman"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^docker; ?create_args:"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^podman; ?create_args:"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"enum": [
|
||||||
|
"docker",
|
||||||
|
"podman"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"create-args": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_CONTAINER_ENGINE"
|
||||||
|
},
|
||||||
|
"dependency-versions": {
|
||||||
|
"default": "pinned",
|
||||||
|
"description": "Specify how cibuildwheel controls the versions of the tools it uses",
|
||||||
|
"type": "string",
|
||||||
|
"title": "CIBW_DEPENDENCY_VERSIONS"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"description": "Set environment variables needed during the build.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"patternProperties": {
|
||||||
|
".+": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_ENVIRONMENT"
|
||||||
|
},
|
||||||
|
"environment-pass": {
|
||||||
|
"description": "Set environment variables on the host to pass-through to the container during the build.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_ENVIRONMENT_PASS"
|
||||||
|
},
|
||||||
|
"manylinux-aarch64-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_AARCH64_IMAGE"
|
||||||
|
},
|
||||||
|
"manylinux-i686-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_I686_IMAGE"
|
||||||
|
},
|
||||||
|
"manylinux-ppc64le-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_PPC64LE_IMAGE"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_aarch64-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_PYPY_AARCH64_IMAGE"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_i686-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_PYPY_I686_IMAGE"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_x86_64-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_PYPY_X86_64_IMAGE"
|
||||||
|
},
|
||||||
|
"manylinux-s390x-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_S390X_IMAGE"
|
||||||
|
},
|
||||||
|
"manylinux-x86_64-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MANYLINUX_X86_64_IMAGE"
|
||||||
|
},
|
||||||
|
"musllinux-aarch64-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MUSLLINUX_AARCH64_IMAGE"
|
||||||
|
},
|
||||||
|
"musllinux-i686-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MUSLLINUX_I686_IMAGE"
|
||||||
|
},
|
||||||
|
"musllinux-ppc64le-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MUSLLINUX_PPC64LE_IMAGE"
|
||||||
|
},
|
||||||
|
"musllinux-s390x-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MUSLLINUX_S390X_IMAGE"
|
||||||
|
},
|
||||||
|
"musllinux-x86_64-image": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specify alternative manylinux / musllinux container images",
|
||||||
|
"title": "CIBW_MUSLLINUX_X86_64_IMAGE"
|
||||||
|
},
|
||||||
|
"repair-wheel-command": {
|
||||||
|
"description": "Execute a shell command to repair each built wheel.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_REPAIR_WHEEL_COMMAND"
|
||||||
|
},
|
||||||
|
"skip": {
|
||||||
|
"description": "Choose the Python versions to skip.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_SKIP"
|
||||||
|
},
|
||||||
|
"test-command": {
|
||||||
|
"description": "Execute a shell command to test each built wheel.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_TEST_COMMAND"
|
||||||
|
},
|
||||||
|
"test-extras": {
|
||||||
|
"description": "Install your wheel for testing using `extras_require`",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_TEST_EXTRAS"
|
||||||
|
},
|
||||||
|
"test-requires": {
|
||||||
|
"description": "Install Python dependencies before running the tests",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_TEST_REQUIRES"
|
||||||
|
},
|
||||||
|
"test-skip": {
|
||||||
|
"description": "Skip running tests on some builds.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_TEST_SKIP"
|
||||||
|
},
|
||||||
|
"overrides": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "An overrides array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"select"
|
||||||
|
],
|
||||||
|
"minProperties": 2,
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"select": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"before-all": {
|
||||||
|
"$ref": "#/properties/before-all"
|
||||||
|
},
|
||||||
|
"before-build": {
|
||||||
|
"$ref": "#/properties/before-build"
|
||||||
|
},
|
||||||
|
"before-test": {
|
||||||
|
"$ref": "#/properties/before-test"
|
||||||
|
},
|
||||||
|
"build-frontend": {
|
||||||
|
"$ref": "#/properties/build-frontend"
|
||||||
|
},
|
||||||
|
"build-verbosity": {
|
||||||
|
"$ref": "#/properties/build-verbosity"
|
||||||
|
},
|
||||||
|
"config-settings": {
|
||||||
|
"$ref": "#/properties/config-settings"
|
||||||
|
},
|
||||||
|
"dependency-versions": {
|
||||||
|
"$ref": "#/properties/dependency-versions"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"$ref": "#/properties/environment"
|
||||||
|
},
|
||||||
|
"environment-pass": {
|
||||||
|
"$ref": "#/properties/environment-pass"
|
||||||
|
},
|
||||||
|
"manylinux-aarch64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-aarch64-image"
|
||||||
|
},
|
||||||
|
"manylinux-i686-image": {
|
||||||
|
"$ref": "#/properties/manylinux-i686-image"
|
||||||
|
},
|
||||||
|
"manylinux-ppc64le-image": {
|
||||||
|
"$ref": "#/properties/manylinux-ppc64le-image"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_aarch64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-pypy_aarch64-image"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_i686-image": {
|
||||||
|
"$ref": "#/properties/manylinux-pypy_i686-image"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_x86_64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-pypy_x86_64-image"
|
||||||
|
},
|
||||||
|
"manylinux-s390x-image": {
|
||||||
|
"$ref": "#/properties/manylinux-s390x-image"
|
||||||
|
},
|
||||||
|
"manylinux-x86_64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-x86_64-image"
|
||||||
|
},
|
||||||
|
"musllinux-aarch64-image": {
|
||||||
|
"$ref": "#/properties/musllinux-aarch64-image"
|
||||||
|
},
|
||||||
|
"musllinux-i686-image": {
|
||||||
|
"$ref": "#/properties/musllinux-i686-image"
|
||||||
|
},
|
||||||
|
"musllinux-ppc64le-image": {
|
||||||
|
"$ref": "#/properties/musllinux-ppc64le-image"
|
||||||
|
},
|
||||||
|
"musllinux-s390x-image": {
|
||||||
|
"$ref": "#/properties/musllinux-s390x-image"
|
||||||
|
},
|
||||||
|
"musllinux-x86_64-image": {
|
||||||
|
"$ref": "#/properties/musllinux-x86_64-image"
|
||||||
|
},
|
||||||
|
"repair-wheel-command": {
|
||||||
|
"$ref": "#/properties/repair-wheel-command"
|
||||||
|
},
|
||||||
|
"test-command": {
|
||||||
|
"$ref": "#/properties/test-command"
|
||||||
|
},
|
||||||
|
"test-extras": {
|
||||||
|
"$ref": "#/properties/test-extras"
|
||||||
|
},
|
||||||
|
"test-requires": {
|
||||||
|
"$ref": "#/properties/test-requires"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"linux": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"archs": {
|
||||||
|
"$ref": "#/properties/archs"
|
||||||
|
},
|
||||||
|
"before-all": {
|
||||||
|
"$ref": "#/properties/before-all"
|
||||||
|
},
|
||||||
|
"before-build": {
|
||||||
|
"$ref": "#/properties/before-build"
|
||||||
|
},
|
||||||
|
"before-test": {
|
||||||
|
"$ref": "#/properties/before-test"
|
||||||
|
},
|
||||||
|
"build-frontend": {
|
||||||
|
"$ref": "#/properties/build-frontend"
|
||||||
|
},
|
||||||
|
"build-verbosity": {
|
||||||
|
"$ref": "#/properties/build-verbosity"
|
||||||
|
},
|
||||||
|
"config-settings": {
|
||||||
|
"$ref": "#/properties/config-settings"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"$ref": "#/properties/environment"
|
||||||
|
},
|
||||||
|
"environment-pass": {
|
||||||
|
"$ref": "#/properties/environment-pass"
|
||||||
|
},
|
||||||
|
"manylinux-aarch64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-aarch64-image"
|
||||||
|
},
|
||||||
|
"manylinux-i686-image": {
|
||||||
|
"$ref": "#/properties/manylinux-i686-image"
|
||||||
|
},
|
||||||
|
"manylinux-ppc64le-image": {
|
||||||
|
"$ref": "#/properties/manylinux-ppc64le-image"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_aarch64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-pypy_aarch64-image"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_i686-image": {
|
||||||
|
"$ref": "#/properties/manylinux-pypy_i686-image"
|
||||||
|
},
|
||||||
|
"manylinux-pypy_x86_64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-pypy_x86_64-image"
|
||||||
|
},
|
||||||
|
"manylinux-s390x-image": {
|
||||||
|
"$ref": "#/properties/manylinux-s390x-image"
|
||||||
|
},
|
||||||
|
"manylinux-x86_64-image": {
|
||||||
|
"$ref": "#/properties/manylinux-x86_64-image"
|
||||||
|
},
|
||||||
|
"musllinux-aarch64-image": {
|
||||||
|
"$ref": "#/properties/musllinux-aarch64-image"
|
||||||
|
},
|
||||||
|
"musllinux-i686-image": {
|
||||||
|
"$ref": "#/properties/musllinux-i686-image"
|
||||||
|
},
|
||||||
|
"musllinux-ppc64le-image": {
|
||||||
|
"$ref": "#/properties/musllinux-ppc64le-image"
|
||||||
|
},
|
||||||
|
"musllinux-s390x-image": {
|
||||||
|
"$ref": "#/properties/musllinux-s390x-image"
|
||||||
|
},
|
||||||
|
"musllinux-x86_64-image": {
|
||||||
|
"$ref": "#/properties/musllinux-x86_64-image"
|
||||||
|
},
|
||||||
|
"repair-wheel-command": {
|
||||||
|
"description": "Execute a shell command to repair each built wheel.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_REPAIR_WHEEL_COMMAND",
|
||||||
|
"default": "auditwheel repair -w {dest_dir} {wheel}"
|
||||||
|
},
|
||||||
|
"test-command": {
|
||||||
|
"$ref": "#/properties/test-command"
|
||||||
|
},
|
||||||
|
"test-extras": {
|
||||||
|
"$ref": "#/properties/test-extras"
|
||||||
|
},
|
||||||
|
"test-requires": {
|
||||||
|
"$ref": "#/properties/test-requires"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"windows": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"archs": {
|
||||||
|
"$ref": "#/properties/archs"
|
||||||
|
},
|
||||||
|
"before-all": {
|
||||||
|
"$ref": "#/properties/before-all"
|
||||||
|
},
|
||||||
|
"before-build": {
|
||||||
|
"$ref": "#/properties/before-build"
|
||||||
|
},
|
||||||
|
"before-test": {
|
||||||
|
"$ref": "#/properties/before-test"
|
||||||
|
},
|
||||||
|
"build-frontend": {
|
||||||
|
"$ref": "#/properties/build-frontend"
|
||||||
|
},
|
||||||
|
"build-verbosity": {
|
||||||
|
"$ref": "#/properties/build-verbosity"
|
||||||
|
},
|
||||||
|
"config-settings": {
|
||||||
|
"$ref": "#/properties/config-settings"
|
||||||
|
},
|
||||||
|
"dependency-versions": {
|
||||||
|
"$ref": "#/properties/dependency-versions"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"$ref": "#/properties/environment"
|
||||||
|
},
|
||||||
|
"repair-wheel-command": {
|
||||||
|
"$ref": "#/properties/repair-wheel-command"
|
||||||
|
},
|
||||||
|
"test-command": {
|
||||||
|
"$ref": "#/properties/test-command"
|
||||||
|
},
|
||||||
|
"test-extras": {
|
||||||
|
"$ref": "#/properties/test-extras"
|
||||||
|
},
|
||||||
|
"test-requires": {
|
||||||
|
"$ref": "#/properties/test-requires"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"macos": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"archs": {
|
||||||
|
"$ref": "#/properties/archs"
|
||||||
|
},
|
||||||
|
"before-all": {
|
||||||
|
"$ref": "#/properties/before-all"
|
||||||
|
},
|
||||||
|
"before-build": {
|
||||||
|
"$ref": "#/properties/before-build"
|
||||||
|
},
|
||||||
|
"before-test": {
|
||||||
|
"$ref": "#/properties/before-test"
|
||||||
|
},
|
||||||
|
"build-frontend": {
|
||||||
|
"$ref": "#/properties/build-frontend"
|
||||||
|
},
|
||||||
|
"build-verbosity": {
|
||||||
|
"$ref": "#/properties/build-verbosity"
|
||||||
|
},
|
||||||
|
"config-settings": {
|
||||||
|
"$ref": "#/properties/config-settings"
|
||||||
|
},
|
||||||
|
"dependency-versions": {
|
||||||
|
"$ref": "#/properties/dependency-versions"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"$ref": "#/properties/environment"
|
||||||
|
},
|
||||||
|
"repair-wheel-command": {
|
||||||
|
"description": "Execute a shell command to repair each built wheel.",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CIBW_REPAIR_WHEEL_COMMAND",
|
||||||
|
"default": "delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}"
|
||||||
|
},
|
||||||
|
"test-command": {
|
||||||
|
"$ref": "#/properties/test-command"
|
||||||
|
},
|
||||||
|
"test-extras": {
|
||||||
|
"$ref": "#/properties/test-extras"
|
||||||
|
},
|
||||||
|
"test-requires": {
|
||||||
|
"$ref": "#/properties/test-requires"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,9 +10,9 @@ distlib==0.3.7
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.12.4
|
filelock==3.12.4
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.8.0
|
typing-extensions==4.8.0
|
||||||
# via delocate
|
# via delocate
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ distlib==0.3.7
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.12.4
|
filelock==3.12.4
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.8.0
|
typing-extensions==4.8.0
|
||||||
# via delocate
|
# via delocate
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ distlib==0.3.7
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.12.4
|
filelock==3.12.4
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.8.0
|
typing-extensions==4.8.0
|
||||||
# via delocate
|
# via delocate
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ filelock==3.12.2
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
importlib-metadata==6.7.0
|
importlib-metadata==6.7.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.7.1
|
typing-extensions==4.7.1
|
||||||
# via
|
# via
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ distlib==0.3.7
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.12.4
|
filelock==3.12.4
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.8.0
|
typing-extensions==4.8.0
|
||||||
# via delocate
|
# via delocate
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ distlib==0.3.7
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.12.4
|
filelock==3.12.4
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.8.0
|
typing-extensions==4.8.0
|
||||||
# via delocate
|
# via delocate
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ distlib==0.3.7
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.12.4
|
filelock==3.12.4
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.8.0
|
typing-extensions==4.8.0
|
||||||
# via delocate
|
# via delocate
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ config-settings = {}
|
|||||||
dependency-versions = "pinned"
|
dependency-versions = "pinned"
|
||||||
environment = {}
|
environment = {}
|
||||||
environment-pass = []
|
environment-pass = []
|
||||||
build-verbosity = ""
|
build-verbosity = 0
|
||||||
|
|
||||||
before-all = ""
|
before-all = ""
|
||||||
before-build = ""
|
before-build = ""
|
||||||
|
|||||||
@@ -1,54 +1,54 @@
|
|||||||
[x86_64]
|
[x86_64]
|
||||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2023-09-12-f07b683
|
manylinux1 = quay.io/pypa/manylinux1_x86_64:2023-10-01-4095a57
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
|
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:2023-09-17-ae90a16
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-10-03-72cdc42
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2023-09-17-ae90a16
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2023-10-03-72cdc42
|
||||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2023-09-17-ae90a16
|
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2023-10-03-72cdc42
|
||||||
|
|
||||||
[i686]
|
[i686]
|
||||||
manylinux1 = quay.io/pypa/manylinux1_i686:2023-09-12-f07b683
|
manylinux1 = quay.io/pypa/manylinux1_i686:2023-10-01-4095a57
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2023-09-17-ae90a16
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2023-10-03-72cdc42
|
||||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2023-09-17-ae90a16
|
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2023-10-03-72cdc42
|
||||||
|
|
||||||
[pypy_x86_64]
|
[pypy_x86_64]
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
|
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:2023-09-17-ae90a16
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-10-03-72cdc42
|
||||||
|
|
||||||
[pypy_i686]
|
[pypy_i686]
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
||||||
|
|
||||||
[aarch64]
|
[aarch64]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-09-17-ae90a16
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-10-03-72cdc42
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2023-09-17-ae90a16
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2023-10-03-72cdc42
|
||||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2023-09-17-ae90a16
|
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2023-10-03-72cdc42
|
||||||
|
|
||||||
[ppc64le]
|
[ppc64le]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2023-09-17-ae90a16
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2023-10-03-72cdc42
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2023-09-17-ae90a16
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2023-10-03-72cdc42
|
||||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2023-09-17-ae90a16
|
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2023-10-03-72cdc42
|
||||||
|
|
||||||
[s390x]
|
[s390x]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2023-09-17-ae90a16
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2023-10-03-72cdc42
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2023-09-17-ae90a16
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2023-10-03-72cdc42
|
||||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2023-09-17-ae90a16
|
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2023-10-03-72cdc42
|
||||||
|
|
||||||
[pypy_aarch64]
|
[pypy_aarch64]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-09-17-ae90a16
|
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-10-03-72cdc42
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-09-17-ae90a16
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-10-03-72cdc42
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
DIR = Path(__file__).parent.resolve()
|
||||||
|
|
||||||
|
|
||||||
|
def get_schema(tool_name: str = "cibuildwheel") -> dict[str, Any]:
|
||||||
|
"Get the stored complete schema for cibuildwheel settings."
|
||||||
|
assert tool_name == "cibuildwheel", "Only cibuildwheel is supported."
|
||||||
|
|
||||||
|
with DIR.joinpath("resources/cibuildwheel.schema.json").open(encoding="utf-8") as f:
|
||||||
|
return json.load(f) # type: ignore[no-any-return]
|
||||||
@@ -731,23 +731,26 @@ def parse_key_value_string(
|
|||||||
|
|
||||||
all_field_names = [*positional_arg_names, *kw_arg_names]
|
all_field_names = [*positional_arg_names, *kw_arg_names]
|
||||||
|
|
||||||
shlexer = shlex.shlex(key_value_string, posix=True, punctuation_chars=";:")
|
shlexer = shlex.shlex(key_value_string, posix=True, punctuation_chars=";")
|
||||||
shlexer.commenters = ""
|
shlexer.commenters = ""
|
||||||
|
shlexer.whitespace_split = True
|
||||||
parts = list(shlexer)
|
parts = list(shlexer)
|
||||||
# parts now looks like
|
# parts now looks like
|
||||||
# ['docker', ';', 'create_args',':', '--some-option=value', 'another-option']
|
# ['docker', ';', 'create_args:', '--some-option=value', 'another-option']
|
||||||
|
|
||||||
# split by semicolon
|
# split by semicolon
|
||||||
fields = [list(group) for k, group in itertools.groupby(parts, lambda x: x == ";") if not k]
|
fields = [list(group) for k, group in itertools.groupby(parts, lambda x: x == ";") if not k]
|
||||||
|
|
||||||
result: dict[str, list[str]] = defaultdict(list)
|
result: dict[str, list[str]] = defaultdict(list)
|
||||||
for field_i, field in enumerate(fields):
|
for field_i, field in enumerate(fields):
|
||||||
if len(field) > 1 and field[1] == ":":
|
# check to see if the option name is specified
|
||||||
field_name = field[0]
|
field_name, sep, first_value = field[0].partition(":")
|
||||||
values = field[2:]
|
if sep:
|
||||||
if field_name not in all_field_names:
|
if field_name not in all_field_names:
|
||||||
msg = f"Failed to parse {key_value_string!r}. Unknown field name {field_name!r}"
|
msg = f"Failed to parse {key_value_string!r}. Unknown field name {field_name!r}"
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
|
values = ([first_value] if first_value else []) + field[1:]
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
field_name = positional_arg_names[field_i]
|
field_name = positional_arg_names[field_i]
|
||||||
|
|||||||
+20
-2
@@ -4,6 +4,24 @@ title: Changelog
|
|||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
### v2.16.2
|
||||||
|
|
||||||
|
_3 October 2023_
|
||||||
|
|
||||||
|
- 🛠 Updates CPython 3.12 version to 3.12.0, final release (#1635)
|
||||||
|
- ✨ Adds a debug option [`CIBW_DEBUG_KEEP_CONTAINER`](https://cibuildwheel.readthedocs.io/en/stable/options/#cibw_debug_keep_container) to stop cibuildwheel deleting build containers after the build finishes. (#1620)
|
||||||
|
- 📚 Adds support for `[tool.cibuildwheel]` checking by adding a schema compatible with the [validate-pyproject](https://github.com/abravalheri/validate-pyproject/) tool (#1622, #1628, #1629)
|
||||||
|
- 🐛 Fix parsing of `CIBW_CONTAINER_ENGINE` and `CIBW_BUILD_FRONTEND` options to not break arguments on `:` characters (#1621)
|
||||||
|
- 🐛 Fix the evaluation order of `CIBW_ENVIRONMENT` and `CIBW_ENVIRONMENT_PASS` so that `CIBW_ENVIRONMENT` assignments can reference environment variables passed through from the host machine. (#1617)
|
||||||
|
- 🛠 Supports manylinux images' deferred installation of interpreters through the `manylinux-interpreters` tool (#1630)
|
||||||
|
|
||||||
|
### v2.16.1
|
||||||
|
|
||||||
|
_26 September 2023_
|
||||||
|
|
||||||
|
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0rc3 (#1625)
|
||||||
|
- 🛠 Only calls `linux32` in containers when necessary (#1599)
|
||||||
|
|
||||||
### v2.16.0
|
### v2.16.0
|
||||||
|
|
||||||
_18 September 2023_
|
_18 September 2023_
|
||||||
@@ -11,7 +29,7 @@ _18 September 2023_
|
|||||||
- ✨ Add the ability to pass additional flags to a build frontend through the [CIBW_BUILD_FRONTEND](https://cibuildwheel.readthedocs.io/en/stable/options/#build-frontend) option (#1588).
|
- ✨ Add the ability to pass additional flags to a build frontend through the [CIBW_BUILD_FRONTEND](https://cibuildwheel.readthedocs.io/en/stable/options/#build-frontend) option (#1588).
|
||||||
- ✨ The environment variable SOURCE_DATE_EPOCH is now automatically passed through to container Linux builds (useful for [reproducible builds](https://reproducible-builds.org/docs/source-date-epoch/)!) (#1589)
|
- ✨ The environment variable SOURCE_DATE_EPOCH is now automatically passed through to container Linux builds (useful for [reproducible builds](https://reproducible-builds.org/docs/source-date-epoch/)!) (#1589)
|
||||||
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0rc2 (#1604)
|
- 🛠 Updates the prerelease CPython 3.12 version to 3.12.0rc2 (#1604)
|
||||||
- 🐛 Fix `requires_python` auto-detection from setup.py when the call to `setup()` is within an `if __name__ == "__main__" block (#1613)
|
- 🐛 Fix `requires_python` auto-detection from setup.py when the call to `setup()` is within an `if __name__ == "__main__"` block (#1613)
|
||||||
- 🐛 Fix a bug that prevented building Linux wheels in Docker on a Windows host (#1573)
|
- 🐛 Fix a bug that prevented building Linux wheels in Docker on a Windows host (#1573)
|
||||||
- 🐛 `--only` can now select prerelease-pythons (#1564)
|
- 🐛 `--only` can now select prerelease-pythons (#1564)
|
||||||
- 📚 Docs & examples updates (#1582, #1593, #1598, #1615)
|
- 📚 Docs & examples updates (#1582, #1593, #1598, #1615)
|
||||||
@@ -281,7 +299,7 @@ _22 October 2021_
|
|||||||
|
|
||||||
- 🛠 Added support for building PyPy wheels on macOS 11 CI runners. (#875)
|
- 🛠 Added support for building PyPy wheels on macOS 11 CI runners. (#875)
|
||||||
|
|
||||||
- 🛠 Setting an empty string for the [`CIBW_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
|
- 🛠 Setting an empty string for the [`CIBW_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matrices. (#829)
|
||||||
|
|
||||||
- 🛠 Support for TOML 1.0 when reading config files, via the `tomli` package. (#876)
|
- 🛠 Support for TOML 1.0 when reading config files, via the `tomli` package. (#876)
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -159,7 +159,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:
|
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
uses: pypa/cibuildwheel@v2.16.0
|
uses: pypa/cibuildwheel@v2.16.2
|
||||||
```
|
```
|
||||||
|
|
||||||
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.
|
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.
|
||||||
@@ -181,7 +181,7 @@ The second option, and the only one that supports other CI systems, is using a `
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# requirements-cibw.txt
|
# requirements-cibw.txt
|
||||||
cibuildwheel==2.16.0
|
cibuildwheel==2.16.2
|
||||||
```
|
```
|
||||||
|
|
||||||
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:
|
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:
|
||||||
@@ -325,7 +325,7 @@ Solutions to this vary, but the simplest is to use pipx:
|
|||||||
# most runners have pipx preinstalled, but in case you don't
|
# most runners have pipx preinstalled, but in case you don't
|
||||||
python3 -m pip install pipx
|
python3 -m pip install pipx
|
||||||
|
|
||||||
pipx run cibuildwheel==2.16.0 --output-dir wheelhouse
|
pipx run cibuildwheel==2.16.2 --output-dir wheelhouse
|
||||||
pipx run twine upload wheelhouse/*.whl
|
pipx run twine upload wheelhouse/*.whl
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+17
-5
@@ -917,9 +917,7 @@ Platform-specific environment variables are also available:<br/>
|
|||||||
CIBW_REPAIR_WHEEL_COMMAND: >
|
CIBW_REPAIR_WHEEL_COMMAND: >
|
||||||
python scripts/repair_wheel.py -w {dest_dir} {wheel} &&
|
python scripts/repair_wheel.py -w {dest_dir} {wheel} &&
|
||||||
python scripts/check_repaired_wheel.py -w {dest_dir} {wheel}
|
python scripts/check_repaired_wheel.py -w {dest_dir} {wheel}
|
||||||
```
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Use abi3audit to catch issues with Limited API wheels
|
# Use abi3audit to catch issues with Limited API wheels
|
||||||
CIBW_REPAIR_WHEEL_COMMAND_LINUX: >
|
CIBW_REPAIR_WHEEL_COMMAND_LINUX: >
|
||||||
auditwheel repair -w {dest_dir} {wheel} &&
|
auditwheel repair -w {dest_dir} {wheel} &&
|
||||||
@@ -953,9 +951,7 @@ Platform-specific environment variables are also available:<br/>
|
|||||||
'python scripts/repair_wheel.py -w {dest_dir} {wheel}',
|
'python scripts/repair_wheel.py -w {dest_dir} {wheel}',
|
||||||
'python scripts/check_repaired_wheel.py -w {dest_dir} {wheel}',
|
'python scripts/check_repaired_wheel.py -w {dest_dir} {wheel}',
|
||||||
]
|
]
|
||||||
```
|
|
||||||
|
|
||||||
```toml
|
|
||||||
# Use abi3audit to catch issues with Limited API wheels
|
# Use abi3audit to catch issues with Limited API wheels
|
||||||
[tool.cibuildwheel.linux]
|
[tool.cibuildwheel.linux]
|
||||||
repair-wheel-command = [
|
repair-wheel-command = [
|
||||||
@@ -1426,7 +1422,23 @@ This option is not supported in the overrides section in `pyproject.toml`.
|
|||||||
test-skip = "*-macosx_arm64 *-macosx_universal2:arm64"
|
test-skip = "*-macosx_arm64 *-macosx_universal2:arm64"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Other
|
## Debugging
|
||||||
|
|
||||||
|
### `CIBW_DEBUG_KEEP_CONTAINER`
|
||||||
|
|
||||||
|
Enable this flag to keep the container around for inspection after a build. This
|
||||||
|
option is provided for debugging purposes only.
|
||||||
|
|
||||||
|
Default: Off (0).
|
||||||
|
|
||||||
|
!!! caution
|
||||||
|
This option can only be set as environment variable on the host machine
|
||||||
|
|
||||||
|
#### Examples
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export CIBW_DEBUG_KEEP_CONTAINER=TRUE
|
||||||
|
```
|
||||||
|
|
||||||
### `CIBW_BUILD_VERBOSITY` {: #build-verbosity}
|
### `CIBW_BUILD_VERBOSITY` {: #build-verbosity}
|
||||||
> Increase/decrease the output of pip wheel
|
> Increase/decrease the output of pip wheel
|
||||||
|
|||||||
+2
-2
@@ -184,7 +184,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: pipx run cibuildwheel==2.16.0
|
run: pipx run cibuildwheel==2.16.2
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -219,7 +219,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
|||||||
- uses: actions/setup-python@v3
|
- uses: actions/setup-python@v3
|
||||||
|
|
||||||
- name: Install cibuildwheel
|
- name: Install cibuildwheel
|
||||||
run: python -m pip install cibuildwheel==2.16.0
|
run: python -m pip install cibuildwheel==2.16.2
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: python -m cibuildwheel --output-dir wheelhouse
|
run: python -m cibuildwheel --output-dir wheelhouse
|
||||||
|
|||||||
+13
-13
@@ -18,7 +18,7 @@ title: Working examples
|
|||||||
| [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. |
|
| [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. |
|
||||||
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
||||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
|
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
|
||||||
| [MemRay][] | ![github icon][] | ![linux icon][] | Memray is a memory profiler for Python |
|
| [MemRay][] | ![github icon][] | ![linux icon][] | The endgame Python memory profiler |
|
||||||
| [uvloop][] | ![github icon][] | ![apple icon][] ![linux icon][] | Ultra fast asyncio event loop. |
|
| [uvloop][] | ![github icon][] | ![apple icon][] ![linux icon][] | Ultra fast asyncio event loop. |
|
||||||
| [psutil][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Cross-platform lib for process and system monitoring in Python |
|
| [psutil][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Cross-platform lib for process and system monitoring in Python |
|
||||||
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
||||||
@@ -31,8 +31,8 @@ title: Working examples
|
|||||||
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
||||||
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
||||||
| [PyOxidizer][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A modern Python application packaging and distribution tool |
|
| [PyOxidizer][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A modern Python application packaging and distribution tool |
|
||||||
| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. |
|
|
||||||
| [cvxpy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A Python-embedded modeling language for convex optimization problems. |
|
| [cvxpy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A Python-embedded modeling language for convex optimization problems. |
|
||||||
|
| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. |
|
||||||
| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python |
|
| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python |
|
||||||
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
||||||
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
|
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
|
||||||
@@ -50,20 +50,20 @@ title: Working examples
|
|||||||
| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more |
|
| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more |
|
||||||
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
|
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
|
||||||
| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. |
|
| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. |
|
||||||
| [Wrapt][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python module for decorators, wrappers and monkey patching. |
|
|
||||||
| [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. |
|
| [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. |
|
||||||
|
| [Wrapt][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python module for decorators, wrappers and monkey patching. |
|
||||||
| [pikepdf][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by QPDF |
|
| [pikepdf][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by QPDF |
|
||||||
| [envd][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | 🏕️ Reproducible development environment |
|
| [envd][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | 🏕️ Reproducible development environment |
|
||||||
| [SimpleJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | simplejson is a simple, fast, extensible JSON encoder/decoder for Python |
|
|
||||||
| [OpenColorIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A color management framework for visual effects and animation. |
|
| [OpenColorIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A color management framework for visual effects and animation. |
|
||||||
|
| [SimpleJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | simplejson is a simple, fast, extensible JSON encoder/decoder for Python |
|
||||||
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
||||||
| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. |
|
| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. |
|
||||||
| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
|
| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
|
||||||
| [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data |
|
| [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data |
|
||||||
| [Psycopg 3][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A modern implementation of a PostgreSQL adapter for Python |
|
| [Psycopg 3][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A modern implementation of a PostgreSQL adapter for Python |
|
||||||
| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. |
|
| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. |
|
||||||
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
|
||||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||||
|
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
||||||
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||||
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
|
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
|
||||||
| [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A high-performance ML model serving framework, offers dynamic batching and CPU/GPU pipelines to fully exploit your compute machine |
|
| [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A high-performance ML model serving framework, offers dynamic batching and CPU/GPU pipelines to fully exploit your compute machine |
|
||||||
@@ -98,16 +98,16 @@ title: Working examples
|
|||||||
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
||||||
| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. |
|
| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. |
|
||||||
| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
|
| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
|
||||||
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
|
|
||||||
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
||||||
|
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
|
||||||
| [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions |
|
| [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions |
|
||||||
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
||||||
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
| [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 |
|
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
|
||||||
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
|
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
|
||||||
| [ril][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A python binding to Rust Imaging library using maturin and Pyo3, utilizes Github Action cache to improve speed. Builds abi3 wheels. |
|
| [ril][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A python binding to Rust Imaging library using maturin and Pyo3, utilizes Github Action cache to improve speed. Builds abi3 wheels. |
|
||||||
| [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. |
|
|
||||||
| [SiPM][] | ![github icon][] | ![apple icon][] ![linux icon][] | High performance library for SiPM detectors simulation using C++17, OpenMP and AVX2 intrinsics. |
|
| [SiPM][] | ![github icon][] | ![apple icon][] ![linux icon][] | High performance library for SiPM detectors simulation using C++17, OpenMP and AVX2 intrinsics. |
|
||||||
|
| [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. |
|
||||||
| [CorrectionLib][] | ![github icon][] | ![apple icon][] ![linux icon][] | Structured JSON powered correction library for HEP, designed for the CMS experiment at CERN. |
|
| [CorrectionLib][] | ![github icon][] | ![apple icon][] ![linux icon][] | Structured JSON powered correction library for HEP, designed for the CMS experiment at CERN. |
|
||||||
| [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies |
|
| [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies |
|
||||||
| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. |
|
| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. |
|
||||||
@@ -137,8 +137,8 @@ title: Working examples
|
|||||||
[scikit-image]: https://github.com/scikit-image/scikit-image
|
[scikit-image]: https://github.com/scikit-image/scikit-image
|
||||||
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
||||||
[PyOxidizer]: https://github.com/indygreg/PyOxidizer
|
[PyOxidizer]: https://github.com/indygreg/PyOxidizer
|
||||||
[websockets]: https://github.com/aaugustin/websockets
|
|
||||||
[cvxpy]: https://github.com/cvxpy/cvxpy
|
[cvxpy]: https://github.com/cvxpy/cvxpy
|
||||||
|
[websockets]: https://github.com/aaugustin/websockets
|
||||||
[River]: https://github.com/online-ml/river
|
[River]: https://github.com/online-ml/river
|
||||||
[UltraJSON]: https://github.com/ultrajson/ultrajson
|
[UltraJSON]: https://github.com/ultrajson/ultrajson
|
||||||
[OpenSpiel]: https://github.com/deepmind/open_spiel
|
[OpenSpiel]: https://github.com/deepmind/open_spiel
|
||||||
@@ -156,20 +156,20 @@ title: Working examples
|
|||||||
[numexpr]: https://github.com/pydata/numexpr
|
[numexpr]: https://github.com/pydata/numexpr
|
||||||
[PyAV]: https://github.com/PyAV-Org/PyAV
|
[PyAV]: https://github.com/PyAV-Org/PyAV
|
||||||
[h5py]: https://github.com/h5py/h5py
|
[h5py]: https://github.com/h5py/h5py
|
||||||
[Wrapt]: https://github.com/GrahamDumpleton/wrapt
|
|
||||||
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
|
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
|
||||||
|
[Wrapt]: https://github.com/GrahamDumpleton/wrapt
|
||||||
[pikepdf]: https://github.com/pikepdf/pikepdf
|
[pikepdf]: https://github.com/pikepdf/pikepdf
|
||||||
[envd]: https://github.com/tensorchord/envd
|
[envd]: https://github.com/tensorchord/envd
|
||||||
[SimpleJSON]: https://github.com/simplejson/simplejson
|
|
||||||
[OpenColorIO]: https://github.com/AcademySoftwareFoundation/OpenColorIO
|
[OpenColorIO]: https://github.com/AcademySoftwareFoundation/OpenColorIO
|
||||||
|
[SimpleJSON]: https://github.com/simplejson/simplejson
|
||||||
[aioquic]: https://github.com/aiortc/aioquic
|
[aioquic]: https://github.com/aiortc/aioquic
|
||||||
[ruptures]: https://github.com/deepcharles/ruptures
|
[ruptures]: https://github.com/deepcharles/ruptures
|
||||||
[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
|
[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
|
||||||
[PyTables]: https://github.com/PyTables/PyTables
|
[PyTables]: https://github.com/PyTables/PyTables
|
||||||
[Psycopg 3]: https://github.com/psycopg/psycopg
|
[Psycopg 3]: https://github.com/psycopg/psycopg
|
||||||
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
||||||
[google neuroglancer]: https://github.com/google/neuroglancer
|
|
||||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||||
|
[google neuroglancer]: https://github.com/google/neuroglancer
|
||||||
[AutoPy]: https://github.com/autopilot-rs/autopy
|
[AutoPy]: https://github.com/autopilot-rs/autopy
|
||||||
[H3-py]: https://github.com/uber/h3-py
|
[H3-py]: https://github.com/uber/h3-py
|
||||||
[mosec]: https://github.com/mosecorg/mosec
|
[mosec]: https://github.com/mosecorg/mosec
|
||||||
@@ -204,16 +204,16 @@ title: Working examples
|
|||||||
[power-grid-model]: https://github.com/alliander-opensource/power-grid-model
|
[power-grid-model]: https://github.com/alliander-opensource/power-grid-model
|
||||||
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
|
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
|
||||||
[polaroid]: https://github.com/daggy1234/polaroid
|
[polaroid]: https://github.com/daggy1234/polaroid
|
||||||
[etebase-py]: https://github.com/etesync/etebase-py
|
|
||||||
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
||||||
|
[etebase-py]: https://github.com/etesync/etebase-py
|
||||||
[cf-units]: https://github.com/SciTools/cf-units
|
[cf-units]: https://github.com/SciTools/cf-units
|
||||||
[clang-format]: https://github.com/ssciwr/clang-format-wheel
|
[clang-format]: https://github.com/ssciwr/clang-format-wheel
|
||||||
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
||||||
[numpythia]: https://github.com/scikit-hep/numpythia
|
[numpythia]: https://github.com/scikit-hep/numpythia
|
||||||
[pyjet]: https://github.com/scikit-hep/pyjet
|
[pyjet]: https://github.com/scikit-hep/pyjet
|
||||||
[ril]: https://github.com/Cryptex-github/ril-py
|
[ril]: https://github.com/Cryptex-github/ril-py
|
||||||
[GSD]: https://github.com/glotzerlab/gsd
|
|
||||||
[SiPM]: https://github.com/EdoPro98/SimSiPM
|
[SiPM]: https://github.com/EdoPro98/SimSiPM
|
||||||
|
[GSD]: https://github.com/glotzerlab/gsd
|
||||||
[CorrectionLib]: https://github.com/cms-nanoAOD/correctionlib
|
[CorrectionLib]: https://github.com/cms-nanoAOD/correctionlib
|
||||||
[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext
|
[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext
|
||||||
[xmlstarlet]: https://github.com/dimitern/xmlstarlet
|
[xmlstarlet]: https://github.com/dimitern/xmlstarlet
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ stack: python 3.7
|
|||||||
init:
|
init:
|
||||||
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
|
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
|
||||||
|
|
||||||
install: python -m pip install cibuildwheel==2.16.0
|
install: python -m pip install cibuildwheel==2.16.2
|
||||||
|
|
||||||
build_script: python -m cibuildwheel --output-dir wheelhouse
|
build_script: python -m cibuildwheel --output-dir wheelhouse
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
pip3 install cibuildwheel==2.16.0
|
pip3 install cibuildwheel==2.16.2
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
python3 -m pip install cibuildwheel==2.16.0
|
python3 -m pip install cibuildwheel==2.16.2
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
@@ -34,7 +34,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install cibuildwheel==2.16.0
|
pip install cibuildwheel==2.16.2
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the Linux wheels.
|
name: Build the Linux wheels.
|
||||||
command: |
|
command: |
|
||||||
pip3 install --user cibuildwheel==2.16.0
|
pip3 install --user cibuildwheel==2.16.2
|
||||||
cibuildwheel --output-dir wheelhouse
|
cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the Linux aarch64 wheels.
|
name: Build the Linux aarch64 wheels.
|
||||||
command: |
|
command: |
|
||||||
python3 -m pip install --user cibuildwheel==2.16.0
|
python3 -m pip install --user cibuildwheel==2.16.2
|
||||||
python3 -m cibuildwheel --output-dir wheelhouse
|
python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
@@ -42,7 +42,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the OS X wheels.
|
name: Build the OS X wheels.
|
||||||
command: |
|
command: |
|
||||||
pip3 install cibuildwheel==2.16.0
|
pip3 install cibuildwheel==2.16.2
|
||||||
cibuildwheel --output-dir wheelhouse
|
cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||||
install_cibuildwheel_script:
|
install_cibuildwheel_script:
|
||||||
- python -m pip install cibuildwheel==2.16.0
|
- python -m pip install cibuildwheel==2.16.2
|
||||||
run_cibuildwheel_script:
|
run_cibuildwheel_script:
|
||||||
- cibuildwheel
|
- cibuildwheel
|
||||||
wheels_artifacts:
|
wheels_artifacts:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||||
install_cibuildwheel_script:
|
install_cibuildwheel_script:
|
||||||
- python -m pip install cibuildwheel==2.16.0
|
- python -m pip install cibuildwheel==2.16.2
|
||||||
run_cibuildwheel_script:
|
run_cibuildwheel_script:
|
||||||
- cibuildwheel
|
- cibuildwheel
|
||||||
wheels_artifacts:
|
wheels_artifacts:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.16.0
|
uses: pypa/cibuildwheel@v2.16.2
|
||||||
env:
|
env:
|
||||||
CIBW_ARCHS_MACOS: x86_64 arm64
|
CIBW_ARCHS_MACOS: x86_64 arm64
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.16.0
|
uses: pypa/cibuildwheel@v2.16.2
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.16.0
|
uses: pypa/cibuildwheel@v2.16.2
|
||||||
# env:
|
# env:
|
||||||
# CIBW_SOME_OPTION: value
|
# CIBW_SOME_OPTION: value
|
||||||
# ...
|
# ...
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
platforms: all
|
platforms: all
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.16.0
|
uses: pypa/cibuildwheel@v2.16.2
|
||||||
env:
|
env:
|
||||||
# configure cibuildwheel to build native archs ('auto'), and some
|
# configure cibuildwheel to build native archs ('auto'), and some
|
||||||
# emulated ones
|
# emulated ones
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ linux:
|
|||||||
DOCKER_TLS_CERTDIR: ""
|
DOCKER_TLS_CERTDIR: ""
|
||||||
script:
|
script:
|
||||||
- curl -sSL https://get.docker.com/ | sh
|
- curl -sSL https://get.docker.com/ | sh
|
||||||
- python -m pip install cibuildwheel==2.16.0
|
- python -m pip install cibuildwheel==2.16.2
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
@@ -23,7 +23,7 @@ windows:
|
|||||||
before_script:
|
before_script:
|
||||||
- choco install python -y --version 3.8.6
|
- choco install python -y --version 3.8.6
|
||||||
- choco install git.install -y
|
- choco install git.install -y
|
||||||
- py -m pip install cibuildwheel==2.16.0
|
- py -m pip install cibuildwheel==2.16.2
|
||||||
script:
|
script:
|
||||||
- py -m cibuildwheel --output-dir wheelhouse --platform windows
|
- py -m cibuildwheel --output-dir wheelhouse --platform windows
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ linux:
|
|||||||
- curl -sSL https://get.docker.com/ | sh
|
- curl -sSL https://get.docker.com/ | sh
|
||||||
# Warning: This is extremely slow, be careful with how many wheels you build
|
# Warning: This is extremely slow, be careful with how many wheels you build
|
||||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||||
- python -m pip install cibuildwheel==2.16.0
|
- python -m pip install cibuildwheel==2.16.2
|
||||||
# Assuming your CI runner's default architecture is x86_64...
|
# Assuming your CI runner's default architecture is x86_64...
|
||||||
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
|
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- python3 -m pip install cibuildwheel==2.16.0
|
- python3 -m pip install cibuildwheel==2.16.2
|
||||||
|
|
||||||
script:
|
script:
|
||||||
# build the wheels, put them into './dist'
|
# build the wheels, put them into './dist'
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- python3 -m pip install cibuildwheel==2.16.0
|
- python3 -m pip install cibuildwheel==2.16.2
|
||||||
|
|
||||||
script:
|
script:
|
||||||
# build the wheels, put them into './wheelhouse'
|
# build the wheels, put them into './wheelhouse'
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ jobs:
|
|||||||
- stage: deploy
|
- stage: deploy
|
||||||
name: Build and deploy Linux wheels
|
name: Build and deploy Linux wheels
|
||||||
services: docker
|
services: docker
|
||||||
install: python3 -m pip install cibuildwheel==2.16.0 twine
|
install: python3 -m pip install cibuildwheel==2.16.2 twine
|
||||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||||
# Deploy on windows
|
# Deploy on windows
|
||||||
@@ -62,7 +62,7 @@ jobs:
|
|||||||
name: Build and deploy Windows wheels
|
name: Build and deploy Windows wheels
|
||||||
os: windows
|
os: windows
|
||||||
language: shell
|
language: shell
|
||||||
install: python3 -m pip install cibuildwheel==2.16.0 twine
|
install: python3 -m pip install cibuildwheel==2.16.2 twine
|
||||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,14 @@ def update_proj(session: nox.Session) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@nox.session(reuse_venv=True)
|
||||||
|
def generate_schema(session: nox.Session) -> None:
|
||||||
|
session.install("pyyaml")
|
||||||
|
output = session.run("python", "bin/generate_schema.py", silent=True)
|
||||||
|
assert isinstance(output, str)
|
||||||
|
DIR.joinpath("cibuildwheel/resources/cibuildwheel.schema.json").write_text(output)
|
||||||
|
|
||||||
|
|
||||||
@nox.session(python="3.9")
|
@nox.session(python="3.9")
|
||||||
def docs(session: nox.Session) -> None:
|
def docs(session: nox.Session) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
name = cibuildwheel
|
name = cibuildwheel
|
||||||
version = 2.16.0
|
version = 2.16.2
|
||||||
description = Build Python wheels on CI with minimal configuration.
|
description = Build Python wheels on CI with minimal configuration.
|
||||||
long_description = file: README.md
|
long_description = file: README.md
|
||||||
long_description_content_type = text/markdown
|
long_description_content_type = text/markdown
|
||||||
@@ -49,6 +49,8 @@ include =
|
|||||||
[options.entry_points]
|
[options.entry_points]
|
||||||
console_scripts =
|
console_scripts =
|
||||||
cibuildwheel = cibuildwheel.__main__:main
|
cibuildwheel = cibuildwheel.__main__:main
|
||||||
|
validate_pyproject.tool_schema =
|
||||||
|
cibuildwheel = cibuildwheel.schema:get_schema
|
||||||
|
|
||||||
[options.package_data]
|
[options.package_data]
|
||||||
cibuildwheel = resources/*
|
cibuildwheel = resources/*
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ extras = {
|
|||||||
"pytest-xdist",
|
"pytest-xdist",
|
||||||
"build",
|
"build",
|
||||||
"tomli_w",
|
"tomli_w",
|
||||||
|
"validate-pyproject",
|
||||||
],
|
],
|
||||||
"bin": [
|
"bin": [
|
||||||
"click",
|
"click",
|
||||||
|
|||||||
+2
-6
@@ -34,6 +34,8 @@ def build_frontend_env(request) -> dict[str, str]:
|
|||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
def docker_cleanup() -> Generator[None, None, None]:
|
def docker_cleanup() -> Generator[None, None, None]:
|
||||||
def get_images() -> set[str]:
|
def get_images() -> set[str]:
|
||||||
|
if detect_ci_provider() is None or platform != "linux":
|
||||||
|
return set()
|
||||||
images = subprocess.run(
|
images = subprocess.run(
|
||||||
["docker", "image", "ls", "--format", "{{json .ID}}"],
|
["docker", "image", "ls", "--format", "{{json .ID}}"],
|
||||||
text=True,
|
text=True,
|
||||||
@@ -42,12 +44,6 @@ def docker_cleanup() -> Generator[None, None, None]:
|
|||||||
).stdout
|
).stdout
|
||||||
return {json.loads(image.strip()) for image in images.splitlines() if image.strip()}
|
return {json.loads(image.strip()) for image in images.splitlines() if image.strip()}
|
||||||
|
|
||||||
if detect_ci_provider() is None or platform != "linux":
|
|
||||||
try:
|
|
||||||
yield
|
|
||||||
finally:
|
|
||||||
pass
|
|
||||||
return
|
|
||||||
images_before = get_images()
|
images_before = get_images()
|
||||||
try:
|
try:
|
||||||
yield
|
yield
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
import random
|
import random
|
||||||
@@ -13,33 +14,49 @@ import tomli_w
|
|||||||
|
|
||||||
from cibuildwheel.environment import EnvironmentAssignmentBash
|
from cibuildwheel.environment import EnvironmentAssignmentBash
|
||||||
from cibuildwheel.oci_container import OCIContainer, OCIContainerEngineConfig
|
from cibuildwheel.oci_container import OCIContainer, OCIContainerEngineConfig
|
||||||
|
from cibuildwheel.util import detect_ci_provider
|
||||||
|
|
||||||
# Test utilities
|
# Test utilities
|
||||||
|
|
||||||
# for these tests we use manylinux2014 images, because they're available on
|
# for these tests we use manylinux2014 images, because they're available on
|
||||||
# multi architectures and include python3.8
|
# multi architectures and include python3.8
|
||||||
|
DEFAULT_IMAGE_TEMPLATE = "quay.io/pypa/manylinux2014_{machine}:2023-09-04-0828984"
|
||||||
pm = platform.machine()
|
pm = platform.machine()
|
||||||
if pm == "x86_64":
|
if pm in {"x86_64", "ppc64le", "s390x"}:
|
||||||
DEFAULT_IMAGE = "quay.io/pypa/manylinux2014_x86_64:2020-05-17-2f8ac3b"
|
DEFAULT_IMAGE = DEFAULT_IMAGE_TEMPLATE.format(machine=pm)
|
||||||
elif pm in {"aarch64", "arm64"}:
|
elif pm in {"aarch64", "arm64"}:
|
||||||
DEFAULT_IMAGE = "quay.io/pypa/manylinux2014_aarch64:2020-05-17-2f8ac3b"
|
DEFAULT_IMAGE = DEFAULT_IMAGE_TEMPLATE.format(machine="aarch64")
|
||||||
elif pm == "ppc64le":
|
|
||||||
DEFAULT_IMAGE = "quay.io/pypa/manylinux2014_ppc64le:2020-05-17-2f8ac3b"
|
|
||||||
elif pm == "s390x":
|
|
||||||
DEFAULT_IMAGE = "quay.io/pypa/manylinux2014_s390x:2020-05-17-2f8ac3b"
|
|
||||||
else:
|
else:
|
||||||
DEFAULT_IMAGE = ""
|
DEFAULT_IMAGE = ""
|
||||||
|
|
||||||
PODMAN = OCIContainerEngineConfig(name="podman")
|
PODMAN = OCIContainerEngineConfig(name="podman")
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(params=["docker", "podman"])
|
@pytest.fixture(params=["docker", "podman"], scope="module")
|
||||||
def container_engine(request):
|
def container_engine(request):
|
||||||
if request.param == "docker" and not request.config.getoption("--run-docker"):
|
if request.param == "docker" and not request.config.getoption("--run-docker"):
|
||||||
pytest.skip("need --run-docker option to run")
|
pytest.skip("need --run-docker option to run")
|
||||||
if request.param == "podman" and not request.config.getoption("--run-podman"):
|
if request.param == "podman" and not request.config.getoption("--run-podman"):
|
||||||
pytest.skip("need --run-podman option to run")
|
pytest.skip("need --run-podman option to run")
|
||||||
return OCIContainerEngineConfig(name=request.param)
|
|
||||||
|
def get_images() -> set[str]:
|
||||||
|
if detect_ci_provider() is None:
|
||||||
|
return set()
|
||||||
|
images = subprocess.run(
|
||||||
|
[request.param, "image", "ls", "--format", "{{json .ID}}"],
|
||||||
|
text=True,
|
||||||
|
check=True,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
).stdout
|
||||||
|
return {json.loads(image.strip()) for image in images.splitlines() if image.strip()}
|
||||||
|
|
||||||
|
images_before = get_images()
|
||||||
|
try:
|
||||||
|
yield OCIContainerEngineConfig(name=request.param)
|
||||||
|
finally:
|
||||||
|
images_after = get_images()
|
||||||
|
for image in images_after - images_before:
|
||||||
|
subprocess.run([request.param, "rmi", image], check=False)
|
||||||
|
|
||||||
|
|
||||||
# Tests
|
# Tests
|
||||||
@@ -232,10 +249,9 @@ def test_environment_executor(container_engine):
|
|||||||
assert assignment.evaluated_value({}, container.environment_executor) == "42"
|
assert assignment.evaluated_value({}, container.environment_executor) == "42"
|
||||||
|
|
||||||
|
|
||||||
def test_podman_vfs(tmp_path: Path, monkeypatch, request):
|
def test_podman_vfs(tmp_path: Path, monkeypatch, container_engine):
|
||||||
# Tests podman VFS, for the podman in docker use-case
|
if container_engine.name != "podman":
|
||||||
if not request.config.getoption("--run-podman"):
|
pytest.skip("only runs with podman")
|
||||||
pytest.skip("need --run-podman option to run")
|
|
||||||
|
|
||||||
# create the VFS configuration
|
# create the VFS configuration
|
||||||
vfs_path = tmp_path / "podman_vfs"
|
vfs_path = tmp_path / "podman_vfs"
|
||||||
@@ -311,9 +327,9 @@ def test_podman_vfs(tmp_path: Path, monkeypatch, request):
|
|||||||
subprocess.run(["podman", "unshare", "rm", "-rf", vfs_path], check=True)
|
subprocess.run(["podman", "unshare", "rm", "-rf", vfs_path], check=True)
|
||||||
|
|
||||||
|
|
||||||
def test_create_args_volume(tmp_path: Path, request):
|
def test_create_args_volume(tmp_path: Path, container_engine):
|
||||||
if not request.config.getoption("--run-docker"):
|
if container_engine.name != "docker":
|
||||||
pytest.skip("need --run-docker option to run")
|
pytest.skip("only runs with docker")
|
||||||
|
|
||||||
if "CIRCLECI" in os.environ or "GITLAB_CI" in os.environ:
|
if "CIRCLECI" in os.environ or "GITLAB_CI" in os.environ:
|
||||||
pytest.skip(
|
pytest.skip(
|
||||||
@@ -378,3 +394,24 @@ def test_parse_engine_config(config, name, create_args):
|
|||||||
engine_config = OCIContainerEngineConfig.from_config_string(config)
|
engine_config = OCIContainerEngineConfig.from_config_string(config)
|
||||||
assert engine_config.name == name
|
assert engine_config.name == name
|
||||||
assert engine_config.create_args == create_args
|
assert engine_config.create_args == create_args
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(pm != "x86_64", reason="Only runs on x86_64")
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("image", "shell_args"),
|
||||||
|
[
|
||||||
|
(DEFAULT_IMAGE_TEMPLATE.format(machine="i686"), ["/bin/bash"]),
|
||||||
|
(DEFAULT_IMAGE_TEMPLATE.format(machine="x86_64"), ["linux32", "/bin/bash"]),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_enforce_32_bit(container_engine, image, shell_args):
|
||||||
|
with OCIContainer(engine=container_engine, image=image, enforce_32_bit=True) as container:
|
||||||
|
assert container.call(["uname", "-m"], capture_output=True).strip() == "i686"
|
||||||
|
container_args = subprocess.run(
|
||||||
|
f"{container.engine.name} inspect -f '{{{{json .Args }}}}' {container.name}",
|
||||||
|
shell=True,
|
||||||
|
check=True,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
).stdout
|
||||||
|
assert json.loads(container_args) == shell_args
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ def test_build_default_launches(monkeypatch):
|
|||||||
kwargs = build_in_container.call_args_list[0][1]
|
kwargs = build_in_container.call_args_list[0][1]
|
||||||
assert "quay.io/pypa/manylinux2014_x86_64" in kwargs["container"]["image"]
|
assert "quay.io/pypa/manylinux2014_x86_64" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert not kwargs["container"]["simulate_32_bit"]
|
assert not kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {f"{x}-manylinux_x86_64" for x in ALL_IDS}
|
assert identifiers == {f"{x}-manylinux_x86_64" for x in ALL_IDS}
|
||||||
@@ -80,7 +80,7 @@ def test_build_default_launches(monkeypatch):
|
|||||||
kwargs = build_in_container.call_args_list[1][1]
|
kwargs = build_in_container.call_args_list[1][1]
|
||||||
assert "quay.io/pypa/manylinux2014_i686" in kwargs["container"]["image"]
|
assert "quay.io/pypa/manylinux2014_i686" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert kwargs["container"]["simulate_32_bit"]
|
assert kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {f"{x}-manylinux_i686" for x in ALL_IDS}
|
assert identifiers == {f"{x}-manylinux_i686" for x in ALL_IDS}
|
||||||
@@ -88,7 +88,7 @@ def test_build_default_launches(monkeypatch):
|
|||||||
kwargs = build_in_container.call_args_list[2][1]
|
kwargs = build_in_container.call_args_list[2][1]
|
||||||
assert "quay.io/pypa/musllinux_1_1_x86_64" in kwargs["container"]["image"]
|
assert "quay.io/pypa/musllinux_1_1_x86_64" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert not kwargs["container"]["simulate_32_bit"]
|
assert not kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {
|
assert identifiers == {
|
||||||
@@ -98,7 +98,7 @@ def test_build_default_launches(monkeypatch):
|
|||||||
kwargs = build_in_container.call_args_list[3][1]
|
kwargs = build_in_container.call_args_list[3][1]
|
||||||
assert "quay.io/pypa/musllinux_1_1_i686" in kwargs["container"]["image"]
|
assert "quay.io/pypa/musllinux_1_1_i686" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert kwargs["container"]["simulate_32_bit"]
|
assert kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {f"{x}-musllinux_i686" for x in ALL_IDS if "pp" not in x}
|
assert identifiers == {f"{x}-musllinux_i686" for x in ALL_IDS if "pp" not in x}
|
||||||
@@ -141,7 +141,7 @@ before-all = "true"
|
|||||||
kwargs = build_in_container.call_args_list[0][1]
|
kwargs = build_in_container.call_args_list[0][1]
|
||||||
assert "quay.io/pypa/manylinux2014_x86_64" in kwargs["container"]["image"]
|
assert "quay.io/pypa/manylinux2014_x86_64" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert not kwargs["container"]["simulate_32_bit"]
|
assert not kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {"cp36-manylinux_x86_64"}
|
assert identifiers == {"cp36-manylinux_x86_64"}
|
||||||
@@ -150,7 +150,7 @@ before-all = "true"
|
|||||||
kwargs = build_in_container.call_args_list[1][1]
|
kwargs = build_in_container.call_args_list[1][1]
|
||||||
assert "quay.io/pypa/manylinux2014_x86_64" in kwargs["container"]["image"]
|
assert "quay.io/pypa/manylinux2014_x86_64" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert not kwargs["container"]["simulate_32_bit"]
|
assert not kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {
|
assert identifiers == {
|
||||||
@@ -162,7 +162,7 @@ before-all = "true"
|
|||||||
kwargs = build_in_container.call_args_list[2][1]
|
kwargs = build_in_container.call_args_list[2][1]
|
||||||
assert "quay.io/pypa/manylinux_2_28_x86_64" in kwargs["container"]["image"]
|
assert "quay.io/pypa/manylinux_2_28_x86_64" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert not kwargs["container"]["simulate_32_bit"]
|
assert not kwargs["container"]["enforce_32_bit"]
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {
|
assert identifiers == {
|
||||||
f"{x}-manylinux_x86_64"
|
f"{x}-manylinux_x86_64"
|
||||||
@@ -172,7 +172,7 @@ before-all = "true"
|
|||||||
kwargs = build_in_container.call_args_list[3][1]
|
kwargs = build_in_container.call_args_list[3][1]
|
||||||
assert "quay.io/pypa/manylinux2014_i686" in kwargs["container"]["image"]
|
assert "quay.io/pypa/manylinux2014_i686" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert kwargs["container"]["simulate_32_bit"]
|
assert kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {f"{x}-manylinux_i686" for x in ALL_IDS}
|
assert identifiers == {f"{x}-manylinux_i686" for x in ALL_IDS}
|
||||||
@@ -180,7 +180,7 @@ before-all = "true"
|
|||||||
kwargs = build_in_container.call_args_list[4][1]
|
kwargs = build_in_container.call_args_list[4][1]
|
||||||
assert "quay.io/pypa/musllinux_1_1_x86_64" in kwargs["container"]["image"]
|
assert "quay.io/pypa/musllinux_1_1_x86_64" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert not kwargs["container"]["simulate_32_bit"]
|
assert not kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {
|
assert identifiers == {
|
||||||
@@ -190,7 +190,7 @@ before-all = "true"
|
|||||||
kwargs = build_in_container.call_args_list[5][1]
|
kwargs = build_in_container.call_args_list[5][1]
|
||||||
assert "quay.io/pypa/musllinux_1_2_x86_64" in kwargs["container"]["image"]
|
assert "quay.io/pypa/musllinux_1_2_x86_64" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert not kwargs["container"]["simulate_32_bit"]
|
assert not kwargs["container"]["enforce_32_bit"]
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {
|
assert identifiers == {
|
||||||
f"{x}-musllinux_x86_64" for x in ALL_IDS - {"cp36", "cp37", "cp38", "cp39"} if "pp" not in x
|
f"{x}-musllinux_x86_64" for x in ALL_IDS - {"cp36", "cp37", "cp38", "cp39"} if "pp" not in x
|
||||||
@@ -199,7 +199,7 @@ before-all = "true"
|
|||||||
kwargs = build_in_container.call_args_list[6][1]
|
kwargs = build_in_container.call_args_list[6][1]
|
||||||
assert "quay.io/pypa/musllinux_1_1_i686" in kwargs["container"]["image"]
|
assert "quay.io/pypa/musllinux_1_1_i686" in kwargs["container"]["image"]
|
||||||
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
assert kwargs["container"]["cwd"] == PurePosixPath("/project")
|
||||||
assert kwargs["container"]["simulate_32_bit"]
|
assert kwargs["container"]["enforce_32_bit"]
|
||||||
|
|
||||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||||
assert identifiers == {f"{x}-musllinux_i686" for x in ALL_IDS if "pp" not in x}
|
assert identifiers == {f"{x}-musllinux_i686" for x in ALL_IDS if "pp" not in x}
|
||||||
|
|||||||
@@ -255,6 +255,25 @@ def test_container_engine_option(tmp_path: Path, toml_assignment, result_name, r
|
|||||||
assert parsed_container_engine.create_args == result_create_args
|
assert parsed_container_engine.create_args == result_create_args
|
||||||
|
|
||||||
|
|
||||||
|
def test_environment_pass_references():
|
||||||
|
options = Options(
|
||||||
|
platform="linux",
|
||||||
|
command_line_arguments=CommandLineArguments.defaults(),
|
||||||
|
env={
|
||||||
|
"CIBW_ENVIRONMENT_PASS_LINUX": "STARTER MAIN_COURSE",
|
||||||
|
"STARTER": "green eggs",
|
||||||
|
"MAIN_COURSE": "ham",
|
||||||
|
"CIBW_ENVIRONMENT": 'MEAL="$STARTER and $MAIN_COURSE"',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
parsed_environment = options.build_options(identifier=None).environment
|
||||||
|
assert parsed_environment.as_dictionary(prev_environment={}) == {
|
||||||
|
"MEAL": "green eggs and ham",
|
||||||
|
"STARTER": "green eggs",
|
||||||
|
"MAIN_COURSE": "ham",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("toml_assignment", "result_name", "result_args"),
|
("toml_assignment", "result_name", "result_args"),
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from cibuildwheel.util import (
|
|||||||
find_compatible_wheel,
|
find_compatible_wheel,
|
||||||
fix_ansi_codes_for_github_actions,
|
fix_ansi_codes_for_github_actions,
|
||||||
format_safe,
|
format_safe,
|
||||||
|
parse_key_value_string,
|
||||||
prepare_command,
|
prepare_command,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -124,3 +125,84 @@ def test_fix_ansi_codes_for_github_actions():
|
|||||||
output = fix_ansi_codes_for_github_actions(input)
|
output = fix_ansi_codes_for_github_actions(input)
|
||||||
|
|
||||||
assert output == expected
|
assert output == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_key_value_string():
|
||||||
|
assert parse_key_value_string("bar", positional_arg_names=["foo"]) == {"foo": ["bar"]}
|
||||||
|
assert parse_key_value_string("foo:bar", kw_arg_names=["foo"]) == {"foo": ["bar"]}
|
||||||
|
with pytest.raises(ValueError, match="Too many positional arguments"):
|
||||||
|
parse_key_value_string("bar")
|
||||||
|
with pytest.raises(ValueError, match="Unknown field name"):
|
||||||
|
parse_key_value_string("foo:bar")
|
||||||
|
assert parse_key_value_string("foo:bar", kw_arg_names=["foo"]) == {"foo": ["bar"]}
|
||||||
|
assert parse_key_value_string("foo:bar", positional_arg_names=["foo"]) == {"foo": ["bar"]}
|
||||||
|
assert parse_key_value_string("foo: bar", kw_arg_names=["foo"]) == {"foo": ["bar"]}
|
||||||
|
assert parse_key_value_string("foo: bar", kw_arg_names=["foo"]) == {"foo": ["bar"]}
|
||||||
|
assert parse_key_value_string("foo: bar; baz: qux", kw_arg_names=["foo", "baz"]) == {
|
||||||
|
"foo": ["bar"],
|
||||||
|
"baz": ["qux"],
|
||||||
|
}
|
||||||
|
|
||||||
|
# some common options
|
||||||
|
assert parse_key_value_string(
|
||||||
|
"docker; create_args: --some-option --another-option=foo",
|
||||||
|
positional_arg_names=["name"],
|
||||||
|
kw_arg_names=["create_args"],
|
||||||
|
) == {
|
||||||
|
"name": ["docker"],
|
||||||
|
"create_args": ["--some-option", "--another-option=foo"],
|
||||||
|
}
|
||||||
|
# semicolon in value
|
||||||
|
assert parse_key_value_string(
|
||||||
|
"docker; create_args: --some-option='this; that'",
|
||||||
|
positional_arg_names=["name"],
|
||||||
|
kw_arg_names=["create_args"],
|
||||||
|
) == {
|
||||||
|
"name": ["docker"],
|
||||||
|
"create_args": ["--some-option=this; that"],
|
||||||
|
}
|
||||||
|
# colon in value
|
||||||
|
assert parse_key_value_string(
|
||||||
|
"docker; create_args: --mount a:b",
|
||||||
|
positional_arg_names=["name"],
|
||||||
|
kw_arg_names=["create_args"],
|
||||||
|
) == {
|
||||||
|
"name": ["docker"],
|
||||||
|
"create_args": ["--mount", "a:b"],
|
||||||
|
}
|
||||||
|
assert parse_key_value_string(
|
||||||
|
"docker;create_args:--mount a:b",
|
||||||
|
positional_arg_names=["name"],
|
||||||
|
kw_arg_names=["create_args"],
|
||||||
|
) == {
|
||||||
|
"name": ["docker"],
|
||||||
|
"create_args": ["--mount", "a:b"],
|
||||||
|
}
|
||||||
|
# quoted value with spaces
|
||||||
|
assert parse_key_value_string(
|
||||||
|
"docker;create_args:'some string with spaces'",
|
||||||
|
positional_arg_names=["name"],
|
||||||
|
kw_arg_names=["create_args"],
|
||||||
|
) == {
|
||||||
|
"name": ["docker"],
|
||||||
|
"create_args": ["some string with spaces"],
|
||||||
|
}
|
||||||
|
|
||||||
|
# colon in positional value
|
||||||
|
assert parse_key_value_string(
|
||||||
|
"docker; --mount a:b",
|
||||||
|
positional_arg_names=["name", "create_args"],
|
||||||
|
) == {
|
||||||
|
"name": ["docker"],
|
||||||
|
"create_args": ["--mount", "a:b"],
|
||||||
|
}
|
||||||
|
|
||||||
|
# empty option gives empty array
|
||||||
|
assert parse_key_value_string(
|
||||||
|
"docker;create_args:",
|
||||||
|
positional_arg_names=["name"],
|
||||||
|
kw_arg_names=["create_args"],
|
||||||
|
) == {
|
||||||
|
"name": ["docker"],
|
||||||
|
"create_args": [],
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import validate_pyproject.api
|
||||||
|
|
||||||
|
from cibuildwheel._compat import tomllib
|
||||||
|
|
||||||
|
DIR = Path(__file__).parent.resolve()
|
||||||
|
|
||||||
|
|
||||||
|
def test_validate_default_schema():
|
||||||
|
filepath = DIR.parent / "cibuildwheel/resources/defaults.toml"
|
||||||
|
with filepath.open("rb") as f:
|
||||||
|
example = tomllib.load(f)
|
||||||
|
|
||||||
|
validator = validate_pyproject.api.Validator()
|
||||||
|
assert validator(example) is not None
|
||||||
|
|
||||||
|
|
||||||
|
def test_validate_bad_container_engine():
|
||||||
|
example = tomllib.loads(
|
||||||
|
"""
|
||||||
|
[tool.cibuildwheel.linux]
|
||||||
|
container-engine = "docker"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
validator = validate_pyproject.api.Validator()
|
||||||
|
with pytest.raises(validate_pyproject.error_reporting.ValidationError):
|
||||||
|
validator(example)
|
||||||
|
|
||||||
|
|
||||||
|
def test_overrides_select():
|
||||||
|
example = tomllib.loads(
|
||||||
|
"""
|
||||||
|
[[tool.cibuildwheel.overrides]]
|
||||||
|
select = "somestring"
|
||||||
|
repair-wheel-command = "something"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
validator = validate_pyproject.api.Validator()
|
||||||
|
assert validator(example) is not None
|
||||||
|
|
||||||
|
|
||||||
|
def test_overrides_no_select():
|
||||||
|
example = tomllib.loads(
|
||||||
|
"""
|
||||||
|
[[tool.cibuildwheel.overrides]]
|
||||||
|
repair-wheel-command = "something"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
validator = validate_pyproject.api.Validator()
|
||||||
|
with pytest.raises(validate_pyproject.error_reporting.ValidationError):
|
||||||
|
validator(example)
|
||||||
|
|
||||||
|
|
||||||
|
def test_overrides_only_select():
|
||||||
|
example = tomllib.loads(
|
||||||
|
"""
|
||||||
|
[[tool.cibuildwheel.overrides]]
|
||||||
|
select = "somestring"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
validator = validate_pyproject.api.Validator()
|
||||||
|
with pytest.raises(validate_pyproject.error_reporting.ValidationError):
|
||||||
|
validator(example)
|
||||||
|
|
||||||
|
|
||||||
|
def test_docs_examples():
|
||||||
|
"""
|
||||||
|
Parse out all the configuration examples, build valid TOML out of them, and
|
||||||
|
make sure they pass.
|
||||||
|
"""
|
||||||
|
|
||||||
|
expr = re.compile(
|
||||||
|
r"""
|
||||||
|
!!! tab examples "pyproject.toml"
|
||||||
|
\s*
|
||||||
|
\s*```toml
|
||||||
|
(.*?)```""",
|
||||||
|
re.MULTILINE | re.DOTALL,
|
||||||
|
)
|
||||||
|
|
||||||
|
txt = DIR.parent.joinpath("docs/options.md").read_text()
|
||||||
|
|
||||||
|
blocks: list[str] = []
|
||||||
|
for match in expr.finditer(txt):
|
||||||
|
lines = (line.strip() for line in match.group(1).strip().splitlines() if line.strip())
|
||||||
|
block: list[str] = []
|
||||||
|
header = ""
|
||||||
|
for line in lines:
|
||||||
|
if line.startswith(("[tool.cibuildwheel", "[[tool.cibuildwheel")):
|
||||||
|
header = line
|
||||||
|
elif line.startswith("#"):
|
||||||
|
if block:
|
||||||
|
blocks.append("\n".join([header, *block]))
|
||||||
|
block = []
|
||||||
|
elif " = " in line and any(x.startswith(line.partition(" = ")[0]) for x in block):
|
||||||
|
blocks.append("\n".join([header, *block]))
|
||||||
|
block = [line]
|
||||||
|
else:
|
||||||
|
block.append(line)
|
||||||
|
blocks.append("\n".join([header, *block]))
|
||||||
|
|
||||||
|
for example_txt in blocks:
|
||||||
|
print(example_txt)
|
||||||
|
print()
|
||||||
|
example = tomllib.loads(example_txt)
|
||||||
|
validator = validate_pyproject.api.Validator()
|
||||||
|
assert validator(example) is not None
|
||||||
Reference in New Issue
Block a user