Add inheritance to the configuration schema
Amp-Thread-ID: https://ampcode.com/threads/T-019fefe0-6bbb-736e-b01c-d7f15d2db320
This commit is contained in:
@@ -340,6 +340,27 @@ items:
|
||||
"""
|
||||
)
|
||||
|
||||
INHERITABLE_OPTIONS = frozenset(
|
||||
{
|
||||
"audit-command",
|
||||
"audit-requires",
|
||||
"before-all",
|
||||
"before-build",
|
||||
"before-test",
|
||||
"config-settings",
|
||||
"environment",
|
||||
"environment-pass",
|
||||
"repair-wheel-command",
|
||||
"test-command",
|
||||
"test-environment",
|
||||
"test-extras",
|
||||
"test-groups",
|
||||
"test-requires",
|
||||
"test-sources",
|
||||
"xbuild-tools",
|
||||
}
|
||||
)
|
||||
|
||||
for key, value in schema["properties"].items():
|
||||
value["title"] = f"CIBW_{key.replace('-', '_').upper()}"
|
||||
|
||||
@@ -371,6 +392,19 @@ def as_object(d: dict[str, Any]) -> dict[str, Any]:
|
||||
}
|
||||
|
||||
|
||||
def inherit_schema(options: dict[str, Any]) -> dict[str, Any]:
|
||||
properties = {
|
||||
name: {"$ref": "#/$defs/inherit"} for name in options if name in INHERITABLE_OPTIONS
|
||||
}
|
||||
return {
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{"type": "string"},
|
||||
as_object(properties),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
oses = {
|
||||
"linux": as_object(non_global_options),
|
||||
"windows": as_object(not_linux),
|
||||
@@ -393,6 +427,14 @@ for os_name, command in [
|
||||
|
||||
del oses["linux"]["properties"]["dependency-versions"]
|
||||
|
||||
schema["properties"]["inherit"] = {
|
||||
**inherit_schema(schema["properties"]),
|
||||
"title": "CIBW_INHERIT",
|
||||
}
|
||||
overrides["items"]["properties"]["inherit"] = inherit_schema(overrides["items"]["properties"])
|
||||
for os_schema in oses.values():
|
||||
os_schema["properties"]["inherit"] = inherit_schema(os_schema["properties"])
|
||||
|
||||
schema["properties"]["overrides"] = overrides
|
||||
schema["properties"] |= oses
|
||||
|
||||
|
||||
@@ -27,64 +27,66 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"inherit": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-files": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"container-engine": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment-pass": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-runtime": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment-pass": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
],
|
||||
"title": "CIBW_INHERIT"
|
||||
},
|
||||
"audit-command": {
|
||||
@@ -750,7 +752,66 @@
|
||||
]
|
||||
},
|
||||
"inherit": {
|
||||
"$ref": "#/properties/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment-pass": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"audit-command": {
|
||||
"$ref": "#/properties/audit-command"
|
||||
@@ -880,7 +941,66 @@
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"inherit": {
|
||||
"$ref": "#/properties/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment-pass": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"audit-command": {
|
||||
"$ref": "#/properties/audit-command"
|
||||
@@ -1022,7 +1142,63 @@
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"inherit": {
|
||||
"$ref": "#/properties/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"audit-command": {
|
||||
"$ref": "#/properties/audit-command"
|
||||
@@ -1110,7 +1286,63 @@
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"inherit": {
|
||||
"$ref": "#/properties/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"audit-command": {
|
||||
"$ref": "#/properties/audit-command"
|
||||
@@ -1198,7 +1430,63 @@
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"inherit": {
|
||||
"$ref": "#/properties/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"audit-command": {
|
||||
"$ref": "#/properties/audit-command"
|
||||
@@ -1273,7 +1561,63 @@
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"inherit": {
|
||||
"$ref": "#/properties/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"audit-command": {
|
||||
"$ref": "#/properties/audit-command"
|
||||
@@ -1361,7 +1705,63 @@
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"inherit": {
|
||||
"$ref": "#/properties/inherit"
|
||||
"description": "How options at this configuration level inherit previous values.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"audit-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"audit-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-all": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-build": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"before-test": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"config-settings": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"xbuild-tools": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"repair-wheel-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-command": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-extras": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-sources": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-groups": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-requires": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
},
|
||||
"test-environment": {
|
||||
"$ref": "#/$defs/inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"audit-command": {
|
||||
"$ref": "#/properties/audit-command"
|
||||
|
||||
@@ -143,6 +143,70 @@ def test_overrides_invalid_inherit_value(validator: validate_pyproject.api.Valid
|
||||
validator(example)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"config",
|
||||
[
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit.audit-command = "append"
|
||||
audit-command = "twine check {wheel}"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit = "audit-command; audit-requires: prepend"
|
||||
audit-command = "twine check {wheel}"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel.linux]
|
||||
inherit.before-all = "prepend"
|
||||
before-all = "dnf install libfoo-devel"
|
||||
""",
|
||||
],
|
||||
)
|
||||
def test_inherit_forms(validator: validate_pyproject.api.Validator, config: str) -> None:
|
||||
assert validator(tomllib.loads(config)) is not None
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"config",
|
||||
[
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit.archs = "append"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit.build = "append"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit.container-engine = "append"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit.enable = "append"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit.skip = "append"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel]
|
||||
inherit.test-skip = "append"
|
||||
""",
|
||||
"""
|
||||
[tool.cibuildwheel.macos]
|
||||
inherit.environment-pass = "append"
|
||||
""",
|
||||
],
|
||||
)
|
||||
def test_invalid_inherit_option_for_scope(
|
||||
validator: validate_pyproject.api.Validator, config: str
|
||||
) -> None:
|
||||
with pytest.raises(validate_pyproject.error_reporting.ValidationError):
|
||||
validator(tomllib.loads(config))
|
||||
|
||||
|
||||
def test_docs_examples(validator: validate_pyproject.api.Validator) -> None:
|
||||
"""
|
||||
Parse out all the configuration examples, build valid TOML out of them, and
|
||||
|
||||
Reference in New Issue
Block a user