Add some type safety to the container_engine option

This commit is contained in:
Joe Rickerby
2022-06-27 17:26:31 +01:00
parent de3144a947
commit 3bd759f50c
2 changed files with 17 additions and 6 deletions
+6 -4
View File
@@ -13,7 +13,9 @@ from typing import IO, Dict, List, Optional, Sequence, Type, cast
from cibuildwheel.util import CIProvider, detect_ci_provider
from .typing import PathOrStr, PopenBytes
from .typing import Literal, PathOrStr, PopenBytes
ContainerEngine = Literal["docker", "podman"]
class DockerContainer:
@@ -54,7 +56,7 @@ class DockerContainer:
docker_image: str,
simulate_32_bit: bool = False,
cwd: Optional[PathOrStr] = None,
container_engine: str = "docker",
container_engine: ContainerEngine = "docker",
):
if not docker_image:
raise ValueError("Must have a non-empty docker image to run.")
@@ -193,8 +195,6 @@ class DockerContainer:
to_path.mkdir(parents=True, exist_ok=True)
if self.container_engine == "podman":
# There is a bug in docker that prevents this simple implementation
# from working https://github.com/moby/moby/issues/38995
subprocess.run(
[
self.container_engine,
@@ -206,6 +206,8 @@ class DockerContainer:
cwd=to_path,
)
elif self.container_engine == "docker":
# There is a bug in docker that prevents a simple 'cp' invocation
# from working https://github.com/moby/moby/issues/38995
command = f"{self.container_engine} exec -i {self.name} tar -cC {shell_quote(from_path)} -f - . | tar -xf -"
subprocess.run(
command,
+11 -2
View File
@@ -16,6 +16,7 @@ from typing import (
Set,
Tuple,
Union,
cast,
)
if sys.version_info >= (3, 11):
@@ -26,6 +27,7 @@ else:
from packaging.specifiers import SpecifierSet
from .architecture import Architecture
from .docker_container import ContainerEngine
from .environment import EnvironmentParseError, ParsedEnvironment, parse_environment
from .projectfiles import get_requires_python_str
from .typing import PLATFORMS, Literal, PlatformName, TypedDict
@@ -79,7 +81,7 @@ class BuildOptions(NamedTuple):
test_extras: str
build_verbosity: int
build_frontend: BuildFrontend
container_engine: str
container_engine: ContainerEngine
@property
def package_dir(self) -> Path:
@@ -423,7 +425,14 @@ class Options:
test_requires = self.reader.get("test-requires", sep=" ").split()
test_extras = self.reader.get("test-extras", sep=",")
build_verbosity_str = self.reader.get("build-verbosity")
container_engine = self.reader.get("container-engine")
container_engine_str = self.reader.get("container-engine")
if container_engine_str not in ["docker", "podman"]:
msg = f"cibuildwheel: Unrecognised container_engine '{container_engine_str}', only 'docker' and 'podman' are supported"
print(msg, file=sys.stderr)
sys.exit(2)
container_engine = cast(ContainerEngine, container_engine_str)
build_frontend: BuildFrontend
if build_frontend_str == "build":