Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 1 | Contributing to Flutter |
| 2 | ======================= |
| 3 | |
Greg Spencer | e60087a | 2018-08-07 13:41:33 -0700 | [diff] [blame] | 4 | [](https://cirrus-ci.org/flutter/flutter) |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 5 | |
Ian Hickson | cffe481 | 2016-12-10 21:46:57 -0800 | [diff] [blame] | 6 | _See also: [Flutter's code of conduct](https://flutter.io/design-principles/#code-of-conduct)_ |
| 7 | |
Ian Hickson | 529d250 | 2018-06-01 12:04:20 -0700 | [diff] [blame] | 8 | Welcome |
| 9 | ------- |
| 10 | |
| 11 | We gladly accept contributions via GitHub pull requests. |
| 12 | |
| 13 | Please become familiar with our |
| 14 | [style guide](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo) and |
| 15 | [design philosophy](https://flutter.io/design-principles/). These guidelines are intended to |
| 16 | keep the code consistent and avoid common pitfalls, and being familiar with them will |
| 17 | make everything much easier for you. If you have questions about our processes or are looking |
| 18 | for random tips and tricks, you may be interested in the [engine wiki](https://github.com/flutter/engine/wiki) and [framework wiki](https://github.com/flutter/flutter/wiki). |
| 19 | |
| 20 | This document will introduce you to the basic steps for developing for the Flutter framework (Dart). |
| 21 | If you're interested in developing for the Flutter engine (C++, Java, Objective C), please |
| 22 | switch to [the engine repo's `CONTRIBUTING.md` document](https://github.com/flutter/engine/blob/master/CONTRIBUTING.md). |
| 23 | |
| 24 | If you have an itch, work on that. If you are just looking for something good to start with, consider |
| 25 | [the issues marked "easy fix"](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+fix%22+sort%3Areactions-%2B1-desc) in our issues list. |
| 26 | |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 27 | Things you will need |
| 28 | -------------------- |
| 29 | |
Michael Goderbauer | 13edb32 | 2017-06-26 09:47:05 -0700 | [diff] [blame] | 30 | * Linux, Mac OS X, or Windows |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 31 | * git (used for source version control). |
Jacob Richman | 05b4bd7 | 2018-08-28 16:22:50 -0700 | [diff] [blame] | 32 | * An IDE. We recommend [Android Studio with the Flutter plugin](https://flutter.io/using-ide/). |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 33 | * An ssh client (used to authenticate with GitHub). |
| 34 | * Python (used by some of our tools). |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 35 | * The Android platform tools (see [Issue #55](https://github.com/flutter/flutter/issues/55) |
Adam Barth | f4c62a8 | 2015-11-08 22:18:16 -0800 | [diff] [blame] | 36 | about downloading the Android platform tools automatically). |
Ian Hickson | 8268664 | 2016-02-08 13:39:24 -0800 | [diff] [blame] | 37 | _If you're also working on the Flutter engine, you can use the |
Adam Barth | f4c62a8 | 2015-11-08 22:18:16 -0800 | [diff] [blame] | 38 | copy of the Android platform tools in |
Ian Hickson | 8268664 | 2016-02-08 13:39:24 -0800 | [diff] [blame] | 39 | `.../engine/src/third_party/android_tools/sdk/platform-tools`._ |
Jacob Richman | 05b4bd7 | 2018-08-28 16:22:50 -0700 | [diff] [blame] | 40 | - Mac: `brew cask install android-platform-tools` |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 41 | - Linux: `sudo apt-get install android-tools-adb` |
| 42 | |
| 43 | Getting the code and configuring your environment |
| 44 | ------------------------------------------------- |
| 45 | |
| 46 | * Ensure all the dependencies described in the previous section, in particular |
Ian Hickson | e23d760 | 2016-02-15 10:46:24 -0800 | [diff] [blame] | 47 | git, ssh, and python are installed. Ensure that `adb` |
| 48 | (from the Android platform tools) is in your path (e.g., |
| 49 | that `which adb` prints sensible output). |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 50 | * Fork `https://github.com/flutter/flutter` into your own GitHub account. If |
| 51 | you already have a fork, and are now installing a development environment on |
| 52 | a new machine, make sure you've updated your fork so that you don't use stale |
| 53 | configuration options from long ago. |
| 54 | * If you haven't configured your machine with an SSH key that's known to github then |
| 55 | follow the directions here: https://help.github.com/articles/generating-ssh-keys/. |
| 56 | * `git clone git@github.com:<your_name_here>/flutter.git` |
| 57 | * `cd flutter` |
| 58 | * `git remote add upstream git@github.com:flutter/flutter.git` (So that you |
| 59 | fetch from the master repository, not your clone, when running `git fetch` |
| 60 | et al.) |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 61 | * Add this repository's `bin` directory to your path. That will let you use the |
Ian Hickson | e23d760 | 2016-02-15 10:46:24 -0800 | [diff] [blame] | 62 | `flutter` command in this directory more easily. |
Lex Berezhny | 778742e | 2016-02-27 12:35:05 -0500 | [diff] [blame] | 63 | * Run `flutter update-packages` This will fetch all the Dart packages that |
| 64 | Flutter depends on. You can replicate what this script does by running |
| 65 | `pub get` in each directory that contains a `pubspec.yaml` file. |
Greg Spencer | 797b39e | 2017-11-13 10:55:22 -0800 | [diff] [blame] | 66 | * If you plan on using IntelliJ as your IDE, then also run |
| 67 | `flutter ide-config --overwrite` to create all of the IntelliJ configuration |
| 68 | files so you can open the main flutter directory as a project and run examples |
| 69 | from within the IDE. |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 70 | |
| 71 | Running the examples |
| 72 | -------------------- |
| 73 | |
Greg Spencer | 797b39e | 2017-11-13 10:55:22 -0800 | [diff] [blame] | 74 | To run an example, switch to that example's directory, and use `flutter run`. |
| 75 | Make sure you have an emulator running, or a device connected over USB and |
| 76 | debugging enabled on that device. |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 77 | |
Ali Ghassemi | 53c86e0 | 2016-05-20 13:06:03 -0700 | [diff] [blame] | 78 | * `cd examples/hello_world` |
| 79 | * `flutter run` |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 80 | |
| 81 | You can also specify a particular Dart file to run if you want to run an example |
| 82 | that doesn't have a `lib/main.dart` file using the `-t` command-line option. For |
Ali Ghassemi | 705b5d1 | 2016-05-20 13:53:18 -0700 | [diff] [blame] | 83 | example, to run the `widgets/spinning_square.dart` example in the [examples/layers](examples/layers) |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 84 | directory on a connected Android device, from that directory you would run: |
Ali Ghassemi | 53c86e0 | 2016-05-20 13:06:03 -0700 | [diff] [blame] | 85 | `flutter run -t widgets/spinning_square.dart` |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 86 | |
| 87 | When running code from the examples directory, any changes you make to the |
| 88 | example code, as well as any changes to Dart code in the |
| 89 | [packages/flutter](packages/flutter) directory and subdirectories, will |
| 90 | automatically be picked when you relaunch the app. You can do the same for your |
| 91 | own code by mimicking the `pubspec.yaml` files in the `examples` subdirectories. |
| 92 | |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 93 | Running the analyzer |
| 94 | -------------------- |
| 95 | |
Ian Hickson | 36e7138 | 2017-09-23 22:23:09 -0700 | [diff] [blame] | 96 | When editing Flutter code, it's important to check the code with the |
| 97 | analyzer. There are two main ways to run it. In either case you will |
| 98 | want to run `flutter update-packages` first, or you will get bogus |
| 99 | error messages about core classes like Offset from `dart:ui`. |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 100 | |
Devon Carew | 09dec7f | 2018-05-10 09:48:40 -0700 | [diff] [blame] | 101 | For a one-off, use `flutter analyze --flutter-repo`. This uses the `analysis_options.yaml` file |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 102 | at the root of the repository for its configuration. |
| 103 | |
| 104 | For continuous analysis, use `flutter analyze --flutter-repo --watch`. This uses normal |
Dan Rubel | 3a31c35 | 2017-08-15 08:46:42 -0400 | [diff] [blame] | 105 | `analysis_options.yaml` files, and they can differ from package to package. |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 106 | |
| 107 | If you want to see how many members are missing dartdocs, you should use the first option, |
| 108 | providing the additional command `--dartdocs`. |
| 109 | |
| 110 | If you omit the `--flutter-repo` option you may end up in a confusing state because that will |
| 111 | assume you want to check a single package and the flutter repository has several packages. |
| 112 | |
| 113 | |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 114 | Running the tests |
| 115 | ----------------- |
| 116 | |
Seth Ladd | d6dad95 | 2018-01-26 16:34:08 -0800 | [diff] [blame] | 117 | To automatically find all files named `_test.dart` inside a package's `test/` subdirectory, and |
| 118 | run them inside the flutter shell as a test, use the `flutter test` command, e.g: |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 119 | |
Eric Seidel | 723e5f7 | 2015-12-08 14:09:47 -0800 | [diff] [blame] | 120 | * `cd examples/stocks` |
Eric Seidel | 724388d | 2015-12-08 13:51:05 -0800 | [diff] [blame] | 121 | * `flutter test` |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 122 | |
Eric Seidel | 723e5f7 | 2015-12-08 14:09:47 -0800 | [diff] [blame] | 123 | Individual tests can also be run directly, e.g. `flutter test lib/my_app_test.dart` |
| 124 | |
Seth Ladd | d6dad95 | 2018-01-26 16:34:08 -0800 | [diff] [blame] | 125 | Flutter tests use [package:flutter_test](https://github.com/flutter/flutter/tree/master/packages/flutter_test) |
| 126 | which provides flutter-specific extensions on top of [package:test](https://pub.dartlang.org/packages/test). |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 127 | |
Seth Ladd | d6dad95 | 2018-01-26 16:34:08 -0800 | [diff] [blame] | 128 | `flutter test` runs tests inside the flutter shell. To debug tests in Observatory, use the `--start-paused` |
| 129 | option to start the test in a paused state and wait for connection from a debugger. This option lets you |
| 130 | set breakpoints before the test runs. |
Eric Seidel | 723e5f7 | 2015-12-08 14:09:47 -0800 | [diff] [blame] | 131 | |
Alexander Aprelev | 391e91c | 2018-08-30 07:30:25 -0700 | [diff] [blame] | 132 | To run analysis and all the tests for the entire Flutter repository, the same way that Cirrus runs them, run `dart dev/bots/test.dart` and `dart dev/bots/analyze.dart`. |
Eric Seidel | 723e5f7 | 2015-12-08 14:09:47 -0800 | [diff] [blame] | 133 | |
Seth Ladd | d6dad95 | 2018-01-26 16:34:08 -0800 | [diff] [blame] | 134 | If you've built [your own flutter engine](#working-on-the-engine-and-the-framework-at-the-same-time), you |
| 135 | can pass `--local-engine` to change what flutter shell `flutter test` uses. For example, |
Adam Barth | b400250 | 2016-05-31 10:28:25 -0700 | [diff] [blame] | 136 | if you built an engine in the `out/host_debug_unopt` directory, you can pass |
| 137 | `--local-engine=host_debug_unopt` to run the tests in that engine. |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 138 | |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 139 | Flutter tests are headless, you won't see any UI. You can use |
Ian Hickson | 3419068 | 2015-11-09 00:30:45 -0800 | [diff] [blame] | 140 | `print` to generate console output or you can interact with the DartVM |
| 141 | via observatory at [http://localhost:8181/](http://localhost:8181/). |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 142 | |
| 143 | Adding a test |
| 144 | ------------- |
| 145 | |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 146 | To add a test to the Flutter package, create a file whose name |
Ian Hickson | 7151fdd | 2015-12-15 22:32:45 -0800 | [diff] [blame] | 147 | ends with `_test.dart` in the `packages/flutter/test` directory. The |
Mikkel Nygaard Ravn | 711174a | 2018-05-24 17:15:35 +0200 | [diff] [blame] | 148 | test should have a `main` function and use the `flutter_test` package. |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 149 | |
xster | 606ee36 | 2017-01-25 19:00:06 -0800 | [diff] [blame] | 150 | Working with flutter tools |
| 151 | -------------------------- |
| 152 | |
krisgiesing | b6185b6 | 2017-10-05 16:34:16 -0700 | [diff] [blame] | 153 | The flutter tool itself is built when you run `flutter` for the first time and each time |
xster | 606ee36 | 2017-01-25 19:00:06 -0800 | [diff] [blame] | 154 | you run `flutter upgrade`. If you want to alter and re-test the tool's behavior itself, |
| 155 | locally commit your tool changes in git and the tool will be rebuilt from Dart sources |
| 156 | in `packages/flutter_tools` the next time you run `flutter`. |
| 157 | |
Michael Goderbauer | 7532a99 | 2017-08-10 08:46:56 -0700 | [diff] [blame] | 158 | Alternatively, delete the `bin/cache/flutter_tools.snapshot` file. Doing so will |
| 159 | force a rebuild of the tool from your local sources the next time you run `flutter`. |
| 160 | |
xster | 606ee36 | 2017-01-25 19:00:06 -0800 | [diff] [blame] | 161 | flutter_tools' tests run inside the Dart command line VM rather than in the |
Phil Quitslund | 82e1882 | 2017-12-14 06:01:28 -0800 | [diff] [blame] | 162 | flutter shell. To run the tests, ensure that no devices are connected, |
| 163 | then navigate to `flutter_tools` and execute: |
xster | 606ee36 | 2017-01-25 19:00:06 -0800 | [diff] [blame] | 164 | |
Phil Quitslund | 82e1882 | 2017-12-14 06:01:28 -0800 | [diff] [blame] | 165 | ```shell |
Mikkel Nygaard Ravn | 9bc048c | 2018-02-08 22:15:08 +0100 | [diff] [blame] | 166 | ../../bin/cache/dart-sdk/bin/pub run test -j1 |
Phil Quitslund | 82e1882 | 2017-12-14 06:01:28 -0800 | [diff] [blame] | 167 | ``` |
xster | 606ee36 | 2017-01-25 19:00:06 -0800 | [diff] [blame] | 168 | |
| 169 | The pre-built flutter tool runs in release mode with the observatory off by default. |
| 170 | To enable debugging mode and the observatory on the `flutter` tool, uncomment the |
| 171 | `FLUTTER_TOOL_ARGS` line in the `bin/flutter` shell script. |
| 172 | |
Ian Hickson | 529d250 | 2018-06-01 12:04:20 -0700 | [diff] [blame] | 173 | Using git |
| 174 | --------- |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 175 | |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 176 | To start working on a patch: |
| 177 | |
| 178 | * `git fetch upstream` |
| 179 | * `git checkout upstream/master -b name_of_your_branch` |
Ian Hickson | 895aaa9 | 2016-12-15 15:59:57 -0800 | [diff] [blame] | 180 | * Hack away. |
Ian Hickson | 3419068 | 2015-11-09 00:30:45 -0800 | [diff] [blame] | 181 | * `git commit -a -m "<your informative commit message>"` |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 182 | * `git push origin name_of_your_branch` |
| 183 | |
| 184 | To send us a pull request: |
| 185 | |
| 186 | * `git pull-request` (if you are using [Hub](http://github.com/github/hub/)) or |
| 187 | go to `https://github.com/flutter/flutter` and click the |
| 188 | "Compare & pull request" button |
| 189 | |
| 190 | Please make sure all your checkins have detailed commit messages explaining the patch. |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 191 | |
Ian Hickson | be9dd4b | 2017-07-13 10:23:29 -0700 | [diff] [blame] | 192 | Once you've gotten an LGTM from a project maintainer and once your PR has received |
Greg Spencer | e60087a | 2018-08-07 13:41:33 -0700 | [diff] [blame] | 193 | the green light from all our automated testing (running on Cirrus, etc), and once |
Ian Hickson | be9dd4b | 2017-07-13 10:23:29 -0700 | [diff] [blame] | 194 | the tree is green (see the [design principles](https://flutter.io/design-principles/) |
| 195 | document for more details), submit your changes to the `master` branch using one of |
| 196 | the following methods: |
yjbanov | 15e7bdb | 2016-02-02 11:17:16 -0800 | [diff] [blame] | 197 | |
Ali Ghassemi | 53c86e0 | 2016-05-20 13:06:03 -0700 | [diff] [blame] | 198 | * Wait for one of the project maintainers to submit it for you. |
yjbanov | 15e7bdb | 2016-02-02 11:17:16 -0800 | [diff] [blame] | 199 | * Click the green "Merge pull request" button on the GitHub UI of your pull |
| 200 | request (requires commit access) |
yjbanov | 15e7bdb | 2016-02-02 11:17:16 -0800 | [diff] [blame] | 201 | |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 202 | You must complete the |
| 203 | [Contributor License Agreement](https://cla.developers.google.com/clas). |
| 204 | You can do this online, and it only takes a minute. |
| 205 | If you've never submitted code before, you must add your (or your |
| 206 | organization's) name and contact info to the [AUTHORS](AUTHORS) file. |
| 207 | |
Ian Hickson | cffe481 | 2016-12-10 21:46:57 -0800 | [diff] [blame] | 208 | We grant commit access to people who have gained our trust and demonstrated |
| 209 | a commitment to Flutter. |
| 210 | |
krisgiesing | b6185b6 | 2017-10-05 16:34:16 -0700 | [diff] [blame] | 211 | Tools for tracking and improving test coverage |
| 212 | ---------------------------------------------- |
Adam Barth | 56039c0 | 2016-06-23 13:43:42 -0700 | [diff] [blame] | 213 | |
| 214 | We strive for a high degree of test coverage for the Flutter framework. We use |
| 215 | Coveralls to [track our test coverage](https://coveralls.io/github/flutter/flutter?branch=master). |
| 216 | You can download our current coverage data from cloud storage and visualize it |
| 217 | in Atom as follows: |
| 218 | |
Adam Barth | 428023c | 2017-02-08 10:56:03 -0800 | [diff] [blame] | 219 | * Install [Atom](https://atom.io/). |
Adam Barth | 56039c0 | 2016-06-23 13:43:42 -0700 | [diff] [blame] | 220 | * Install the [lcov-info](https://atom.io/packages/lcov-info) package for Atom. |
Adam Barth | 10931af | 2016-06-23 16:31:25 -0700 | [diff] [blame] | 221 | * Open the `packages/flutter` folder in Atom. |
| 222 | * Open a Dart file in the `lib` directory an type `Ctrl+Alt+C` to bring up the |
| 223 | coverage data. |
| 224 | |
| 225 | If you don't see any coverage data, check that you have an `lcov.info` file in |
| 226 | the `packages/flutter/coverage` directory. It should have been downloaded by the |
| 227 | `flutter update-packages` command you ran previously. |
Adam Barth | 56039c0 | 2016-06-23 13:43:42 -0700 | [diff] [blame] | 228 | |
Adam Barth | 46da9e8 | 2016-06-23 18:02:55 -0700 | [diff] [blame] | 229 | If you want to iterate quickly on improving test coverage, consider using this |
| 230 | workflow: |
| 231 | |
| 232 | * Open a file and observe that some line is untested. |
| 233 | * Write a test that exercises that line. |
| 234 | * Run `flutter test --merge-coverage path/to/your/test_test.dart`. |
| 235 | * After the test passes, observe that the line is now tested. |
| 236 | |
| 237 | This workflow merges the coverage data from this test run with the base coverage |
| 238 | data downloaded by `flutter update-packages`. |
| 239 | |
Adam Barth | 56039c0 | 2016-06-23 13:43:42 -0700 | [diff] [blame] | 240 | See [issue 4719](https://github.com/flutter/flutter/issues/4719) for ideas about |
| 241 | how to improve this workflow. |
| 242 | |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 243 | Working on the engine and the framework at the same time |
| 244 | -------------------------------------------------------- |
| 245 | |
| 246 | You can work both with this repository (flutter.git) and the Flutter |
| 247 | [engine repository](https://github.com/flutter/engine) at the same time using |
| 248 | the following steps. |
| 249 | |
| 250 | 1. Follow the instructions above for creating a working copy of this repository. |
| 251 | |
| 252 | 2. Follow the [contributing instructions](https://github.com/flutter/engine/blob/master/CONTRIBUTING.md) |
Yegor | e9cf950 | 2018-03-23 17:51:41 -0700 | [diff] [blame] | 253 | in the engine repository to create a working copy of the engine. The instructions |
| 254 | also explain how to use a locally-built engine instead of the one bundled with |
| 255 | your installation of the Flutter framework. |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 256 | |
| 257 | Making a breaking change to the engine |
| 258 | -------------------------------------- |
| 259 | |
krisgiesing | 3dfdf4b | 2016-03-15 13:16:48 -0700 | [diff] [blame] | 260 | If you make a breaking change to the engine, you'll need to land your change in a |
Adam Barth | 576795d | 2015-11-08 21:33:00 -0800 | [diff] [blame] | 261 | few steps: |
| 262 | |
| 263 | 1. Land your change in the engine repository. |
| 264 | |
| 265 | 2. Publish a new version of the engine that contains your change. See the |
| 266 | engine's [release process](https://github.com/flutter/engine/wiki/Release-process) |
| 267 | for instructions about how to publish a new version of the engine. Publishing |
| 268 | a new version is important in order to not break folks using prebuilt |
| 269 | binaries in their workflow (e.g., our customers). |
| 270 | |
Seth Ladd | d6dad95 | 2018-01-26 16:34:08 -0800 | [diff] [blame] | 271 | API docs for master branch |
| 272 | -------------------------- |
| 273 | |
| 274 | To view the API docs for the `master` branch, |
| 275 | visit https://master-docs-flutter-io.firebaseapp.com/. |
| 276 | |
| 277 | Those docs should be updated after a successful CI build |
| 278 | of Flutter's `master` branch. |
| 279 | |
| 280 | (Looking for the API docs for our releases? |
| 281 | Please visit https://docs.flutter.io.) |
Yegor | bf4409f | 2017-12-06 17:30:44 -0800 | [diff] [blame] | 282 | |
| 283 | Build infrastructure |
| 284 | -------------------- |
| 285 | |
| 286 | We build and test Flutter on: |
| 287 | |
Greg Spencer | e60087a | 2018-08-07 13:41:33 -0700 | [diff] [blame] | 288 | - [Cirrus](https://cirrus-ci.com/) ([details](.cirrus.yml)) |
Yegor | bf4409f | 2017-12-06 17:30:44 -0800 | [diff] [blame] | 289 | - Chromebots (a.k.a. "recipes", [details](dev/bots/README.md)) |
Leaf Petersen | 1dca1b2 | 2018-01-11 08:55:14 -0800 | [diff] [blame] | 290 | - Devicelab (a.k.a. "cocoon", [details](dev/devicelab/README.md)) |