| # Copyright 2023 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Handles ChromeOS LKGM image version detection.""" |
| |
| import os |
| |
| from chromite.api import faux |
| from chromite.api import validate |
| from chromite.lib import chrome_lkgm |
| from chromite.lib import path_util |
| |
| |
| def _find_lkgm_success(_input_proto, output_proto, _config_proto): |
| """Mock for a success case.""" |
| output_proto.config_name = "boardname-release" |
| output_proto.full_version = "111.0.0.5678" |
| output_proto.chromeos_lkgm = "111.0.0.5679" |
| |
| |
| def _find_lkgm_error(_input_proto, output_proto, _config_proto): |
| """Mock for a failed case.""" |
| output_proto.error = "something went wrong" |
| |
| |
| @faux.success(_find_lkgm_success) |
| @faux.error(_find_lkgm_error) |
| @validate.require("build_target") |
| @validate.require("fallback_versions") |
| @validate.validation_complete |
| def FindLkgm(input_proto, output_proto, _config_proto): |
| """Find LKGM or older version of image for a board.""" |
| checkout = path_util.DetermineCheckout( |
| input_proto.chrome_src or os.getcwd() |
| ) |
| |
| f = chrome_lkgm.ChromeOSVersionFinder( |
| input_proto.cache_dir or None, |
| input_proto.build_target.name, |
| fallback_versions=input_proto.fallback_versions, |
| chrome_src=input_proto.chrome_src, |
| use_external_config=input_proto.use_external_config, |
| ) |
| output_proto.config_name = f.config_name |
| |
| try: |
| lkgm_version = chrome_lkgm.GetChromeLkgm(input_proto.chrome_src) |
| except FileNotFoundError as e: |
| output_proto.error = str(e) |
| return |
| |
| if not lkgm_version: |
| output_proto.error = str( |
| chrome_lkgm.MissingLkgmFile(checkout.chrome_src_dir) |
| ) |
| return |
| |
| output_proto.chromeos_lkgm = lkgm_version |
| full_version = f.GetFullVersionFromLatest(lkgm_version) |
| if not full_version: |
| output_proto.error = "failed to get full version" |
| return |
| output_proto.full_version = full_version |