| # Monorepo |
| |
| ## A gclient solution for checking out Dart and Flutter source trees |
| |
| Monorepo is: |
| |
| * **Optimized for Tip-of-Tree testing**: |
| The Monorepo DEPS used to check out Dart and Flutter dependencies comes |
| from the Flutter engine DEPS with updated dependencies from Dart. |
| |
| ## Checking out Monorepo |
| |
| With depot_tools installed and on your path, create a directory for |
| your monorepo checkout and run these commands to create a gclient solution |
| in that directory: |
| |
| ```bash |
| mkdir monorepo |
| cd monorepo |
| gclient config --unmanaged https://dart.googlesource.com/monorepo |
| gclient sync -D |
| ``` |
| |
| This gives you a checkout in the monorepo directory that contains: |
| |
| ```asciidoc |
| monorepo/ |
| DEPS - the DEPS used for this gclient checkout |
| commits.json - the pinned commits for Dart, flutter/engine, |
| and flutter/flutter |
| tools/ - scripts used to create monorepo DEPS |
| engine/src/ - the flutter/buildroot repo |
| flutter/ - the flutter/engine repo |
| out/ - the build directory, where Flutter engine builds are created |
| third_party/ - Flutter dependencies checked out by DEPS |
| dart/ - the Dart SDK checkout. |
| third_party - Dart dependencies, also used by Flutter |
| flutter/ - the flutter/flutter repo |
| ``` |
| |
| ## Building Flutter engine |
| |
| Flutter's instructions for building the engine are at |
| [Compiling the engine]( |
| https://github.com/flutter/flutter/wiki/Compiling-the-engine) |
| |
| They can be followed closely, with a few changes: |
| |
| * Googlers working on Dart do not need to switch to Fuchsia's Goma RBE, |
| except for Windows. The GOMA_DIR enviroment variable can just point to |
| the .cipd_bin directory in a depot_tools installation, and just |
| `goma_ctl ensure_start` is sufficient. |
| * The --no-prebuilt-dart-sdk option has to be added to every gn command, |
| so that the build is set up to build and use a local Dart SDK. |
| * The --full-dart-sdk option must be added to gn for the host build target |
| if you will be building web or desktop apps. |
| |
| Example build commands that work on linux: |
| ```shell |
| MONOREPO_PATH=$PWD |
| if [[ ! $PATH =~ (^|:)$MONOREPO_PATH/flutter/bin(:|$) ]]; then |
| PATH=$MONOREPO_PATH/flutter/bin:$PATH |
| fi |
| |
| export GOMA_DIR=$(dirname $(command -v gclient))/.cipd_bin |
| goma_ctl ensure_start |
| |
| pushd engine/src |
| flutter/tools/gn --goma --no-prebuilt-dart-sdk --unoptimized --full-dart-sdk |
| autoninja -C out/host_debug_unopt |
| popd |
| ``` |
| |
| ## Building Flutter apps |
| |
| The Flutter commands used to build and run apps will use the locally built |
| Flutter engine and Dart SDK, instead of the one downloaded by the Flutter tool, |
| if the `--local-engine` option is provided. |
| |
| For example, to build and run the |
| Flutter spinning square sample on the web platform, |
| ```sh |
| MONOREPO_PATH=$PWD |
| cd flutter/examples/layers |
| flutter --local-engine=host_debug_unopt \ |
| -d chrome run widgets/spinning_square.dart |
| cd $MONOREPO_PATH |
| ``` |
| To build for desktop, specify the desktop platform device in `flutter run` as |
| `-d macos` or `-d linux` or `-d windows`. |
| You may also need to run the command |
| ```sh |
| flutter create --platforms=windows,macos,linux |
| ``` |
| on existing apps, such as sample apps. New apps created with `flutter create` |
| already include these support files. Details of desktop support are at |
| [Desktop Support for Flutter](https://docs.flutter.dev/desktop) |
| |
| ## Testing |
| |
| Tests in the Flutter source tree can be run with the `flutter test` command, |
| run in the directory of a package containing tests. For example: |
| |
| ```sh |
| MONOREPO_PATH=$PWD |
| cd flutter/packages/flutter |
| flutter test --local-engine=host_debug_unopt |
| cd $MONOREPO_PATH |
| ``` |
| |
| ## Troubleshooting |
| |
| Please file an [issue](https://github.com/dart-lang/sdk/issues/new?labels=area-infrastructure,monorepo&title=Monorepo+suggestion&assignees=whesse&body=I+suggest+that+...) |
| or email the dart-engprod team with any problems with or questions about |
| using monorepo. |
| |
| We will update this documentation to address them. |
| |
| * `flutter` commands may download the engine and Dart SDK files for |
| the configured channel, even though they will be using the local engine |
| and its SDK. |
| |
| ### Windows |
| |
| * On Windows, `gclient sync` needs to be run in an administrator session, |
| because some installed dependencies create symlinks. |