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 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 . The server is found in app_dart . A Flutter app (generally used as a Web app) for the build dashboards. The dashboard is found in 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 . 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. 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
This is for legacy users who were granted old security keys. Due to overground, this is no longer supported.
$ export GOOGLE_CLOUD_PROJECT=flutter-dashboard-dev # or flutter-dashboard for prod data
$ export GCLOUD_KEY=#your_secret # Required for reading/writing from Google Cloud
$ export COCOON_USE_IN_MEMORY_CACHE=true # Use an in mememory cache locally instead of redis to prevent corruption
$ dart bin/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.
To develop and test some features, you need to have a local service account(key.json) with access to the project you will be connecting to.
If you work for Google you can use the key with flutter-dashboard project via internal doc .
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:
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: https://pantheon.corp.google.com/appengine/versions?project=flutter-dashboard&serviceId=default
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.
Download and Contribute to source code at GitHub
Flutter's build coordinator and aggregator https://github.com/flutter/cocoon 101 forks. 203 stars. 15 open issues. Recent commits: Bump @types/node from 22.7.7 to 22.8.1 in /gh_actions/third_party/no-response (#3988)Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.7.7 to 22.8.1.<details><summary>Commits</summary><ul><li>See full diff in <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare view</a></li></ul></details><br />[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/node&package-manager=npm_and_yarn&previous-version=22.7.7&new-version=22.8.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.—<details><summary>Dependabot commands and options</summary><br />You can trigger Dependabot actions by commenting on this PR:- `@dependabot rebase` will rebase this PR- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it- `@dependabot merge` will merge this PR after your CI passes on it- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it- `@dependabot cancel merge` will cancel a previously requested merge and block automerging- `@dependabot reopen` will reopen this PR if it is closed- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)</details> , GitHub Bump actions/checkout from 4.2.1 to 4.2.2 (#3987)Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.1 to 4.2.2.<details><summary>Release notes</summary><p><em>Sourced from <a href="https://github.com/actions/checkout/releases">actions/checkout's releases</a>.</em></p><blockquote><h2>v4.2.2</h2><h2>What's Changed</h2><ul><li><code>url-helper.ts</code> now leverages well-known environment variables by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li><li>Expand unit test coverage for <code>isGhes</code> by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li></ul><p><strong>Full Changelog</strong>: <a href="https://github.com/actions/checkout/compare/v4.2.1…v4.2.2">https://github.com/actions/checkout/compare/v4.2.1…v4.2.2</a></p></blockquote></details><details><summary>Changelog</summary><p><em>Sourced from <a href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's changelog</a>.</em></p><blockquote><h1>Changelog</h1><h2>v4.2.2</h2><ul><li><code>url-helper.ts</code> now leverages well-known environment variables by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li><li>Expand unit test coverage for <code>isGhes</code> by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li></ul><h2>v4.2.1</h2><ul><li>Check out other refs/* by commit if provided, fall back to ref by <a href="https://github.com/orhantoy"><code>@âorhantoy</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li></ul><h2>v4.2.0</h2><ul><li>Add Ref and Commit outputs by <a href="https://github.com/lucacome"><code>@âlucacome</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li><li>Dependency updates by <a href="https://github.com/dependabot"><code>@âdependabot</code></a>- <a href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>, <a href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li></ul><h2>v4.1.7</h2><ul><li>Bump the minor-npm-dependencies group across 1 directory with 4 updates by <a href="https://github.com/dependabot"><code>@âdependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li><li>Bump actions/checkout from 3 to 4 by <a href="https://github.com/dependabot"><code>@âdependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li><li>Check out other refs/* by commit by <a href="https://github.com/orhantoy"><code>@âorhantoy</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li><li>Pin actions/checkout's own workflows to a known, good, stable version. by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1776">actions/checkout#1776</a></li></ul><h2>v4.1.6</h2><ul><li>Check platform to set archive extension appropriately by <a href="https://github.com/cory-miller"><code>@âcory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1732">actions/checkout#1732</a></li></ul><h2>v4.1.5</h2><ul><li>Update NPM dependencies by <a href="https://github.com/cory-miller"><code>@âcory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1703">actions/checkout#1703</a></li><li>Bump github/codeql-action from 2 to 3 by <a href="https://github.com/dependabot"><code>@âdependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1694">actions/checkout#1694</a></li><li>Bump actions/setup-node from 1 to 4 by <a href="https://github.com/dependabot"><code>@âdependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1696">actions/checkout#1696</a></li><li>Bump actions/upload-artifact from 2 to 4 by <a href="https://github.com/dependabot"><code>@âdependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1695">actions/checkout#1695</a></li><li>README: Suggest <code>user.email</code> to be <code>41898282+github-actions[bot]@users.noreply.github.com</code> by <a href="https://github.com/cory-miller"><code>@âcory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1707">actions/checkout#1707</a></li></ul><h2>v4.1.4</h2><ul><li>Disable <code>extensions.worktreeConfig</code> when disabling <code>sparse-checkout</code> by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1692">actions/checkout#1692</a></li><li>Add dependabot config by <a href="https://github.com/cory-miller"><code>@âcory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1688">actions/checkout#1688</a></li><li>Bump the minor-actions-dependencies group with 2 updates by <a href="https://github.com/dependabot"><code>@âdependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1693">actions/checkout#1693</a></li><li>Bump word-wrap from 1.2.3 to 1.2.5 by <a href="https://github.com/dependabot"><code>@âdependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1643">actions/checkout#1643</a></li></ul><h2>v4.1.3</h2><ul><li>Check git version before attempting to disable <code>sparse-checkout</code> by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1656">actions/checkout#1656</a></li><li>Add SSH user parameter by <a href="https://github.com/cory-miller"><code>@âcory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1685">actions/checkout#1685</a></li><li>Update <code>actions/checkout</code> version in <code>update-main-version.yml</code> by <a href="https://github.com/jww3"><code>@âjww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1650">actions/checkout#1650</a></li></ul><h2>v4.1.2</h2><ul><li>Fix: Disable sparse checkout whenever <code>sparse-checkout</code> option is not present <a href="https://github.com/dscho"><code>@âdscho</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1598">actions/checkout#1598</a></li></ul><h2>v4.1.1</h2><ul><li>Correct link to GitHub Docs by <a href="https://github.com/peterbe"><code>@âpeterbe</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1511">actions/checkout#1511</a></li><li>Link to release page from what's new section by <a href="https://github.com/cory-miller"><code>@âcory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1514">actions/checkout#1514</a></li></ul><h2>v4.1.0</h2><ul><li><a href="https://redirect.github.com/actions/checkout/pull/1396">Add support for partial checkout filters</a></li></ul></blockquote><p>… (truncated)</p></details><details><summary>Commits</summary><ul><li><a href="https://github.com/actions/checkout/commit/11bd71901bbe5b1630ceea73d27597364c9af683"><code>11bd719</code></a> Prepare 4.2.2 Release (<a href="https://redirect.github.com/actions/checkout/issues/1953">#1953</a>)</li><li><a href="https://github.com/actions/checkout/commit/e3d2460bbb42d7710191569f88069044cfb9d8cf"><code>e3d2460</code></a> Expand unit test coverage (<a href="https://redirect.github.com/actions/checkout/issues/1946">#1946</a>)</li><li><a href="https://github.com/actions/checkout/commit/163217dfcd28294438ea1c1c149cfaf66eec283e"><code>163217d</code></a> <code>url-helper.ts</code> now leverages well-known environment variables. (<a href="https://redirect.github.com/actions/checkout/issues/1941">#1941</a>)</li><li>See full diff in <a href="https://github.com/actions/checkout/compare/eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871…11bd71901bbe5b1630ceea73d27597364c9af683">compare view</a></li></ul></details><br />[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=4.2.1&new-version=4.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.—<details><summary>Dependabot commands and options</summary><br />You can trigger Dependabot actions by commenting on this PR:- `@dependabot rebase` will rebase this PR- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it- `@dependabot merge` will merge this PR after your CI passes on it- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it- `@dependabot cancel merge` will cancel a previously requested merge and block automerging- `@dependabot reopen` will reopen this PR if it is closed- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)</details> , GitHub add a required "CI tasks" check that locks the merge queue (#3985)Because the MQ only waits for "required" checks to pass before merging PRs and merge groups, at least one required check is needed that stays in pending state while all other (non-required) checks pass. Required checks cannot be added dynamically. They are pre-configured in the repositories settings. The "CI tasks" check is that one pre-configured required check whose status is used as a proxy for "the status of all other checks". , GitHub Add flaux slug for testing (#3986)Without this, flaux doesn't work on cocoon. , GitHub Proper merge queue JSON model; add a dummy check (#3983)Get onto the JsonSerializable bandwagon for the `merge_group` data. Add a dummy check so we can start testing MQ <=> Cocoon integration. Failing PRs can be artificially created by adding the string "MQ_FAIL" in the commit message. , GitHub
Provides the list of the opensource Flutter apps collection with GitHub repository.