| # 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 |