[buildbucket] Pass v2 build as a dict, not base64 bytes

"$recipes-py/buildbucket".build is base64-encoded bytes of build message.
It does the job of discouraging recipe authors from interpeting it,
but at the same time makes it very difficult to specify it for tools
that specify input properties, e.g. local run of recipes.py or led.

Make it a dict that represents a JSONPB-encoded protobuf message.
When parsing, ignore unrecognized fields so that adding a new field
in the proto does not break prod jobs.

Change-Id: I14e9bec61431eb09fe9ce38c1f1a9e7369197f13
Reviewed-on: https://chromium-review.googlesource.com/1222232
Commit-Queue: Nodir Turakulov <nodir@chromium.org>
Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org>
4 files changed
tree: 34e923b01df7d182951f29804a1b1d545b328108
  1. doc/
  2. infra/
  3. misc/
  4. recipe_engine/
  5. recipe_modules/
  6. recipes/
  7. unittests/
  8. .gitattributes
  9. .gitignore
  10. .vpython
  11. AUTHORS
  12. codereview.settings
  13. CONTRIBUTORS
  14. LICENSE
  15. OWNERS
  16. PRESUBMIT.py
  17. README.md
  18. README.recipes.md
  19. 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.

Files

  • README.md

    This file!

  • doc/

    Documentation for the recipe engine (including this file!). Also includes doc/recipes.py, which is a file you can include in your repository to start using recipes. See the design doc 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.

  • recipes/

    Recipes in the recipe engine. These are either example recipes, or recipes which are used to test the engine (see 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:

    • package.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; depgraph, run, and autoroll are some examples.

  • unittests/

    Somewhat poorly named, these are higher level integration tests.

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:

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.