Alex Klein | d4d9caa | 2021-11-10 15:44:52 -0700 | [diff] [blame^] | 1 | # 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 | |
| 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 |
| 12 | from chromite.lib.parser import package_info |
| 13 | |
| 14 | from chromite.lib import portage_util |
| 15 | from chromite.service import packages |
| 16 | |
| 17 | |
| 18 | def _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 |
| 51 | def 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) |