blob: abd52848eae385771ba06479c59ce29b78a3c504 [file] [log] [blame] [view]
# Flutter LUCI Service Configurations
Contains configuration and tools related to Flutter's build infrastructure.
Configuration is generated by `lucicfg`, which is part of `depot_tools`. Rather
than updating the individual .cfg files, updates should be made to
`config/main.star`. That file can then be run to regenerate the configuration.
## Updating the configuration
- Edit the desired `.star` files (do not edit `.cfg` files; those are generated).
- Execute `./config/main.star`.
- Observe that the `.cfg` files have been updated (e.g. via `git status`).
- Create a pull request containing changes both to the `.star` files and `.cfg` files.
- Review and submit the pull request as normal.
- Changes propagate to LUCI automatically. Go to [LUCI config UI][3]
to check that new changes have been applied.
## Adding new framework test shards
This section talks about test shards defined in [dev/bots/test.dart][1] used to
split framework tests into smaller chunks that can be tested in parallel. This
does _not_ refer to [LUCI/Swarming][4] shards.
When you add a new shard it does not automatically run in LUCI. To add it to
LUCI you need to add a new builder in the [framework_config.star][2]. Typically,
you'll add two builders, one "try" builder that tests PRs, and one "prod" builder
that tests submitted PRs on the master branch.
Here's an example of a "try" builder:
```
common.linux_try_builder(
name = "Linux web_tests|web_tests",
recipe = "flutter/flutter",
repo = repos.FLUTTER,
list_view_name = list_view_name,
properties = {
"shard": "web_tests",
"subshards": ["0", "1", "2", "3", "4", "5", "6", "7_last"],
"dependencies": [{"dependency": "android_sdk"}, {"dependency": "chrome_and_driver"}, {"dependency": "goldctl"}],
},
caches = [
swarming.cache(name = "pub_cache", path = ".pub_cache"),
swarming.cache(name = "android_sdk", path = "android29"),
],
)
```
The easiest way to add a new one is to copy an existing builder and tweak the
parameters.
### Testing new shards
As of today, it is not possible to test configuration changes until after they
propagated to LUCI. One way to mitigate the risk of breakage is to run your test
shard using an existing builder. To do that, find a builder in one of the
`.star` files (e.g. `framework_config.star`) that satisfies the dependencies of
the new test shard, then use the `led` tool (bundled with `depot_tools`) to run
it.
For example, let's say you are adding an integration test shard for web, and the
new shard needs a Linux builder with Chrome and ChromeDriver in order to run.
Luckily, there's already the `Linux web_tests` builder that satisfies these
dependencies. To test the new shard, use the `Linux web_tests` builder, but ask
it to run a different shards and/or subshard. Let's say the new test shard is
called "foo", it has 3 subshards (0, 1, 2_last) and it's currently staged in pull
request 99999. You can run it using the following `led` command:
```
led get-builder "luci.flutter.try:Linux web_tests" \
| led edit -pa git_ref='refs/pull/99999/head' \
| led edit -pa git_url='https://github.com/flutter/flutter' \
| led edit -pa shard='foo' \
| led edit -pa subshard='1' \
| led launch
```
## Forcing the propagation of these configurations
One may speed up the propagation of the
new configuration files by visiting the
[luci-config web ui][3], logging in, and
searching for projects/flutter. from there, one may click on the
projects/flutter search result and click the download icon to force an update.
[1]: https://github.com/flutter/flutter/blob/master/dev/bots/test.dart
[2]: https://flutter.googlesource.com/infra/+/refs/heads/main/README.md
[3]: https://luci-config.appspot.com/#/projects/flutter
[4]: https://www.chromium.org/developers/testing/isolated-testing/infrastructure