Merge pull request #411 from YannickJadoul/fix-docker-commandsubstitution
Fix command substitution in CIBW_ENVIRONMENT in Linux docker images
This commit is contained in:
@@ -182,7 +182,7 @@ class DockerContainer:
|
|||||||
|
|
||||||
def environment_executor(self, command: List[str], environment: Dict[str, str]) -> str:
|
def environment_executor(self, command: List[str], environment: Dict[str, str]) -> str:
|
||||||
# used as an EnvironmentExecutor to evaluate commands and capture output
|
# used as an EnvironmentExecutor to evaluate commands and capture output
|
||||||
return self.call(command, env=environment)
|
return self.call(command, env=environment, capture_output=True)
|
||||||
|
|
||||||
|
|
||||||
def shell_quote(path: PurePath) -> str:
|
def shell_quote(path: PurePath) -> str:
|
||||||
|
|||||||
@@ -13,12 +13,15 @@ project_with_environment_asserts = test_projects.new_c_project(
|
|||||||
# explode if environment isn't correct, as set in CIBW_ENVIRONMENT
|
# explode if environment isn't correct, as set in CIBW_ENVIRONMENT
|
||||||
CIBW_TEST_VAR = os.environ.get("CIBW_TEST_VAR")
|
CIBW_TEST_VAR = os.environ.get("CIBW_TEST_VAR")
|
||||||
CIBW_TEST_VAR_2 = os.environ.get("CIBW_TEST_VAR_2")
|
CIBW_TEST_VAR_2 = os.environ.get("CIBW_TEST_VAR_2")
|
||||||
|
CIBW_TEST_VAR_3 = os.environ.get("CIBW_TEST_VAR_3")
|
||||||
PATH = os.environ.get("PATH")
|
PATH = os.environ.get("PATH")
|
||||||
|
|
||||||
if CIBW_TEST_VAR != "a b c":
|
if CIBW_TEST_VAR != "a b c":
|
||||||
raise Exception('CIBW_TEST_VAR should equal "a b c". It was "%s"' % CIBW_TEST_VAR)
|
raise Exception('CIBW_TEST_VAR should equal "a b c". It was "%s"' % CIBW_TEST_VAR)
|
||||||
if CIBW_TEST_VAR_2 != "1":
|
if CIBW_TEST_VAR_2 != "1":
|
||||||
raise Exception('CIBW_TEST_VAR_2 should equal "1". It was "%s"' % CIBW_TEST_VAR_2)
|
raise Exception('CIBW_TEST_VAR_2 should equal "1". It was "%s"' % CIBW_TEST_VAR_2)
|
||||||
|
if CIBW_TEST_VAR_3 != "test string 3":
|
||||||
|
raise Exception('CIBW_TEST_VAR_3 should equal "test string 3". It was "%s"' % CIBW_TEST_VAR_3)
|
||||||
if "/opt/cibw_test_path" not in PATH:
|
if "/opt/cibw_test_path" not in PATH:
|
||||||
raise Exception('PATH should contain "/opt/cibw_test_path". It was "%s"' % PATH)
|
raise Exception('PATH should contain "/opt/cibw_test_path". It was "%s"' % PATH)
|
||||||
if "$PATH" in PATH:
|
if "$PATH" in PATH:
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from pathlib import Path, PurePath
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from cibuildwheel.docker_container import DockerContainer
|
from cibuildwheel.docker_container import DockerContainer
|
||||||
|
from cibuildwheel.environment import EnvironmentAssignment
|
||||||
|
|
||||||
# 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
|
||||||
@@ -145,3 +146,10 @@ def test_dir_operations(tmp_path: Path):
|
|||||||
container.copy_out(dst_dir, new_test_dir)
|
container.copy_out(dst_dir, new_test_dir)
|
||||||
|
|
||||||
assert test_binary_data == (new_test_dir / 'test.dat').read_bytes()
|
assert test_binary_data == (new_test_dir / 'test.dat').read_bytes()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.docker
|
||||||
|
def test_environment_executor():
|
||||||
|
with DockerContainer(DEFAULT_IMAGE) as container:
|
||||||
|
assignment = EnvironmentAssignment("TEST=$(echo 42)")
|
||||||
|
assert assignment.evaluated_value({}, container.environment_executor) == "42"
|
||||||
|
|||||||
Reference in New Issue
Block a user