xref: /aosp_15_r20/external/crosvm/infra/recipes/build_chromeos_hatch.py (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2022 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard Workerfrom recipe_engine.post_process import Filter
6*bb4ee6a4SAndroid Build Coastguard Worker
7*bb4ee6a4SAndroid Build Coastguard WorkerDEPS = [
8*bb4ee6a4SAndroid Build Coastguard Worker    "crosvm",
9*bb4ee6a4SAndroid Build Coastguard Worker    "depot_tools/depot_tools",
10*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/buildbucket",
11*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/context",
12*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/properties",
13*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/step",
14*bb4ee6a4SAndroid Build Coastguard Worker]
15*bb4ee6a4SAndroid Build Coastguard Worker
16*bb4ee6a4SAndroid Build Coastguard Worker
17*bb4ee6a4SAndroid Build Coastguard Workerdef RunSteps(api):
18*bb4ee6a4SAndroid Build Coastguard Worker    with api.crosvm.cros_container_build_context():
19*bb4ee6a4SAndroid Build Coastguard Worker        gitilies = api.buildbucket.build.input.gitiles_commit
20*bb4ee6a4SAndroid Build Coastguard Worker        upstream_url = "https://chromium.googlesource.com/crosvm/crosvm"
21*bb4ee6a4SAndroid Build Coastguard Worker        revision = gitilies.id or "upstream/main"
22*bb4ee6a4SAndroid Build Coastguard Worker
23*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
24*bb4ee6a4SAndroid Build Coastguard Worker            "Sync repo",
25*bb4ee6a4SAndroid Build Coastguard Worker            [
26*bb4ee6a4SAndroid Build Coastguard Worker                "repo",
27*bb4ee6a4SAndroid Build Coastguard Worker                "sync",
28*bb4ee6a4SAndroid Build Coastguard Worker                "-j8",
29*bb4ee6a4SAndroid Build Coastguard Worker            ],
30*bb4ee6a4SAndroid Build Coastguard Worker            cros=True,
31*bb4ee6a4SAndroid Build Coastguard Worker        )
32*bb4ee6a4SAndroid Build Coastguard Worker
33*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
34*bb4ee6a4SAndroid Build Coastguard Worker            "Add crosvm upstream remote",
35*bb4ee6a4SAndroid Build Coastguard Worker            ["git", "remote", "add", "upstream", upstream_url],
36*bb4ee6a4SAndroid Build Coastguard Worker            cros=True,
37*bb4ee6a4SAndroid Build Coastguard Worker        )
38*bb4ee6a4SAndroid Build Coastguard Worker
39*bb4ee6a4SAndroid Build Coastguard Worker        # Ignore errors from unshallow as repo sync sometimes resulted in full git history
40*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
41*bb4ee6a4SAndroid Build Coastguard Worker            "Unshallow crosvm as needed",
42*bb4ee6a4SAndroid Build Coastguard Worker            [
43*bb4ee6a4SAndroid Build Coastguard Worker                "bash",
44*bb4ee6a4SAndroid Build Coastguard Worker                "-c",
45*bb4ee6a4SAndroid Build Coastguard Worker                "for i in $(seq 1 5);do if [[ $(git rev-parse --is-shallow-repository) == 'true' ]]; then git fetch cros --unshallow; else break; fi; done",
46*bb4ee6a4SAndroid Build Coastguard Worker            ],
47*bb4ee6a4SAndroid Build Coastguard Worker            cros=True,
48*bb4ee6a4SAndroid Build Coastguard Worker        )
49*bb4ee6a4SAndroid Build Coastguard Worker
50*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container("Print current git log", ["git", "log"], cros=True)
51*bb4ee6a4SAndroid Build Coastguard Worker
52*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
53*bb4ee6a4SAndroid Build Coastguard Worker            "Fetch upstream crosvm", ["git", "fetch", "upstream"], cros=True
54*bb4ee6a4SAndroid Build Coastguard Worker        )
55*bb4ee6a4SAndroid Build Coastguard Worker
56*bb4ee6a4SAndroid Build Coastguard Worker        # Apply unmerged commit from upstream to crOS tree
57*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
58*bb4ee6a4SAndroid Build Coastguard Worker            "Cherry-pick from upstream revision", ["git", "cherry-pick", ".." + revision], cros=True
59*bb4ee6a4SAndroid Build Coastguard Worker        )
60*bb4ee6a4SAndroid Build Coastguard Worker
61*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
62*bb4ee6a4SAndroid Build Coastguard Worker            "cros-workon-hatch crosvm",
63*bb4ee6a4SAndroid Build Coastguard Worker            ["cros_sdk", "cros-workon-hatch", "start", "crosvm"],
64*bb4ee6a4SAndroid Build Coastguard Worker            cros=True,
65*bb4ee6a4SAndroid Build Coastguard Worker        )
66*bb4ee6a4SAndroid Build Coastguard Worker
67*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
68*bb4ee6a4SAndroid Build Coastguard Worker            "Build crosvm",
69*bb4ee6a4SAndroid Build Coastguard Worker            [
70*bb4ee6a4SAndroid Build Coastguard Worker                "cros_sdk",
71*bb4ee6a4SAndroid Build Coastguard Worker                "build_packages",
72*bb4ee6a4SAndroid Build Coastguard Worker                "--board=hatch",
73*bb4ee6a4SAndroid Build Coastguard Worker                "crosvm",
74*bb4ee6a4SAndroid Build Coastguard Worker            ],
75*bb4ee6a4SAndroid Build Coastguard Worker            cros=True,
76*bb4ee6a4SAndroid Build Coastguard Worker        )
77*bb4ee6a4SAndroid Build Coastguard Worker
78*bb4ee6a4SAndroid Build Coastguard Worker
79*bb4ee6a4SAndroid Build Coastguard Workerdef GenTests(api):
80*bb4ee6a4SAndroid Build Coastguard Worker    filter_steps = Filter("Build crosvm")
81*bb4ee6a4SAndroid Build Coastguard Worker    yield (
82*bb4ee6a4SAndroid Build Coastguard Worker        api.test(
83*bb4ee6a4SAndroid Build Coastguard Worker            "build_chromeos_hatch",
84*bb4ee6a4SAndroid Build Coastguard Worker            api.buildbucket.ci_build(project="crosvm/crosvm"),
85*bb4ee6a4SAndroid Build Coastguard Worker        )
86*bb4ee6a4SAndroid Build Coastguard Worker        + api.post_process(filter_steps)
87*bb4ee6a4SAndroid Build Coastguard Worker    )
88