[buildbucket-gerrit] load builders from server

LUCI builders are defined in a Buildbucket server configuration
and Buildbucket exposes them via an API. Instead of requiring
users to duplicate builders in gerrit-buildbucket plugin and
buildbucket server, use the API to load the builders.

Load the list of builders as soon as we know the buckets from
the plugin config. Cache the list of builders per bucket for
10m in localStorage.

Some of the builders returned by the API are not prod yet.
Whether a builder is prod or not can be determined by talking
to luci-migration.appspot.com. This will be done in a separate CL.

Bug: 706095
Change-Id: I87e1ccdfb011923a8763962d8f1a2800ccc5bf67
Reviewed-on: https://chromium-review.googlesource.com/1022030
Reviewed-by: Quinten Yearsley <qyearsley@chromium.org>
5 files changed
tree: eb58b4e5e6ebf29d7469962062378f68411be1ae
  1. src/
  2. test/
  3. .eslintrc.json
  4. .gitignore
  5. BUILD
  6. codereview.settings
  7. LICENSE
  8. README.md
  9. run-with-prod-data.sh
  10. run-with-testsite.sh
  11. wct.conf.json
README.md

Buildbucket Plugin for Gerrit

Usage

This plugin is configured via the buildbucket.config file present in the repo‘s refs/meta/config ref, as well as the same file in all repositories in the repo’s inheritance chain (up to and including All-Projects).

An example buildbucket.config is below:

[host]
  git = "chromium.googlesource.com"
  gerrit = "chromium-review.googlesource.com"

[bucket "chromium.buildbucket.swarming"]
  builder = infra_presubmit
  builder = infra_linux64
  builder = infra_mac
  builder = infra_win
[bucket "tryserver.infra"]
  builder = Infra Presubmit
  builder = Infra Linux Trusty 64 Tester
  builder = Infra Linux Precise 32 Tester
  builder = Infra Mac Tester
  builder = Infra Win Tester

In the vast majority of cases, the host.git and host.gerrit values are global to the entire host, so that stanza is specified in the All-Projects repo. Buckets and builders, on the other hand, are almost always very repository-specific, and so are only specified in “leaf” repositories which are not in any other repo's inheritance chain.

All changes to buildbucket.config files are instantly reflected. There is no caching period or need to restart the server.

Development

To use with the local testsite

Use the script run-with-testsite.sh; this rebuilds the plugin with bazel, copies it over and restarts the local testsite. Example invocation:

GERRIT_DIR=~/gerrit GERRIT_TESTSITE_DIR=~/testsite ./run-with-testsite.sh

To use with the polygerrit-ui server against live data

Use the script run-with-prod-data.sh; this creates a temporary directory with the plugin source in the expected layout and then invokes polygerrit-ui/run-server.sh. Example invocation:

GERRIT_DIR=~/gerrit ./run-with-prod-data.sh

Testing

# Install dependencies.
npm install -g bower
npm install -g web-component-tester
cd test/
bower install

# Run the tests from the directory root.
cd ../
wct

Note: Testing is disabled for Safari due to this issue.