xref: /aosp_15_r20/external/crosvm/infra/recipes/presubmit.py (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1# Copyright 2022 The ChromiumOS Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# Runs tools/presubmit on all checks within a group
6
7import json
8
9from recipe_engine.recipe_api import Property
10from recipe_engine.post_process import DropExpectation, StatusFailure, Filter
11from PB.recipes.crosvm.presubmit import PresubmitProperties
12
13DEPS = [
14    "crosvm",
15    "recipe_engine/buildbucket",
16    "recipe_engine/context",
17    "recipe_engine/json",
18    "recipe_engine/properties",
19    "recipe_engine/raw_io",
20    "recipe_engine/step",
21]
22
23PROPERTIES = PresubmitProperties
24
25
26def RunSteps(api, properties):
27    with api.crosvm.container_build_context():
28        result = api.step(
29            "List checks to run",
30            [
31                "vpython3",
32                api.crosvm.source_dir / "tools/presubmit",
33                "--list-checks",
34                properties.group_name,
35            ],
36            stdout=api.raw_io.output_text(),
37        )
38        check_list = result.stdout.strip().split("\n")
39        for check in check_list:
40            api.crosvm.step_in_container(
41                "tools/presubmit %s" % check, ["tools/presubmit", "--no-delta", check]
42            )
43
44
45def GenTests(api):
46    yield (
47        api.test(
48            "basic",
49            api.buildbucket.ci_build(project="crosvm/crosvm"),
50        )
51        + api.properties(PresubmitProperties(group_name="basic"))
52        + api.step_data(
53            "List checks to run",
54            stdout=api.raw_io.output_text("check_a\ncheck_b"),
55        )
56        + api.post_process(Filter("List checks to run").include_re(r"tools/presubmit .*"))
57    )
58