blob: 28e97d3fcc6df14e4718d9c019408ecd2fd52d77 [file] [log] [blame]
Trent Aptedbd3cb412023-08-18 11:37:02 +10001# Copyright 2023 The ChromiumOS Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""SDK Subtools builder Controller.
6
7Build API endpoint for converting protos to/from chromite.service.sdk_subtools.
8"""
9
10from typing import Optional
11
12from chromite.api import api_config
13from chromite.api import controller
14from chromite.api import faux
15from chromite.api import validate
16from chromite.api.controller import controller_util
17from chromite.api.gen.chromite.api import sdk_subtools_pb2
18from chromite.lib import build_target_lib
19from chromite.lib import sysroot_lib
20from chromite.service import sdk_subtools
21
22
23@faux.empty_success
24@validate.validation_complete
25def BuildSdkSubtools(
26 _input_proto: sdk_subtools_pb2.BuildSdkSubtoolsRequest,
27 output_proto: sdk_subtools_pb2.BuildSdkSubtoolsResponse,
28 config: api_config.ApiConfig,
29) -> Optional[int]:
30 """Setup, and update packages in an SDK, then bundle and export subtools."""
31 build_target = build_target_lib.BuildTarget(
32 # Note `input_proto.chroot`` is not passed to `build_root` here:
33 # api.router.py clears the `chroot` field when entering the chroot, so
34 # it should always be empty when this endpoint is invoked.
35 name="amd64-subtools-host",
36 build_root="/",
37 )
38 if config.validate_only:
39 return controller.RETURN_CODE_VALID_INPUT
40
41 sdk_subtools.setup_base_sdk(build_target, setup_chroot=True, sudo=True)
42
43 try:
44 # Use shellcheck as a placeholder for testing. Eventually this will be
45 # a virtual package target.
46 sdk_subtools.update_packages(["dev-util/shellcheck"])
47 except sysroot_lib.PackageInstallError as e:
48 if not e.failed_packages:
49 # No packages to report, so just exit with an error code.
50 return controller.RETURN_CODE_COMPLETED_UNSUCCESSFULLY
51
52 host_sysroot = sysroot_lib.Sysroot("/")
53 controller_util.retrieve_package_log_paths(
54 e.failed_packages, output_proto, host_sysroot
55 )
56
57 return controller.RETURN_CODE_UNSUCCESSFUL_RESPONSE_AVAILABLE
58
59 sdk_subtools.bundle_and_export()
60 return None