Clone this repo:

Branches

  1. 549e077 Respect ciBuilderRepo field in the front-end. by Gary Miguel · 5 days ago master
  2. ce82950 Support specifying builder.baseRepo. by Gary Miguel · 3 weeks ago
  3. 6086530 Fix binary-size plugin (take 2). by Mirko Bonadei · 5 weeks ago
  4. ebf3592 Handle responses without 'builds'. by Mirko Bonadei · 7 weeks ago
  5. b434e1a Replace @npm_bazel_rollup with @npm//@bazel/rollup by Tao Zhou · 3 months ago

Binary Size Plugin for Gerrit

How it works

The plugin queries tryjobs for the current patchset on Gerrit, and gets the binary_sizes property from each of them. It also queries the equivalent CI jobs for the same base revision, and gets the same property from them. It then displays the results in a table, with rows being the files (keys in binary_sizes dict), and the columns being:

Size before | Size after | Size difference (including %) | File | Builder

Usage

This plugin is configured via the binary-size.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).

See an example of binary-size.config:

https://webrtc.googlesource.com/src/+/refs/meta/config/binary-size.config

Also a short snippet below:

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

[builder "luci.webrtc.try/linux_rel"]
    base = "luci.webrtc.ci/Linux64 Release"
    # Optional, needed if the base builder is triggered from a different repo
    # than the try builder. Assumed to be hosted on [host].git.
    baseRepo = "foo"

[builder "luci.webrtc.try/win_x64_clang_rel"]
    base = "luci.webrtc.ci/Win64 Release (Clang)"

This contains a mapping between tryjob builders and equivalent postsubmit builders. Equivalent in the sense that if they ran with the same code, they would produce the same binary_sizes. The plugin queries builds only from buckets that are mentioned at least once. It is OK to specify builders that don't provide a binary_sizes property, they will just be ignored.

Note that populating the binary_sizes property is a separate responsibility, and it is up to you to implement in your recipes. It needs to be a dict like {"some_file.so": 123456, ...}. The values of the dict are treated as sizes in bytes.

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

Dependencies

This plugin requires the buildbucket plugin in order to search builds. Ensure that they are both installed, or prepare to see errors in the browser's console.

Development

git clone --recursive https://gerrit.googlesource.com/gerrit
cd gerrit/plugins

git clone https://chromium.googlesource.com/infra/gerrit-plugins/buildbucket
cd buildbucket
ln -s src/main/resources/static static  # May be unneeded in the future.
cd ..

git clone https://chromium.googlesource.com/infra/gerrit-plugins/binary-size
cd binary-size

Run the polygerrit-ui server against live data

Use the script run-with-prod-data.sh (based on polygerrit-ui/run-server.sh). You may change some paths by setting environment variables, for example:

# Install dependencies:
sudo apt-get install -y nodejs

GERRIT_DIR="$HOME/gerrit" ./run-with-prod-data.sh

Testing

# Install dependencies.
sudo apt-get install -y npm
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.