blob: 64cfd5daf1ea1842d03bda782b3f4b27893497e1 [file] [log] [blame]
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from recipe_engine import recipe_api
class LKGApi(recipe_api.RecipeApi):
"""APIs for retrieving last-known-good entities."""
def revision(
self, step_name, builders, gitiles_ref=None, search_range=100, test_data=None
):
"""Get the last-known-good revision for a set of builders.
Args:
step_name (str): Name of the step.
builders (seq(str)): A sequence of fully-qualified buildbucket
builder names.
gitiles_ref (str): If specified, filter by this gitiles ref, e.g.
refs/heads/main.
search_range (int): Number of builds per builder to search.
Returns:
str: Last-known-good revision.
"""
args = ["revision", "-search-range", search_range]
for builder in builders:
args += ["-builder", builder]
return self._run(
step_name,
args,
gitiles_ref=gitiles_ref,
step_test_data=lambda: self.m.raw_io.test_api.stream_output_text(test_data),
).stdout.strip()
def build(self, step_name, builder, gitiles_ref=None, test_data=None):
"""Get the last-known-good buildbucket ID for a builder.
Args:
step_name (str): Name of the step.
builder (str): A fully-qualified buildbucket builder name.
gitiles_ref (str): If specified, filter by this gitiles ref, e.g.
refs/heads/main.
Returns:
str: Last-known-good buildbucket build ID.
"""
args = ["build", "-builder", builder]
return self._run(
step_name,
args,
gitiles_ref=gitiles_ref,
step_test_data=lambda: self.m.raw_io.test_api.stream_output_text(test_data),
).stdout.strip()
def _run(self, step_name, args, gitiles_ref, step_test_data=None):
cmd = [self._lkg_tool]
cmd += args
if gitiles_ref:
cmd += ["-gitiles-ref", gitiles_ref]
return self.m.step(
step_name,
cmd,
stdout=self.m.raw_io.output_text(),
step_test_data=step_test_data,
)
@property
def _lkg_tool(self):
return self.m.ensure_tool("lkg", self.resource("tool_manifest.json"))