[warn] Increase scope of warnings to be process-global.

Also refactors the warning logic so that ANY code at any point in the
recipe lifecycle (module-scoped code, code outside of the module system)
is able to emit a warning.

This also makes issuing a warning a first-class function in the
recipe_api python module, removing the 'warning' client and making
the warning recipe module a very basic wrapper.

Finally, this changes the way warning Causes are reported. Instead of
aggregating causes on a per-test-case level, they are accumulated
globally for the entire test runner process and then dumped in a single
Outcome message at the very end of the runner lifetime. To support
indicating which tests touched which errors, we retain a simple set
of warning NAMES that is attached to each test case result.

Change-Id: Ie8811609b18f741d6900a9c41c92fc0d096d61a7
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/recipes-py/+/3674618
Reviewed-by: Rob Mohr <mohrr@google.com>
Commit-Queue: Robbie Iannucci <iannucci@chromium.org>
Auto-Submit: Robbie Iannucci <iannucci@chromium.org>
19 files changed
tree: 417f24c8ce9c73adeaebb351d2f6cb5589d0dd72
  1. doc/
  2. infra/
  3. misc/
  4. recipe_engine/
  5. recipe_modules/
  6. recipe_proto/
  7. recipes/
  8. unittests/
  9. .editorconfig
  10. .gitattributes
  11. .gitignore
  12. .pycharm.vpython3
  13. .style.yapf
  14. .vpython3
  15. .vscode.vpython3
  17. codereview.settings
  20. OWNERS
  21. PRESUBMIT.py
  22. pyproject.toml
  23. README.md
  24. README.recipes.md
  25. recipe.warnings
  26. recipes.py


Recipes are a domain-specific language (embedded in Python) for specifying sequences of subprocess calls in a cross-platform and testable way.

They allow writing build flows which integrate with the rest of LUCI.

Documentation for the recipe engine (including this file!). Take a look at the user guide for some hints on how to get started. See the implementation details doc for more detailed implementation information about the recipe engine.


  • Sign the Google CLA.
  • 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:

# Get `depot_tools` in $PATH if you don't have it
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $HOME/src/depot_tools
export PATH="$PATH:$HOME/src/depot_tools"

# Check out the recipe engine repo
git clone https://chromium.googlesource.com/infra/luci/recipes-py $HOME/src/recipes-py

# make your change
cd $HOME/src/recipes-py
git new-branch cool_feature
# 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.