blob: 128cb1920c686a1a8bd96a24d4dcc88902d52e26 [file] [log] [blame]
Mike Frysingerf1ba7ad2022-09-12 05:42:57 -04001# Copyright 2022 The ChromiumOS Authors
Alex Kleind4d9caa2021-11-10 15:44:52 -07002# 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):
Alex Klein1699fab2022-09-08 08:46:06 -060018 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 )
Alex Kleind4d9caa2021-11-10 15:44:52 -070025
Alex Klein1699fab2022-09-08 08:46:06 -060026 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 )
Alex Kleind4d9caa2021-11-10 15:44:52 -070034
Alex Klein1699fab2022-09-08 08:46:06 -060035 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)
Alex Kleind4d9caa2021-11-10 15:44:52 -070041
Alex Klein1699fab2022-09-08 08:46:06 -060042 return response
Alex Kleind4d9caa2021-11-10 15:44:52 -070043
44
45@faux.success(_SystemImageMetadataResponse)
46@faux.empty_error
Alex Klein1699fab2022-09-08 08:46:06 -060047@validate.exists("sysroot.path")
48@validate.require("sysroot.build_target.name")
Alex Kleind4d9caa2021-11-10 15:44:52 -070049@validate.validation_complete
50def SystemImageMetadata(input_proto, output_proto, _config):
Alex Klein1699fab2022-09-08 08:46:06 -060051 sysroot = controller_util.ParseSysroot(input_proto.sysroot)
52 build_target = controller_util.ParseBuildTarget(
53 input_proto.sysroot.build_target
54 )
Alex Kleind4d9caa2021-11-10 15:44:52 -070055
Alex Klein1699fab2022-09-08 08:46:06 -060056 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 )
Alex Kleind4d9caa2021-11-10 15:44:52 -070062
Alex Klein1699fab2022-09-08 08:46:06 -060063 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 ),
70 chrome=BuildMetadata.AshChrome(version=target_versions.chrome_version),
71 chipset=BuildMetadata.Chipset(overlay=sysroot.chipset or ""),
72 kernel=BuildMetadata.Kernel(
73 version=packages.determine_kernel_version(build_target) or ""
74 ),
75 )
Alex Kleind4d9caa2021-11-10 15:44:52 -070076
Alex Klein1699fab2022-09-08 08:46:06 -060077 output_proto.system_image.metadata.build_target.portage_build_target.CopyFrom(
78 portage_build_target
79 )
80 output_proto.system_image.metadata.package_summary.CopyFrom(package_summary)
Alex Kleind4d9caa2021-11-10 15:44:52 -070081
Alex Klein1699fab2022-09-08 08:46:06 -060082 portage_db = portage_util.PortageDB(sysroot.path)
83 for pkg in portage_db.InstalledPackages():
84 msg = output_proto.system_image.metadata.packages.add()
85 controller_util.serialize_package_info(pkg.package_info, msg)