Mike Frysinger | f1ba7ad | 2022-09-12 05:42:57 -0400 | [diff] [blame^] | 1 | # Copyright 2022 The ChromiumOS Authors |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 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 | |
| 7 | from chromite.api import faux |
| 8 | from chromite.api import validate |
| 9 | from chromite.api.controller import controller_util |
| 10 | from chromite.api.gen.chromiumos.build.api import portage_pb2 |
| 11 | from chromite.api.gen.chromiumos.build.api import system_image_pb2 |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 12 | from chromite.lib import portage_util |
Mike Frysinger | 1cc8f1f | 2022-04-28 22:40:40 -0400 | [diff] [blame] | 13 | from chromite.lib.parser import package_info |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 14 | from chromite.service import packages |
| 15 | |
| 16 | |
| 17 | def _SystemImageMetadataResponse(_input_proto, output_proto, _config): |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 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 | ) |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 25 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 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 | ) |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 34 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 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) |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 41 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 42 | return response |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 43 | |
| 44 | |
| 45 | @faux.success(_SystemImageMetadataResponse) |
| 46 | @faux.empty_error |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 47 | @validate.exists("sysroot.path") |
| 48 | @validate.require("sysroot.build_target.name") |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 49 | @validate.validation_complete |
| 50 | def SystemImageMetadata(input_proto, output_proto, _config): |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 51 | sysroot = controller_util.ParseSysroot(input_proto.sysroot) |
| 52 | build_target = controller_util.ParseBuildTarget( |
| 53 | input_proto.sysroot.build_target |
| 54 | ) |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 55 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 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 | ) |
Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 62 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 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 | ), |
| 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 Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 76 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 77 | 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 Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame] | 81 | |
Alex Klein | 1699fab | 2022-09-08 08:46:06 -0600 | [diff] [blame] | 82 | 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) |