blob: b657d4bfe14fe114a489f153b2626885a1b6a342 [file] [log] [blame] [view]
# Recipes
Recipes are a domain-specific language (embedded in python) for specifying
sequences of subprocess calls in a cross-platform and testable way.
* [User guide](doc/user_guide.md)
* Recipes: [public](https://chromium.googlesource.com/chromium/tools/build.git/+/master/scripts/slave/recipes/);
[internal](https://chrome-internal.googlesource.com/chrome/tools/build_limited/scripts/slave/+/master/recipes/).
* Recipe modules: [public](https://chromium.googlesource.com/chromium/tools/build.git/+/master/scripts/slave/recipe_modules/);
[internal](https://chrome-internal.googlesource.com/chrome/tools/build_limited/scripts/slave/+/master/recipe_modules/).
# Files
* `README.md`
This file!
* `doc/`
Documentation for the recipe engine (including this file!). See the
[design doc](doc/design_doc.md) for more detailed design information about
the recipe engine.
* `infra/`
Chrome infra config files.
* `recipes.py`
The main entry point to the recipe engine. It has many subcommands and
flags; run `recipes.py -h` to see them. Include this in your repository
to start using recipes.
* `recipes/`
Recipes in the recipe engine. These are either example recipes, or recipes
which are used to test the engine (see
[run_test.py](recipe_engine/unittests/run_test.py) to see these run)
* `recipe_modules/`
Built in recipe modules. These are very useful when writing recipes; take a
look in there, and look at each of their `examples` subfolders to get an
idea how to use them in a recipe.
* `recipe_engine/`
The core functionality of the recipe engine. Noteworthy files include:
* `main.py` -- The main entrypoint for the recipe engine.
* `recipes_cfg.proto` -- The protobuf file which defines the format of a
`recipes.cfg` file.
* `third_party/` -- third_party code which is vendored into the recipe
engine.
* `recipe_api.py` -- The api exposed to a recipe module.
* `unittests` -- Unittests for the engine.
There are also several files which correspond to a subcommand of recipes.py;
`run`, and `autoroll` are some examples.
* `unittests/`
Somewhat poorly named, these are higher level integration tests.
# Contributing
* Sign the [Google CLA](https://cla.developers.google.com/clas).
* Make sure your `user.email` and `user.name` are configured in `git config`.
Run the following to setup the code review tool and create your first review:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $HOME/src/depot_tools
export PATH="$PATH:$HOME/src/depot_tools"
git checkout -b work origin/master
# hack hack
git commit -a -m "This is awesome"
# This will ask for your Google Account credentials.
git cl upload -s -r joe@example.com
# Wait for approval over email.
# Click "Submit to CQ" button or ask reviewer to do it for you.
# Wait for the change to be tested and landed automatically.
Use `git cl help` and `git cl help <cmd>` for more details.