[buildbucket] Let child builds use builder priority

Recipes can now pass `priority=None` to
`api.buildbucket.schedule_request` to instruct Buildbucket to use the
destination builder's priority, as defined in the configs, as the
priority of the child build.

This is mostly backward compatible: if the `priority` argument is unset
it will still default to the priority of the parent build. The only
exception is the case where downstream code explicitly sets `priority`
to a falsey value. This was a no-op previously since `None` was the
default, causing the child build to have the same priority as the
parent. Now, any falsey value will give the child build the priority
defined by its builder configs.

In practice no downstream repos currently use a falsey priority, so this
will not break anything downstream.

I also added a `priority` argument to all the `*_build_message()`
buildbucket test_api methods so that recipe tests (including the tests
for this change) can mock the priority of the build.

Bug: fuchsia:38153
Recipe-Nontrivial-Roll: build
Recipe-Nontrivial-Roll: build_limited_scripts_slave
Recipe-Nontrivial-Roll: chromiumos
Recipe-Nontrivial-Roll: fuchsia
Change-Id: Idbc679b0b53c0869751f28c55d56e630a733dc04
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/recipes-py/+/1846716
Reviewed-by: Nodir Turakulov <nodir@chromium.org>
Reviewed-by: Andrii Shyshkalov <tandrii@google.com>
Commit-Queue: Oliver Newman <olivernewman@google.com>
17 files changed
tree: 79298a542baa76c828a32ac0165ed3718acb0e66
  1. .gitattributes
  2. .gitignore
  3. .style.yapf
  4. .vpython
  10. README.md
  11. README.recipes.md
  12. codereview.settings
  13. doc/
  14. infra/
  15. misc/
  16. recipe_engine/
  17. recipe_modules/
  18. recipe_proto/
  19. recipes.py
  20. recipes/
  21. unittests/


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.