https://github.com/flutter/cocoon
Flutter's build coordinator and aggregator
https://github.com/flutter/cocoon
Last synced: about 2 months ago
JSON representation
Flutter's build coordinator and aggregator
- Host: GitHub
- URL: https://github.com/flutter/cocoon
- Owner: flutter
- License: bsd-3-clause
- Created: 2016-07-13T16:04:04.000Z (almost 9 years ago)
- Default Branch: main
- Last Pushed: 2025-05-13T23:25:08.000Z (about 2 months ago)
- Last Synced: 2025-05-14T00:07:05.426Z (about 2 months ago)
- Language: Dart
- Size: 21.8 MB
- Stars: 215
- Watchers: 80
- Forks: 102
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
[](https://flutter-dashboard.appspot.com/#/build?repo=cocoon&branch=main)
[](https://slsa.dev)**Cocoon** is a Dart App Engine custom runtime (backend) with a frontend
of Flutter apps (build and repository dashboard). Cocoon coordinates
and aggregates the results of [flutter/flutter](https://github.com/flutter/flutter)
builds.It is not designed to help developers build Flutter apps.
Cocoon is not a Google product.
# Using Cocoon
## Forcing a refresh from GitHub
The server is driven by commits made to
https://github.com/flutter/flutter repo. It periodically syncs new
commits. If you need to manually force a refresh, query
`https://flutter-dashboard.appspot.com/api/refresh-github-commits`.You will need to be authenticated with Cocoon to do this.
# Developing Cocoon
Cocoon has several components:
* A server, which coordinates everything. This is a Dart App Engine
application. If you have never used that before, you may want to
[peruse the samples for Dart App
Engine](https://github.com/dart-lang/appengine_samples). The server
is found in [app_dart](app_dart/).* A Flutter app (generally used as a Web app) for the build
dashboards. The dashboard is found in [dashboard](dashboard/).Cocoon creates a _checklist_ for each Flutter commit. A checklist is
made of multiple _tasks_. Tasks are _performed_ by _LUCI bots_.## Getting started
First, [set up a Flutter development
environment](https://github.com/flutter/flutter/blob/master/CONTRIBUTING.md#developing-for-flutter).
This will, as a side-effect, provide you with a Dart SDK. Your life
will be easier if you add that (`.../flutter/bin/cache/dart-sdk/bin/`)
to your path.To update the production server, you will need the [Google Cloud
SDK](https://cloud.google.com/sdk/docs/quickstarts). Since there is no
Dart SDK, we just use the command line tools.## Developing the server
All the commands in this section assume that you are in the
`app_dart/` directory.### Running a local dev server
```sh
dart bin/local_server.dart
```This will output `Serving requests at 0.0.0.0:8080` indicating the server is working.
New requests will be logged to the console.
### Deploying a test version on Google Cloud
To run live tests, build the app, and provide instructions for deploying to
Google App Engine, run this command:```sh
dart dev/deploy.dart --project {PROJECT} --version {VERSION}
```You can test the new version by accessing
`{VERSION}-dot-flutter-dashboard.appspot.com` in your browser. If the
result is satisfactory, the new version can be activated by using the
Cloud Console UI:#### Optional flags
`--profile`: Deploy a profile mode of `dashboard` application for debugging purposes.
`--ignore-version-check`: Ignore the version of Flutter on path (expects to be relatively recent)
## Developing the dashboard
The dashboard application will use dummy data when it is not connected
to the server, so it can be developed locally without a dev server.To run the dashboard locally, go into the `dashboard` directory and
run `flutter run -d chrome`. The dashboard will be served from localhost
(the exact address will be given on the console); copy the URL into
your browser to view the application. (The dashboard should also be
able to run on non-Web platforms, but since the Web is our main target
that is the one that should generally be used for development.)You can run `flutter packages upgrade` to update the dependencies.
This may be necessary if you see a failure in the dependencies.