From 5b6191e6536abc4bbbae902c384bfa531315a897 Mon Sep 17 00:00:00 2001 From: Joey Payne Date: Mon, 20 Feb 2017 13:18:52 -0700 Subject: [PATCH 1/3] Add cache_from to build opts Signed-off-by: Joey Payne --- compose/config/config_schema_v3.1.json | 3 ++- compose/service.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/compose/config/config_schema_v3.1.json b/compose/config/config_schema_v3.1.json index b7037485f..77c2d35cb 100644 --- a/compose/config/config_schema_v3.1.json +++ b/compose/config/config_schema_v3.1.json @@ -71,7 +71,8 @@ "properties": { "context": {"type": "string"}, "dockerfile": {"type": "string"}, - "args": {"$ref": "#/definitions/list_or_dict"} + "args": {"$ref": "#/definitions/list_or_dict"}, + "cache_from": {"type": "#/definitions/list_of_strings"} }, "additionalProperties": false } diff --git a/compose/service.py b/compose/service.py index 9f2fc68b4..023efa274 100644 --- a/compose/service.py +++ b/compose/service.py @@ -802,6 +802,7 @@ class Service(object): nocache=no_cache, dockerfile=build_opts.get('dockerfile', None), buildargs=build_opts.get('args', None), + cache_from=build_opts.get('cache_from', None), ) try: From 33fcfca0409612df38caedb51126d83c51522c7d Mon Sep 17 00:00:00 2001 From: Joey Payne Date: Mon, 20 Feb 2017 13:20:13 -0700 Subject: [PATCH 2/3] Add test for cache_from Signed-off-by: Joey Payne --- tests/integration/service_test.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py index 09758eee9..cb6e5d318 100644 --- a/tests/integration/service_test.py +++ b/tests/integration/service_test.py @@ -32,6 +32,7 @@ from compose.service import NetworkMode from compose.service import Service from tests.integration.testcases import v2_1_only from tests.integration.testcases import v2_only +from tests.integration.testcases import v3_only def create_and_start_container(service, **override_options): @@ -946,6 +947,20 @@ class ServiceTest(DockerClientTestCase): }.items(): self.assertEqual(env[k], v) + @v3_only() + def test_build_with_cachefrom(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('cache_from', + build={'context': base_dir, + 'cache_from': ['build1']}) + service.build() + assert service.image() + @mock.patch.dict(os.environ) def test_resolve_env(self): os.environ['FILE_DEF'] = 'E1' From c64f7dde0486b6c2ceac5a3bc186bbfef3a3f572 Mon Sep 17 00:00:00 2001 From: Joey Payne Date: Mon, 20 Feb 2017 13:39:32 -0700 Subject: [PATCH 3/3] Fix failing unit tests Signed-off-by: Joey Payne --- tests/unit/service_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit/service_test.py b/tests/unit/service_test.py index 2d5b17619..0a66e4f3e 100644 --- a/tests/unit/service_test.py +++ b/tests/unit/service_test.py @@ -446,6 +446,7 @@ class ServiceTest(unittest.TestCase): nocache=False, rm=True, buildargs=None, + cache_from=None, ) def test_ensure_image_exists_no_build(self): @@ -482,6 +483,7 @@ class ServiceTest(unittest.TestCase): nocache=False, rm=True, buildargs=None, + cache_from=None, ) def test_build_does_not_pull(self):