# ci.yaml

`.ci.yaml` is a universal config for managing work on Flutter infrastructure. See
https://github.com/flutter/cocoon/blob/master/CI_YAML.md for more information.

This starlark module takes in a JSON version of the `.ci.yaml` for a repo, and
translates it to the relevant LUCI config. This reduces the manual work required
to keep the repos in sync.

These configs are automatically kept up to date via a luci_config_generator builder.

## Manually Updating Repo Configs

```sh
export $FLUTTER_INFRA=#Root to the flutter/infra checkout
# A local version of Cocoon is required
git checkout git@github.com/flutter/cocoon
# This script translates the given .ci.yaml into JSON and adds it to the repoS
dart app_dart/bin/generate_jspb.dart $repo $sha > $FLUTTER_INFRA/lib/$repo_config.json
# Generate the LUCI configurations
lucicfg generate config/main.star
```

## Manually Updating ProtoBuf

After editing the protobuf, run the script:

`./compile_proto.sh`

And check in the updated `scheduler.bin` file.
