From 6de646d3b01e642877e298afea60b563ab71dbe2 Mon Sep 17 00:00:00 2001 From: Guillermo Arribas Date: Fri, 6 Oct 2017 19:12:59 -0300 Subject: [PATCH] Build labels option: array form produces unmarshal error (fixes #5183) Signed-off-by: Guillermo Arribas --- compose/service.py | 3 ++- tests/integration/service_test.py | 19 ++++++++++++++++++- tests/unit/service_test.py | 4 ++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/compose/service.py b/compose/service.py index 1a18c6654..e2f72aa5a 100644 --- a/compose/service.py +++ b/compose/service.py @@ -23,6 +23,7 @@ from . import const from . import progress_stream from .config import DOCKER_CONFIG_KEYS from .config import merge_environment +from .config.config import parse_labels from .config.errors import DependencyError from .config.types import ServicePort from .config.types import VolumeSpec @@ -916,7 +917,7 @@ class Service(object): nocache=no_cache, dockerfile=build_opts.get('dockerfile', None), cache_from=build_opts.get('cache_from', None), - labels=build_opts.get('labels', None), + labels=parse_labels(build_opts.get('labels', None)), buildargs=build_args, network_mode=build_opts.get('network', None), target=build_opts.get('target', None), diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py index 84b54fe41..a71bc407c 100644 --- a/tests/integration/service_test.py +++ b/tests/integration/service_test.py @@ -761,7 +761,7 @@ class ServiceTest(DockerClientTestCase): assert service.image() assert "build_version=2" in service.image()['ContainerConfig']['Cmd'] - def test_build_with_build_labels(self): + def test_build_with_build_labels_dict(self): base_dir = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, base_dir) @@ -778,6 +778,23 @@ class ServiceTest(DockerClientTestCase): assert service.image() assert service.image()['Config']['Labels']['com.docker.compose.test'] == 'true' + def test_build_with_build_labels_list(self): + base_dir = tempfile.mkdtemp() + self.addCleanup(shutil.rmtree, base_dir) + + with open(os.path.join(base_dir, 'Dockerfile'), 'w') as f: + f.write('FROM busybox\n') + + service = self.create_service('buildlabels', build={ + 'context': text_type(base_dir), + 'labels': ['com.docker.compose.test=true'] + }) + service.build() + self.addCleanup(self.client.remove_image, service.image_name) + + assert service.image() + assert service.image()['Config']['Labels']['com.docker.compose.test'] == 'true' + @no_cluster('Container networks not on Swarm') def test_build_with_network(self): base_dir = tempfile.mkdtemp() diff --git a/tests/unit/service_test.py b/tests/unit/service_test.py index 7d61807ba..5c5c2bf67 100644 --- a/tests/unit/service_test.py +++ b/tests/unit/service_test.py @@ -473,7 +473,7 @@ class ServiceTest(unittest.TestCase): nocache=False, rm=True, buildargs={}, - labels=None, + labels={}, cache_from=None, network_mode=None, target=None, @@ -514,7 +514,7 @@ class ServiceTest(unittest.TestCase): nocache=False, rm=True, buildargs={}, - labels=None, + labels={}, cache_from=None, network_mode=None, target=None,