diff options
author | 2024-08-01 14:47:10 -0700 | |
---|---|---|
committer | 2024-08-02 14:45:36 -0700 | |
commit | b24c1c3dbde9ac93d034be033bbb951f803ef0e2 (patch) | |
tree | 7525fc4b859c81f96d2f0fc86c824da6bb9e18c9 /ci/build_test_suites_test.py | |
parent | 8afaf50fafbd2fa2ca79f5b58c75fedc038e61d1 (diff) |
Don't build targets if they're not used.
Add functionality in build_test_suites.py to not build targets if
their outputs are not used in the test configurations saved in the build
context. If none of the tests reference the targets' outputs they will
not be built at all.
Note that the corresponding flags will need to be enabled for these
optimizations to take place.
Test: atest optimized_targets_test
Bug: 348489774
Change-Id: I8f0ac90e75552ae80073f13229b026c7f23476a6
Diffstat (limited to 'ci/build_test_suites_test.py')
-rw-r--r-- | ci/build_test_suites_test.py | 74 |
1 files changed, 71 insertions, 3 deletions
diff --git a/ci/build_test_suites_test.py b/ci/build_test_suites_test.py index a9ff3fbf4d..7efb154487 100644 --- a/ci/build_test_suites_test.py +++ b/ci/build_test_suites_test.py @@ -324,6 +324,55 @@ class BuildPlannerTest(unittest.TestCase): self.run_packaging_functions(build_plan), ) + def test_target_output_used_target_built(self): + build_target = 'test_target' + build_planner = self.create_build_planner( + build_targets={build_target}, + build_context=self.create_build_context( + test_context=self.get_test_context(build_target), + enabled_build_features={'test_target_unused_exclusion'}, + ), + ) + + build_plan = build_planner.create_build_plan() + + self.assertSetEqual(build_plan.build_targets, {build_target}) + + def test_target_regex_used_target_built(self): + build_target = 'test_target' + test_context = self.get_test_context(build_target) + test_context['testInfos'][0]['extraOptions'] = [{ + 'key': 'additional-files-filter', + 'values': [f'.*{build_target}.*\.zip'], + }] + build_planner = self.create_build_planner( + build_targets={build_target}, + build_context=self.create_build_context( + test_context=test_context, + enabled_build_features={'test_target_unused_exclusion'}, + ), + ) + + build_plan = build_planner.create_build_plan() + + self.assertSetEqual(build_plan.build_targets, {build_target}) + + def test_target_output_not_used_target_not_built(self): + build_target = 'test_target' + test_context = self.get_test_context(build_target) + test_context['testInfos'][0]['extraOptions'] = [] + build_planner = self.create_build_planner( + build_targets={build_target}, + build_context=self.create_build_context( + test_context=test_context, + enabled_build_features={'test_target_unused_exclusion'}, + ), + ) + + build_plan = build_planner.create_build_plan() + + self.assertSetEqual(build_plan.build_targets, set()) + def create_build_planner( self, build_targets: set[str], @@ -352,10 +401,10 @@ class BuildPlannerTest(unittest.TestCase): test_context: dict[str, any] = {}, ) -> dict[str, any]: build_context = {} - build_context['enabled_build_features'] = enabled_build_features + build_context['enabledBuildFeatures'] = enabled_build_features if optimized_build_enabled: - build_context['enabled_build_features'].add('optimized_build') - build_context['test_context'] = test_context + build_context['enabledBuildFeatures'].add('optimized_build') + build_context['testContext'] = test_context return build_context def create_args( @@ -398,6 +447,25 @@ class BuildPlannerTest(unittest.TestCase): return output + def get_test_context(self, target: str): + return { + 'testInfos': [ + { + 'name': 'atp_test', + 'target': 'test_target', + 'branch': 'branch', + 'extraOptions': [{ + 'key': 'additional-files-filter', + 'values': [f'{target}.zip'], + }], + 'command': '/tf/command', + 'extraBuildTargets': [ + 'extra_build_target', + ], + }, + ], + } + def wait_until( condition_function: Callable[[], bool], |