blob: 3578aa4264c615012bdd077145113849617ac94b [file] [log] [blame] [edit]
# 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