diff --git a/samcli/lib/build/app_builder.py b/samcli/lib/build/app_builder.py index 7cafb9cae1..405e0ed992 100644 --- a/samcli/lib/build/app_builder.py +++ b/samcli/lib/build/app_builder.py @@ -186,7 +186,7 @@ def build(self) -> ApplicationBuildResult: """ build_graph = self._get_build_graph(self._container_env_var, self._container_env_var_file) build_strategy: BuildStrategy = DefaultBuildStrategy( - build_graph, self._build_dir, self._build_function, self._build_layer + build_graph, self._build_dir, self._build_function, self._build_layer, self._cached ) if self._parallel: diff --git a/samcli/lib/build/build_strategy.py b/samcli/lib/build/build_strategy.py index a62d2e7012..aaffde7ed2 100644 --- a/samcli/lib/build/build_strategy.py +++ b/samcli/lib/build/build_strategy.py @@ -126,11 +126,13 @@ def __init__( build_dir: str, build_function: Callable[[str, str, str, str, str, Optional[str], str, dict, dict, Optional[str], bool], str], build_layer: Callable[[str, str, str, List[str], str, str, dict, Optional[str], bool], str], + cached: bool = False, ) -> None: super().__init__(build_graph) self._build_dir = build_dir self._build_function = build_function self._build_layer = build_layer + self._cached = cached def build_single_function_definition(self, build_definition: FunctionBuildDefinition) -> Dict[str, str]: """ @@ -167,7 +169,7 @@ def build_single_function_definition(self, build_definition: FunctionBuildDefini single_build_dir, build_definition.metadata, container_env_vars, - build_definition.dependencies_dir, + build_definition.dependencies_dir if self._cached else None, build_definition.download_dependencies, ) function_build_results[single_full_path] = result @@ -214,7 +216,7 @@ def build_single_layer_definition(self, layer_definition: LayerBuildDefinition) layer.build_architecture, single_build_dir, layer_definition.env_vars, - layer_definition.dependencies_dir, + layer_definition.dependencies_dir if self._cached else None, layer_definition.download_dependencies, ) } diff --git a/tests/unit/lib/build_module/test_app_builder.py b/tests/unit/lib/build_module/test_app_builder.py index 42d1590051..6423158384 100644 --- a/tests/unit/lib/build_module/test_app_builder.py +++ b/tests/unit/lib/build_module/test_app_builder.py @@ -469,6 +469,48 @@ def test_deprecated_runtimes(self, runtime): artifact_dir="artifact_dir", ) + def test_must_not_use_dep_layer_for_non_cached(self): + mocked_default_build_strategy = Mock() + mocked_default_build_strategy.return_value = mocked_default_build_strategy + + function = Function( + function_id="name", + name="name", + functionname="function_name", + runtime="runtime", + memory="memory", + timeout="timeout", + handler="handler", + imageuri="imageuri", + packagetype=ZIP, + imageconfig="imageconfig", + codeuri="codeuri", + environment="environment", + rolearn="rolearn", + layers="layers", + events="events", + codesign_config_arn="codesign_config_arn", + metadata=None, + inlinecode=None, + architectures=[X86_64], + stack_path="", + function_url_config=None, + ) + + resources_to_build_collector = ResourcesToBuildCollector() + resources_to_build_collector.add_functions([function]) + + builder = ApplicationBuilder( + resources_to_build_collector, "builddir", "basedir", "cachedir", stream_writer=StreamWriter(sys.stderr) + ) + builder._build_function = Mock() + + builder.build() + + builder._build_function.assert_called_with( + "name", "codeuri", ZIP, "runtime", X86_64, "handler", str(Path("builddir/name")), {}, {}, None, True + ) + class PathValidator: def __init__(self, path): diff --git a/tests/unit/lib/build_module/test_build_strategy.py b/tests/unit/lib/build_module/test_build_strategy.py index b72e983d38..4dce6ebbdb 100644 --- a/tests/unit/lib/build_module/test_build_strategy.py +++ b/tests/unit/lib/build_module/test_build_strategy.py @@ -45,6 +45,11 @@ def setUp(self): self.function_build_definition1 = FunctionBuildDefinition("runtime", "codeuri", ZIP, X86_64, {}, "handler") self.function_build_definition2 = FunctionBuildDefinition("runtime2", "codeuri", ZIP, X86_64, {}, "handler") + + self.function_build_definition1.add_function(self.function1_1) + self.function_build_definition1.add_function(self.function1_2) + self.function_build_definition2.add_function(self.function2) + self.build_graph.put_function_build_definition(self.function_build_definition1, self.function1_1) self.build_graph.put_function_build_definition(self.function_build_definition1, self.function1_2) self.build_graph.put_function_build_definition(self.function_build_definition2, self.function2) @@ -164,7 +169,7 @@ def test_build_layers_and_functions(self, mock_copy_tree): self.function_build_definition1.get_build_dir(given_build_dir), self.function_build_definition1.metadata, self.function_build_definition1.env_vars, - self.function_build_definition1.dependencies_dir, + None, True, ), call( @@ -177,7 +182,7 @@ def test_build_layers_and_functions(self, mock_copy_tree): self.function_build_definition2.get_build_dir(given_build_dir), self.function_build_definition2.metadata, self.function_build_definition2.env_vars, - self.function_build_definition2.dependencies_dir, + None, True, ), ] @@ -194,7 +199,7 @@ def test_build_layers_and_functions(self, mock_copy_tree): self.layer1.build_architecture, self.layer1.get_build_dir(given_build_dir), self.layer_build_definition1.env_vars, - self.layer_build_definition1.dependencies_dir, + None, True, ), call( @@ -205,7 +210,7 @@ def test_build_layers_and_functions(self, mock_copy_tree): self.layer2.build_architecture, self.layer2.get_build_dir(given_build_dir), self.layer_build_definition2.env_vars, - self.layer_build_definition2.dependencies_dir, + None, True, ), ] @@ -476,7 +481,7 @@ def setUp(self): self.build_layer = Mock() self.build_graph = Mock() self.delegate_build_strategy = DefaultBuildStrategy( - self.build_graph, Mock(), self.build_function, self.build_layer + self.build_graph, Mock(), self.build_function, self.build_layer, cached=True ) self.build_strategy = IncrementalBuildStrategy( self.build_graph,