[test] Filter stack traces by default.

This change turns

  ======================================================================
  FAIL (recipe crashed in an unexpected way) - recipe.testname
  ----------------------------------------------------------------------
  Unexpected exception in RunSteps. Use `api.expect_exception` if the crash is intentional.
    File "/.../recipe_engine/internal/engine.py", line 554, in run_steps
      raw_result = recipe_obj.run_steps(api, engine)
    File "/.../recipe_engine/internal/recipe_deps.py", line 733, in run_steps
      properties_def, api=api)
    File "/.../recipe_engine/internal/property_invoker.py", line 89, in invoke_with_properties
      arg_names, **additional_args)
    File "/.../recipe_engine/internal/property_invoker.py", line 52, in _invoke_with_properties
      return callable_obj(*props, **additional_args)
    File "/.../path/to/recipes/recipe.py", line 39, in RunSteps
      raise Exception('wat')
  Exception: wat

Into:

  ======================================================================
  FAIL (recipe crashed in an unexpected way) - recipe.testname
  ----------------------------------------------------------------------
  Unexpected exception in RunSteps. Use `api.expect_exception` if the crash is intentional.
    File "/.../path/to/recipes/recipe.py", line 39, in RunSteps
      raise Exception('wat')
  Exception: wat

Which should be generally more useful for folks working with recipes.
This filters out all wrapper functions and engine innards, leaving just the
recipe and recipe_module code stack frames visible.

This prints a reminder at the top of the test output with the flag to
re-enable full stacks, too, which should be enough for folks who don't
read the PSA :).

This also leaves stacks alone in all non-test contexts, to help with
debugging stuff in prod.

R=yiwzhang@google.com

Recipe-Nontrivial-Roll: build
Recipe-Nontrivial-Roll: chromiumos
Recipe-Nontrivial-Roll: depot_tools
Recipe-Nontrivial-Roll: fuchsia
Recipe-Nontrivial-Roll: infra
Recipe-Nontrivial-Roll: build_limited_scripts_slave
Recipe-Nontrivial-Roll: chrome_release
Change-Id: I3ab64c1f2d7dc1a07c77d4776b01f7859c143cea
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/recipes-py/+/2394086
Commit-Queue: Robbie Iannucci <iannucci@chromium.org>
Reviewed-by: Yiwei Zhang <yiwzhang@google.com>
5 files changed
tree: 0b57e743003f4381d04a5c3ce2df4f8a5527284d
  1. doc/
  2. infra/
  3. misc/
  4. recipe_engine/
  5. recipe_modules/
  6. recipe_proto/
  7. recipes/
  8. unittests/
  9. .gitattributes
  10. .gitignore
  11. .style.yapf
  12. .vpython
  13. AUTHORS
  14. codereview.settings
  15. CONTRIBUTORS
  16. LICENSE
  17. OWNERS
  18. PRESUBMIT.py
  19. README.md
  20. README.recipes.md
  21. recipes.py
README.md

Recipes

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.

Contributing

  • 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.