Build API: Add logic to handle toolchain changes
Updated chromite build API protos to include new toolchain_change field
BUG=b:147589410
TEST=None
Change-Id: I51eafa718d3e59ab6abe78d5873f43670fb064a8
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1997261
Tested-by: Chris McDonald <cjmcdonald@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
Auto-Submit: Chris McDonald <cjmcdonald@chromium.org>
diff --git a/api/controller/sdk.py b/api/controller/sdk.py
index f017fd9..60f5a96 100644
--- a/api/controller/sdk.py
+++ b/api/controller/sdk.py
@@ -72,9 +72,13 @@
"""
build_source = input_proto.flags.build_source
targets = [target.name for target in input_proto.toolchain_targets]
+ toolchain_changed = input_proto.flags.toolchain_changed
- args = sdk.UpdateArguments(build_source=build_source,
- toolchain_targets=targets)
+ args = sdk.UpdateArguments(
+ build_source=build_source,
+ toolchain_targets=targets,
+ toolchain_changed=toolchain_changed)
+
version = sdk.Update(args)
if version:
diff --git a/api/controller/sdk_unittest.py b/api/controller/sdk_unittest.py
index cd710d2..01b6203 100644
--- a/api/controller/sdk_unittest.py
+++ b/api/controller/sdk_unittest.py
@@ -169,10 +169,12 @@
# No boards and flags False.
request = self._GetRequest(build_source=False)
sdk_controller.Update(request, self.response, self.api_config)
- args_patch.assert_called_with(build_source=False, toolchain_targets=[])
+ args_patch.assert_called_with(
+ build_source=False, toolchain_targets=[], toolchain_changed=False)
# Multiple boards and flags True.
targets = ['board1', 'board2']
request = self._GetRequest(build_source=True, targets=targets)
sdk_controller.Update(request, self.response, self.api_config)
- args_patch.assert_called_with(build_source=True, toolchain_targets=targets)
+ args_patch.assert_called_with(
+ build_source=True, toolchain_targets=targets, toolchain_changed=False)
diff --git a/api/controller/sysroot.py b/api/controller/sysroot.py
index f620a69..6fe5bee 100644
--- a/api/controller/sysroot.py
+++ b/api/controller/sysroot.py
@@ -88,7 +88,8 @@
@validate.validation_complete
def InstallToolchain(input_proto, output_proto, _config):
"""Install the toolchain into a sysroot."""
- compile_source = input_proto.flags.compile_source
+ compile_source = (
+ input_proto.flags.compile_source or input_proto.flags.toolchain_changed)
sysroot_path = input_proto.sysroot.path
build_target_name = input_proto.sysroot.build_target.name
@@ -120,9 +121,13 @@
@metrics.collect_metrics
def InstallPackages(input_proto, output_proto, _config):
"""Install packages into a sysroot, building as necessary and permitted."""
- compile_source = input_proto.flags.compile_source
+ compile_source = (
+ input_proto.flags.compile_source or input_proto.flags.toolchain_changed)
event_file = input_proto.flags.event_file
- use_goma = input_proto.flags.use_goma
+ # A new toolchain version will not yet have goma support, so goma must be
+ # disabled when we are testing toolchain changes.
+ use_goma = (
+ input_proto.flags.use_goma and not input_proto.flags.toolchain_changed)
target_sysroot = sysroot_lib.Sysroot(input_proto.sysroot.path)
build_target = controller_util.ParseBuildTarget(