300 lines
8.3 KiB
Python
Executable File
300 lines
8.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
import copy
|
|
import json
|
|
from typing import Any
|
|
|
|
import yaml
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--schemastore", action="store_true", help="Generate schema_store version")
|
|
args = parser.parse_args()
|
|
|
|
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|disable_host_mount):'
|
|
- type: string
|
|
pattern: '^podman; ?(create_args|disable_host_mount):'
|
|
- type: object
|
|
additionalProperties: false
|
|
required: [name]
|
|
properties:
|
|
name:
|
|
enum: [docker, podman]
|
|
create-args:
|
|
type: array
|
|
items:
|
|
type: string
|
|
disable-host-mount:
|
|
type: boolean
|
|
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)
|
|
|
|
if args.schemastore:
|
|
schema["$id"] += "#"
|
|
|
|
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()}'
|
|
|
|
if args.schemastore:
|
|
non_global_options = {
|
|
k: {"$ref": f"#/properties/tool/properties/cibuildwheel/properties/{k}"}
|
|
for k in schema["properties"]
|
|
}
|
|
else:
|
|
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
|
|
|
|
if not args.schemastore:
|
|
print(json.dumps(schema, indent=2))
|
|
raise SystemExit(0)
|
|
|
|
schema_store_txt = """
|
|
$id: https://json.schemastore.org/cibuildwheel.json
|
|
$schema: http://json-schema.org/draft-07/schema#
|
|
additionalProperties: false
|
|
description: cibuildwheel's toml file, generated with ./bin/generate_schema.py --schemastore from cibuildwheel.
|
|
type: object
|
|
properties:
|
|
tool:
|
|
type: object
|
|
properties:
|
|
cibuildwheel:
|
|
type: object
|
|
"""
|
|
schema_store = yaml.safe_load(schema_store_txt)
|
|
|
|
schema_store["properties"]["tool"]["properties"]["cibuildwheel"]["properties"] = schema[
|
|
"properties"
|
|
]
|
|
|
|
print(json.dumps(schema_store, indent=2))
|