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