Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/infra/recipes/build_linux.py
5392 views
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
import json
6
7
from recipe_engine.recipe_api import Property
8
from recipe_engine.post_process import DropExpectation, StatusFailure, Filter
9
from PB.recipes.crosvm.build_linux import BuildLinuxProperties
10
11
DEPS = [
12
"crosvm",
13
"recipe_engine/buildbucket",
14
"recipe_engine/context",
15
"recipe_engine/json",
16
"recipe_engine/properties",
17
"recipe_engine/raw_io",
18
"recipe_engine/step",
19
]
20
21
PROPERTIES = BuildLinuxProperties
22
23
24
def collect_binary_sizes(api, properties):
25
release_build_result = api.crosvm.step_in_container(
26
"Build crosvm releases",
27
[
28
"./tools/build_release",
29
"--json",
30
"--platform=" + str(properties.test_arch),
31
"--build-profile",
32
"chromeos",
33
],
34
stdout=api.raw_io.output_text(name="Obtain release build output", add_output_log=True),
35
)
36
37
if release_build_result.stdout and json.loads(
38
release_build_result.stdout.strip().splitlines()[-1]
39
):
40
binary_sizes = {}
41
builder_name = api.buildbucket.builder_name
42
release_build_result_dict = json.loads(release_build_result.stdout.strip().splitlines()[-1])
43
for target_name, binary_path in release_build_result_dict.items():
44
binary_size_result = api.crosvm.step_in_container(
45
"Get binary size for {}".format(target_name),
46
[
47
"./tools/infra/binary_size",
48
"--builder-name",
49
builder_name,
50
"--target-name",
51
target_name,
52
"--target-path",
53
binary_path,
54
"--base-dir",
55
"/scratch/cargo_target/crosvm",
56
# Only upload binary size in postsubmit
57
*(("--upload",) if properties.profile == "postsubmit" else tuple()),
58
"--builder-name",
59
api.buildbucket.builder_name,
60
"--log-url",
61
api.buildbucket.build_url(),
62
"--build-version",
63
api.buildbucket.gitiles_commit.id,
64
],
65
infra_step=True,
66
stdout=api.raw_io.output_text(),
67
)
68
binary_sizes.update(json.loads(binary_size_result.stdout.strip().splitlines()[-1]))
69
70
api.step("Write binary sizes into output", None, infra_step=True)
71
api.step.active_result.presentation.properties["binary_sizes"] = binary_sizes
72
73
74
def RunSteps(api, properties):
75
with api.crosvm.container_build_context():
76
presubmit_group = f"linux_{properties.test_arch}"
77
result = api.step(
78
"List checks to run",
79
[
80
"vpython3",
81
api.crosvm.source_dir / "tools/presubmit",
82
"--list-checks",
83
presubmit_group,
84
],
85
stdout=api.raw_io.output_text(),
86
)
87
check_list = result.stdout.strip().split("\n")
88
for check in check_list:
89
with api.context(env={"NEXTEST_PROFILE": properties.profile}):
90
api.crosvm.step_in_container(
91
"tools/presubmit %s" % check, ["tools/presubmit", "--no-delta", check]
92
)
93
94
with api.step.nest("Collect binary sizes"):
95
collect_binary_sizes(api, properties)
96
97
98
def GenTests(api):
99
yield (
100
api.test(
101
"build_x86_64",
102
api.buildbucket.ci_build(project="crosvm/crosvm"),
103
)
104
+ api.properties(BuildLinuxProperties(test_arch="x86_64", profile="postsubmit"))
105
+ api.step_data(
106
"Collect binary sizes.Build crosvm releases",
107
stdout=api.raw_io.output_text(
108
"""Using existing container (82e9d24cd4f0).
109
$ docker exec 82e9d24cd4f0 /tools/entrypoint.sh ./tools/build_release --json --platform=x86_64
110
{"crosvm": "/scratch/cargo_target/crosvm/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/release/crosvm"}"""
111
),
112
)
113
+ api.step_data(
114
"Collect binary sizes.Get binary size for crosvm",
115
stdout=api.raw_io.output_text(
116
"""Using existing container (291baf4496c5).
117
{"/scratch/cargo_target/crosvm/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/release/crosvm": 22783488}"""
118
),
119
)
120
+ api.step_data(
121
"List checks to run",
122
stdout=api.raw_io.output_text("check_a\ncheck_b"),
123
)
124
+ api.post_process(
125
Filter("List checks to run")
126
.include_re(r"tools/presubmit .*")
127
.include_re(r"Collect binary sizes.*")
128
)
129
)
130
131