blob: 02cd434ef27edb60a1eb211716b430ad2cb891fa [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
Alex Kleind4d9caa2021-11-10 15:44:52 -070012from chromite.lib import portage_util
Mike Frysinger1cc8f1f2022-04-28 22:40:40 -040013from chromite.lib.parser import package_info
Alex Kleind4d9caa2021-11-10 15:44:52 -070014from chromite.service import packages
15
16
17def _SystemImageMetadataResponse(_input_proto, output_proto, _config):
18 response = system_image_pb2.SystemImage()
19 portage_build_target = portage_pb2.Portage.BuildTarget(
20 overlay_name='overlay-build-target',
21 profile_name='base',
22 use_flags=['use', 'flag'],
23 features=['feature'],
24 )
25
26 BuildMetadata = system_image_pb2.SystemImage.BuildMetadata
27 package_summary = BuildMetadata.PackageSummary(
28 arc=BuildMetadata.Arc(version='1.2.3', branch='mock'),
29 chrome=BuildMetadata.AshChrome(version='1.2.3.4'),
30 chipset=BuildMetadata.Chipset(overlay='mock'),
31 kernel=BuildMetadata.Kernel(version='1.2'),
32 toolchain=BuildMetadata.Toolchain(version=None),
33 )
34
35 output_proto.metadata.build_target = portage_build_target
36 output_proto.metadata.package_summary = package_summary
37 for cpvr in ['cat/pkg-1.2.3-r4', 'foo/bar-5.6.7-r8']:
38 pkg = package_info.parse(cpvr)
39 msg = output_proto.metadata.packages.add()
40 controller_util.serialize_package_info(pkg, msg)
41
42 return response
43
44
45@faux.success(_SystemImageMetadataResponse)
46@faux.empty_error
47@validate.exists('sysroot.path')
48@validate.require('sysroot.build_target.name')
49@validate.validation_complete
50def SystemImageMetadata(input_proto, output_proto, _config):
51 sysroot = controller_util.ParseSysroot(input_proto.sysroot)
52 build_target = controller_util.ParseBuildTarget(
53 input_proto.sysroot.build_target)
54
55 portage_build_target = portage_pb2.Portage.BuildTarget(
56 overlay_name=getattr(sysroot.build_target_overlay, 'name', ''),
57 profile_name=sysroot.profile_name,
58 use_flags=sysroot.use_flags,
59 features=sysroot.features,
60 )
61
62 target_versions = packages.get_target_versions(build_target)
63 BuildMetadata = system_image_pb2.SystemImage.BuildMetadata
64 package_summary = BuildMetadata.PackageSummary(
65 arc=BuildMetadata.Arc(
66 version=target_versions.android_version,
67 branch=target_versions.android_branch),
68 chrome=BuildMetadata.AshChrome(version=target_versions.chrome_version),
69 chipset=BuildMetadata.Chipset(overlay=sysroot.chipset or ''),
70 kernel=BuildMetadata.Kernel(
71 version=packages.determine_kernel_version(build_target) or ''),
72 )
73
74 output_proto.system_image.metadata.build_target.portage_build_target.CopyFrom(
75 portage_build_target)
76 output_proto.system_image.metadata.package_summary.CopyFrom(package_summary)
77
78 portage_db = portage_util.PortageDB(sysroot.path)
79 for pkg in portage_db.InstalledPackages():
80 msg = output_proto.system_image.metadata.packages.add()
81 controller_util.serialize_package_info(pkg.package_info, msg)