fix: call repair-wheel-command in iOS builds (#2761)
This commit is contained in:
@@ -450,6 +450,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
identifier_tmp_dir = tmp_path / config.identifier
|
identifier_tmp_dir = tmp_path / config.identifier
|
||||||
identifier_tmp_dir.mkdir()
|
identifier_tmp_dir.mkdir()
|
||||||
built_wheel_dir = identifier_tmp_dir / "built_wheel"
|
built_wheel_dir = identifier_tmp_dir / "built_wheel"
|
||||||
|
repaired_wheel_dir = identifier_tmp_dir / "repaired_wheel"
|
||||||
|
|
||||||
constraints_path = build_options.dependency_constraints.get_for_python_version(
|
constraints_path = build_options.dependency_constraints.get_for_python_version(
|
||||||
version=config.version, tmp_dir=identifier_tmp_dir
|
version=config.version, tmp_dir=identifier_tmp_dir
|
||||||
@@ -523,11 +524,36 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
case _:
|
case _:
|
||||||
assert_never(build_frontend)
|
assert_never(build_frontend)
|
||||||
|
|
||||||
test_wheel = built_wheel = next(built_wheel_dir.glob("*.whl"))
|
built_wheel = next(built_wheel_dir.glob("*.whl"))
|
||||||
|
|
||||||
if built_wheel.name.endswith("none-any.whl"):
|
if built_wheel.name.endswith("none-any.whl"):
|
||||||
raise errors.NonPlatformWheelError()
|
raise errors.NonPlatformWheelError()
|
||||||
|
|
||||||
|
repaired_wheel_dir.mkdir()
|
||||||
|
if build_options.repair_command:
|
||||||
|
log.step("Repairing wheel...")
|
||||||
|
|
||||||
|
repair_command_prepared = prepare_command(
|
||||||
|
build_options.repair_command,
|
||||||
|
wheel=built_wheel,
|
||||||
|
dest_dir=repaired_wheel_dir,
|
||||||
|
package=build_options.package_dir,
|
||||||
|
project=".",
|
||||||
|
)
|
||||||
|
shell(repair_command_prepared, env=env)
|
||||||
|
else:
|
||||||
|
shutil.move(str(built_wheel), repaired_wheel_dir)
|
||||||
|
|
||||||
|
try:
|
||||||
|
repaired_wheel = next(repaired_wheel_dir.glob("*.whl"))
|
||||||
|
except StopIteration:
|
||||||
|
raise errors.RepairStepProducedNoWheelError() from None
|
||||||
|
|
||||||
|
if repaired_wheel.name in {wheel.name for wheel in built_wheels}:
|
||||||
|
raise errors.AlreadyBuiltWheelError(repaired_wheel.name)
|
||||||
|
|
||||||
|
test_wheel = repaired_wheel
|
||||||
|
|
||||||
log.step_end()
|
log.step_end()
|
||||||
|
|
||||||
if build_options.test_command and build_options.test_selector(config.identifier):
|
if build_options.test_command and build_options.test_selector(config.identifier):
|
||||||
@@ -695,11 +721,11 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
# We're all done here; move it to output (overwrite existing)
|
# We're all done here; move it to output (overwrite existing)
|
||||||
output_wheel: Path | None = None
|
output_wheel: Path | None = None
|
||||||
if compatible_wheel is None:
|
if compatible_wheel is None:
|
||||||
output_wheel = build_options.output_dir.joinpath(built_wheel.name)
|
output_wheel = build_options.output_dir.joinpath(repaired_wheel.name)
|
||||||
moved_wheel = move_file(built_wheel, output_wheel)
|
moved_wheel = move_file(repaired_wheel, output_wheel)
|
||||||
if moved_wheel != output_wheel.resolve():
|
if moved_wheel != output_wheel.resolve():
|
||||||
log.warning(
|
log.warning(
|
||||||
f"{built_wheel} was moved to {moved_wheel} instead of {output_wheel}"
|
f"{repaired_wheel} was moved to {moved_wheel} instead of {output_wheel}"
|
||||||
)
|
)
|
||||||
built_wheels.append(output_wheel)
|
built_wheels.append(output_wheel)
|
||||||
|
|
||||||
|
|||||||
@@ -347,3 +347,37 @@ def test_ios_test_command_invalid(tmp_path, capfd):
|
|||||||
)
|
)
|
||||||
_, err = capfd.readouterr()
|
_, err = capfd.readouterr()
|
||||||
assert "iOS tests configured with a test command which doesn't start with 'python -m'" in err
|
assert "iOS tests configured with a test command which doesn't start with 'python -m'" in err
|
||||||
|
|
||||||
|
|
||||||
|
def test_repair_step(tmp_path):
|
||||||
|
"""Build will succeed & the custom repair step is called."""
|
||||||
|
skip_if_ios_testing_not_supported()
|
||||||
|
|
||||||
|
project_dir = tmp_path / "project"
|
||||||
|
basic_project = test_projects.new_c_project()
|
||||||
|
basic_project.files.update(basic_project_files)
|
||||||
|
basic_project.generate(project_dir)
|
||||||
|
|
||||||
|
# Build, but don't test the wheels; we're only checking that the right
|
||||||
|
# warning was raised.
|
||||||
|
actual_wheels = utils.cibuildwheel_run(
|
||||||
|
project_dir,
|
||||||
|
add_env={
|
||||||
|
"CIBW_PLATFORM": "ios",
|
||||||
|
"CIBW_BUILD": "cp314-*",
|
||||||
|
"CIBW_TEST_SKIP": "*",
|
||||||
|
"CIBW_REPAIR_WHEEL_COMMAND": "touch .ios-repair-step && mv {wheel} {dest_dir}",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
# The expected wheels were produced.
|
||||||
|
expected_wheels = utils.expected_wheels(
|
||||||
|
"spam",
|
||||||
|
"0.1.0",
|
||||||
|
platform="ios",
|
||||||
|
python_abi_tags=["cp314-cp314"],
|
||||||
|
)
|
||||||
|
assert set(actual_wheels) == set(expected_wheels)
|
||||||
|
|
||||||
|
# The custom repair step is called.
|
||||||
|
assert project_dir.joinpath(".ios-repair-step").is_file()
|
||||||
|
|||||||
Reference in New Issue
Block a user