blob: c5c8086c78414fc001f114a361534c49726264d3 [file] [log] [blame]
Alex Kleind4d9caa2021-11-10 15:44:52 -07001# Copyright 2022 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Build metadata operations."""
6
7from chromite.api import faux
8from chromite.api import validate
9from chromite.api.controller import controller_util
10from chromite.api.gen.chromiumos.build.api import portage_pb2
11from chromite.api.gen.chromiumos.build.api import system_image_pb2
12from chromite.lib.parser import package_info
13
14from chromite.lib import portage_util
15from chromite.service import packages
16
17
18def _SystemImageMetadataResponse(_input_proto, output_proto, _config):
19 response = system_image_pb2.SystemImage()
20 portage_build_target = portage_pb2.Portage.BuildTarget(
21 overlay_name='overlay-build-target',
22 profile_name='base',
23 use_flags=['use', 'flag'],
24 features=['feature'],
25 )
26
27 BuildMetadata = system_image_pb2.SystemImage.BuildMetadata
28 package_summary = BuildMetadata.PackageSummary(
29 arc=BuildMetadata.Arc(version='1.2.3', branch='mock'),
30 chrome=BuildMetadata.AshChrome(version='1.2.3.4'),
31 chipset=BuildMetadata.Chipset(overlay='mock'),
32 kernel=BuildMetadata.Kernel(version='1.2'),
33 toolchain=BuildMetadata.Toolchain(version=None),
34 )
35
36 output_proto.metadata.build_target = portage_build_target
37 output_proto.metadata.package_summary = package_summary
38 for cpvr in ['cat/pkg-1.2.3-r4', 'foo/bar-5.6.7-r8']:
39 pkg = package_info.parse(cpvr)
40 msg = output_proto.metadata.packages.add()
41 controller_util.serialize_package_info(pkg, msg)
42
43 return response
44
45
46@faux.success(_SystemImageMetadataResponse)
47@faux.empty_error
48@validate.exists('sysroot.path')
49@validate.require('sysroot.build_target.name')
50@validate.validation_complete
51def SystemImageMetadata(input_proto, output_proto, _config):
52 sysroot = controller_util.ParseSysroot(input_proto.sysroot)
53 build_target = controller_util.ParseBuildTarget(
54 input_proto.sysroot.build_target)
55
56 portage_build_target = portage_pb2.Portage.BuildTarget(
57 overlay_name=getattr(sysroot.build_target_overlay, 'name', ''),
58 profile_name=sysroot.profile_name,
59 use_flags=sysroot.use_flags,
60 features=sysroot.features,
61 )
62
63 target_versions = packages.get_target_versions(build_target)
64 BuildMetadata = system_image_pb2.SystemImage.BuildMetadata
65 package_summary = BuildMetadata.PackageSummary(
66 arc=BuildMetadata.Arc(
67 version=target_versions.android_version,
68 branch=target_versions.android_branch),
69 chrome=BuildMetadata.AshChrome(version=target_versions.chrome_version),
70 chipset=BuildMetadata.Chipset(overlay=sysroot.chipset or ''),
71 kernel=BuildMetadata.Kernel(
72 version=packages.determine_kernel_version(build_target) or ''),
73 )
74
75 output_proto.system_image.metadata.build_target.portage_build_target.CopyFrom(
76 portage_build_target)
77 output_proto.system_image.metadata.package_summary.CopyFrom(package_summary)
78
79 portage_db = portage_util.PortageDB(sysroot.path)
80 for pkg in portage_db.InstalledPackages():
81 msg = output_proto.system_image.metadata.packages.add()
82 controller_util.serialize_package_info(pkg.package_info, msg)