mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

This moves all the bot-related files to `dev/bots`, hiding it from our home page in github. Also, simplifies the travis setup, though that doesn't do any difference to the performance sadly.
90 lines
4.2 KiB
Markdown
90 lines
4.2 KiB
Markdown
# Flutter's Build Infrastructure
|
|
|
|
This directory exists to support building Flutter on our build infrastructure.
|
|
|
|
The results of such builds are viewable at:
|
|
* https://build.chromium.org/p/client.flutter/waterfall
|
|
* https://travis-ci.org/flutter/flutter/builds (limited checking used just for PRs on github)
|
|
|
|
The external master pages for the chromium infra bots do not allow
|
|
forcing new builds. Contact @eseidelGoogle or another member of
|
|
Google's Flutter team if you need to do that.
|
|
|
|
The Travis-based bots are trivial, and just run a couple of shell
|
|
scripts. The rest of this document discusses only the chromium infra
|
|
bots.
|
|
|
|
This infrastructure is broken into two parts. A buildbot master specified by our
|
|
[builders.pyl](https://chromium.googlesource.com/chromium/tools/build.git/+/master/masters/master.client.flutter/builders.pyl)
|
|
file, and a [set of
|
|
recipes](https://chromium.googlesource.com/chromium/tools/build.git/+/master/scripts/slave/recipes/flutter)
|
|
which we run on that master. Both of these technologies are highly specific to
|
|
Google's Chromium project. We're just borrowing some of their infrastructure.
|
|
|
|
## Prerequisites
|
|
|
|
- [install depot_tools](http://www.chromium.org/developers/how-tos/install-depot-tools)
|
|
- Python package installer: `sudo apt-get install python-pip`
|
|
- Python coverage package (only needed for `training_simulation`): `sudo pip install coverage`
|
|
|
|
## Getting the code
|
|
|
|
The following will get way more than just recipe code, but it _will_ get the recipe code:
|
|
|
|
```bash
|
|
mkdir chrome_infra
|
|
cd chrome_infra
|
|
fetch infra
|
|
```
|
|
|
|
More detailed instructions can be found [here](https://chromium.googlesource.com/infra/infra/+/master/doc/source.md).
|
|
|
|
Most of the functionality for recipes comes from `recipe_modules`, which are
|
|
unfortunately spread to many separate repositories. After checking out the code
|
|
search for files named `api.py` or `example.py` under `infra/build`.
|
|
|
|
## Editing a recipe
|
|
|
|
Flutter has one recipe per repository. Currently
|
|
[flutter/flutter](https://chromium.googlesource.com/chromium/tools/build.git/+/master/scripts/slave/recipes/flutter/flutter.py)
|
|
and
|
|
[flutter/engine](https://chromium.googlesource.com/chromium/tools/build.git/+/master/scripts/slave/recipes/flutter/engine.py):
|
|
|
|
- build/scripts/slave/recipes/flutter/flutter.py
|
|
- build/scripts/slave/recipes/flutter/engine.py
|
|
|
|
Recipes are just Python. They are
|
|
[documented](https://github.com/luci/recipes-py/blob/master/doc/user_guide.md)
|
|
by the [luci/recipes-py github project](https://github.com/luci/recipes-py).
|
|
|
|
The typical cycle for editing a recipe is:
|
|
|
|
1. Make your edits (probably to files in `//chrome_infra/build/scripts/slave/recipes/flutter`).
|
|
2. Run `build/scripts/slave/recipes.py simulation_test train flutter` to update expected files (remove the flutter if you need to do a global update).
|
|
3. Run `build/scripts/tools/run_recipe.py flutter/flutter` (or flutter/engine) if something was strange during training and you need to run it locally.
|
|
4. Upload the patch (`git commit`, `git cl upload`) and send it to someone in the `recipes/flutter/OWNERS` file for review.
|
|
|
|
## Editing the client.flutter buildbot master
|
|
|
|
Flutter uses Chromium's fancy
|
|
[builders.pyl](https://chromium.googlesource.com/infra/infra/+/master/doc/users/services/buildbot/builders.pyl.md)
|
|
master generation system. Chromium hosts 100s (if not 1000s) of buildbot
|
|
masters and thus has lots of infrastructure for turning them up and down.
|
|
Eventually all of buildbot is planned to be replaced by other infrastructure,
|
|
but for now flutter has its own client.flutter master.
|
|
|
|
You would need to edit client.flutter's master in order to add slaves (talk to
|
|
@eseidelGoogle), add builder groups, or to change the html layout of
|
|
https://build.chromium.org/p/client.flutter. Carefully follow the [builders.pyl
|
|
docs](https://chromium.googlesource.com/infra/infra/+/master/doc/users/services/buildbot/builders.pyl.md)
|
|
to do so.
|
|
|
|
## Future Directions
|
|
|
|
We would like to host our own recipes instead of storing them in
|
|
[build](https://chromium.googlesource.com/chromium/tools/build.git/+/master/scripts/slave/recipes/flutter).
|
|
Support for [cross-repository
|
|
recipes](https://github.com/luci/recipes-py/blob/master/doc/cross_repo.md) is
|
|
in-progress. If you view the git log of this directory, you'll see we initially
|
|
tried, but it's not quite ready.
|