xref: /aosp_15_r20/external/crosvm/infra/README.md (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Luci Infrastructure
2*bb4ee6a4SAndroid Build Coastguard Worker
3*bb4ee6a4SAndroid Build Coastguard WorkerThis directory contains the configuration and build recipes run by our luci infrastructure for CI
4*bb4ee6a4SAndroid Build Coastguard Workerand presubmit testing.
5*bb4ee6a4SAndroid Build Coastguard Worker
6*bb4ee6a4SAndroid Build Coastguard WorkerNote: Luci applies config and recipes changes asynchronously. Do not submit changes to this
7*bb4ee6a4SAndroid Build Coastguard Workerdirectory in the same commit as changes to other crosvm source.
8*bb4ee6a4SAndroid Build Coastguard Worker
9*bb4ee6a4SAndroid Build Coastguard Worker## Recipes
10*bb4ee6a4SAndroid Build Coastguard Worker
11*bb4ee6a4SAndroid Build Coastguard Worker### Recipe Documentation
12*bb4ee6a4SAndroid Build Coastguard Worker
13*bb4ee6a4SAndroid Build Coastguard WorkerA few links to relevant documentation needed to write recipes:
14*bb4ee6a4SAndroid Build Coastguard Worker
15*bb4ee6a4SAndroid Build Coastguard Worker- [Recipe Engine](https://chromium.googlesource.com/infra/luci/recipes-py.git/+/HEAD/README.recipes.md)
16*bb4ee6a4SAndroid Build Coastguard Worker- [Depot Tools Recipes](https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/HEAD/recipes/README.recipes.md))
17*bb4ee6a4SAndroid Build Coastguard Worker- [ChromiumOS Recipes](https://chromium.googlesource.com/chromiumos/infra/recipes.git/+/HEAD/README.recipes.md)
18*bb4ee6a4SAndroid Build Coastguard Worker
19*bb4ee6a4SAndroid Build Coastguard WorkerLuci also provides a
20*bb4ee6a4SAndroid Build Coastguard Worker[User Guide](https://chromium.googlesource.com/infra/luci/recipes-py/+/master/doc/user_guide.md) and
21*bb4ee6a4SAndroid Build Coastguard Worker[Walkthrough](https://chromium.googlesource.com/infra/luci/recipes-py/+/refs/heads/main/doc/walkthrough.md)
22*bb4ee6a4SAndroid Build Coastguard Workerfor getting started with recipes.
23*bb4ee6a4SAndroid Build Coastguard Worker
24*bb4ee6a4SAndroid Build Coastguard WorkerFor writing tests, documentation can be found in the
25*bb4ee6a4SAndroid Build Coastguard Worker[Recipe test API](https://chromium.googlesource.com/infra/luci/recipes-py/+/HEAD/recipe_engine/recipe_test_api.py)
26*bb4ee6a4SAndroid Build Coastguard Workerand
27*bb4ee6a4SAndroid Build Coastguard Worker[Post Process API](https://chromium.googlesource.com/infra/luci/recipes-py/+/HEAD/recipe_engine/post_process.py)
28*bb4ee6a4SAndroid Build Coastguard Worker
29*bb4ee6a4SAndroid Build Coastguard Worker### Running recipe tests
30*bb4ee6a4SAndroid Build Coastguard Worker
31*bb4ee6a4SAndroid Build Coastguard WorkerRecipes must have 100% code coverage to have tests pass. Tests can be run with:
32*bb4ee6a4SAndroid Build Coastguard Worker
33*bb4ee6a4SAndroid Build Coastguard Worker```
34*bb4ee6a4SAndroid Build Coastguard Workercd infra && ./recipes.py test run
35*bb4ee6a4SAndroid Build Coastguard Worker```
36*bb4ee6a4SAndroid Build Coastguard Worker
37*bb4ee6a4SAndroid Build Coastguard WorkerMost tests execute a few example invocations, record the commands that would be executed and compare
38*bb4ee6a4SAndroid Build Coastguard Workerthem to the json files in `*.expected`. This allows developers to catch unwanted side-effects of
39*bb4ee6a4SAndroid Build Coastguard Workertheir changes.
40*bb4ee6a4SAndroid Build Coastguard Worker
41*bb4ee6a4SAndroid Build Coastguard WorkerTo regenerate the expectation files, run:
42*bb4ee6a4SAndroid Build Coastguard Worker
43*bb4ee6a4SAndroid Build Coastguard Worker```
44*bb4ee6a4SAndroid Build Coastguard Workercd infra && ./recipes.py test train
45*bb4ee6a4SAndroid Build Coastguard Worker```
46*bb4ee6a4SAndroid Build Coastguard Worker
47*bb4ee6a4SAndroid Build Coastguard WorkerThen verify the `git diff` to make sure all changes to outcomes are intentional.
48*bb4ee6a4SAndroid Build Coastguard Worker
49*bb4ee6a4SAndroid Build Coastguard Worker### Testing recipes locally
50*bb4ee6a4SAndroid Build Coastguard Worker
51*bb4ee6a4SAndroid Build Coastguard WorkerWe try to build our recipes to work well locally, so for example build_linux.py can be invoked in
52*bb4ee6a4SAndroid Build Coastguard Workerthe recipe engine via:
53*bb4ee6a4SAndroid Build Coastguard Worker
54*bb4ee6a4SAndroid Build Coastguard Worker```
55*bb4ee6a4SAndroid Build Coastguard Workercd infra && ./recipes.py run build_linux
56*bb4ee6a4SAndroid Build Coastguard Worker```
57*bb4ee6a4SAndroid Build Coastguard Worker
58*bb4ee6a4SAndroid Build Coastguard WorkerWhen run locally, recipes that check out crosvm, will run against the current HEAD of the main
59*bb4ee6a4SAndroid Build Coastguard Workerbranch.
60*bb4ee6a4SAndroid Build Coastguard Worker
61*bb4ee6a4SAndroid Build Coastguard WorkerThe recipe will run in the local `infra/.recipe_deps/recipe_engine/workdir` directory and is
62*bb4ee6a4SAndroid Build Coastguard Workerpreserved between runs in the same way data is preserved on bots, so incremental builds or the use
63*bb4ee6a4SAndroid Build Coastguard Workerof cached files can be tested.
64*bb4ee6a4SAndroid Build Coastguard Worker
65*bb4ee6a4SAndroid Build Coastguard Worker### Testing recipes on a bot (Googlers only)
66*bb4ee6a4SAndroid Build Coastguard Worker
67*bb4ee6a4SAndroid Build Coastguard WorkerNote: See internal [crosvm/infra](http://go/crosvm/infra) documentation on access control.
68*bb4ee6a4SAndroid Build Coastguard Worker
69*bb4ee6a4SAndroid Build Coastguard WorkerSome things cannot be tested locally and need to be run on one of our build bots. This can be done
70*bb4ee6a4SAndroid Build Coastguard Workerwith the [led](http://go/luci-how-to-led) tool.
71*bb4ee6a4SAndroid Build Coastguard Worker
72*bb4ee6a4SAndroid Build Coastguard WorkerCommonly used led commands are:
73*bb4ee6a4SAndroid Build Coastguard Worker
74*bb4ee6a4SAndroid Build Coastguard Worker- `led get-builder $NAME` will download and output the job template for that builder.
75*bb4ee6a4SAndroid Build Coastguard Worker- `led get-build $BBID` will download the job definition of a previous build.
76*bb4ee6a4SAndroid Build Coastguard Worker- `led edit-recipe-bundle` will update the job to use your local version recipes
77*bb4ee6a4SAndroid Build Coastguard Worker- `led edit-cr-cl` will update the job to run on a gerrit change
78*bb4ee6a4SAndroid Build Coastguard Worker- `led launch` launches a new job using the input job definition.
79*bb4ee6a4SAndroid Build Coastguard Worker
80*bb4ee6a4SAndroid Build Coastguard WorkerImportant: Changes to recipes are applied separately from changes to crosvm code.
81*bb4ee6a4SAndroid Build Coastguard Worker
82*bb4ee6a4SAndroid Build Coastguard Worker#### Testing recipe changes on post-submit builders
83*bb4ee6a4SAndroid Build Coastguard Worker
84*bb4ee6a4SAndroid Build Coastguard WorkerTo test a local recipe change, you can launch a post-submit build using `led`. First `git commit`
85*bb4ee6a4SAndroid Build Coastguard Workeryour recipe changes locally, then combine the led commands to:
86*bb4ee6a4SAndroid Build Coastguard Worker
87*bb4ee6a4SAndroid Build Coastguard Worker```
88*bb4ee6a4SAndroid Build Coastguard Workerled get-builder luci.crosvm.ci:linux_x86_64
89*bb4ee6a4SAndroid Build Coastguard Worker | led-edit-recipe-bundle
90*bb4ee6a4SAndroid Build Coastguard Worker | led launch
91*bb4ee6a4SAndroid Build Coastguard Worker```
92*bb4ee6a4SAndroid Build Coastguard Worker
93*bb4ee6a4SAndroid Build Coastguard WorkerThis will run the `linux_x86_64` builder on the current `main` revision of crosvm using the local
94*bb4ee6a4SAndroid Build Coastguard Workerversion of recipes.
95*bb4ee6a4SAndroid Build Coastguard Worker
96*bb4ee6a4SAndroid Build Coastguard WorkerImportant: Changes to crosvm source outside of recipes will not be part of the build.
97*bb4ee6a4SAndroid Build Coastguard Worker
98*bb4ee6a4SAndroid Build Coastguard Worker#### Testing recipe and source changes on pre-submit builders
99*bb4ee6a4SAndroid Build Coastguard Worker
100*bb4ee6a4SAndroid Build Coastguard WorkerIf we want to test a combination of both recipe and source changes, we can test those on a
101*bb4ee6a4SAndroid Build Coastguard Workerpre-submit builder, which patch in a gerrit change to test.
102*bb4ee6a4SAndroid Build Coastguard Worker
103*bb4ee6a4SAndroid Build Coastguard WorkerWe can specify that gerrit change via `led edit-cr-cl`.
104*bb4ee6a4SAndroid Build Coastguard Worker
105*bb4ee6a4SAndroid Build Coastguard WorkerSo to test, first `git commit` and `./tools/cl upload` your local changes. Then build a job
106*bb4ee6a4SAndroid Build Coastguard Workerdefinition to run:
107*bb4ee6a4SAndroid Build Coastguard Worker
108*bb4ee6a4SAndroid Build Coastguard Worker```
109*bb4ee6a4SAndroid Build Coastguard Workerled get-builder luci.crosvm.try:linux_x86_64
110*bb4ee6a4SAndroid Build Coastguard Worker | led-edit-recipe-bundle
111*bb4ee6a4SAndroid Build Coastguard Worker | led-edit-cr-cl $GERRIT_URL
112*bb4ee6a4SAndroid Build Coastguard Worker | led launch
113*bb4ee6a4SAndroid Build Coastguard Worker```
114*bb4ee6a4SAndroid Build Coastguard Worker
115*bb4ee6a4SAndroid Build Coastguard WorkerThis will launch a presubmit builder using the local version of recipes, and runs it on the gerrit
116*bb4ee6a4SAndroid Build Coastguard Workerchange at $GERRIT_URL.
117*bb4ee6a4SAndroid Build Coastguard Worker
118*bb4ee6a4SAndroid Build Coastguard Worker#### Testing a new recipe
119*bb4ee6a4SAndroid Build Coastguard Worker
120*bb4ee6a4SAndroid Build Coastguard WorkerThis is a little tricker, but you can change the recipe name that is launched by `led`. So you can:
121*bb4ee6a4SAndroid Build Coastguard Worker
122*bb4ee6a4SAndroid Build Coastguard Worker```
123*bb4ee6a4SAndroid Build Coastguard Workerled get-builder luci.crosvm.ci:linux_x86_64 > job.json
124*bb4ee6a4SAndroid Build Coastguard Worker```
125*bb4ee6a4SAndroid Build Coastguard Worker
126*bb4ee6a4SAndroid Build Coastguard WorkerThen edit the `job.json` file to use the newly added recipe, and launch the job using the local
127*bb4ee6a4SAndroid Build Coastguard Workerversion of recipes.
128*bb4ee6a4SAndroid Build Coastguard Worker
129*bb4ee6a4SAndroid Build Coastguard Worker```
130*bb4ee6a4SAndroid Build Coastguard Workercat job.json | led-edit-recipe-bundle | led launch
131*bb4ee6a4SAndroid Build Coastguard Worker```
132