diff --git a/.cirrus.yml b/.cirrus.yml
new file mode 100644
index 0000000000..bd21b3c959
--- /dev/null
+++ b/.cirrus.yml
@@ -0,0 +1,42 @@
+container:
+ image: cirrusci/flutter:base
+
+task:
+ env:
+ CIRRUS_WORKING_DIR: "/tmp/flutter sdk"
+ PATH: "$CIRRUS_WORKING_DIR/bin:$CIRRUS_WORKING_DIR/bin/cache/dart-sdk/bin:$PATH"
+ SHARD: "$CIRRUS_TASK_NAME"
+
+ git_fetch_script: git fetch origin
+ setup_script: |
+ echo "SDK directory is: $PWD"
+ ./bin/flutter --version
+
+ # disable analytics on the bots and download Flutter dependencies
+ ./bin/flutter config --no-analytics
+
+ # run pub get in all the repo packages
+ ./bin/flutter update-packages
+
+ matrix:
+ - name: docs
+ docs_script: ./dev/bots/docs.sh
+ - name: analyze
+ test_script: dart ./dev/bots/test.dart
+ - name: tests
+ test_script: dart ./dev/bots/test.dart
+ container:
+ cpu: 4
+ memory: 8G
+
+windows_task:
+ windows_container:
+ dockerfile: dev/bots/docker/Dockerfile.windows
+ env:
+ CIRRUS_WORKING_DIR: "C:\\Windows\\Temp\\flutter sdk"
+ git_fetch_script: git fetch origin
+ setup_script:
+ - bin\flutter.bat config --no-analytics
+ - bin\flutter.bat update-packages
+ test_all_script:
+ - bin\cache\dart-sdk\bin\dart.exe -c dev\bots\test.dart
diff --git a/README.md b/README.md
index 85a44f9457..acc09c1615 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-#
Flutter [](https://gitter.im/flutter/flutter?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://travis-ci.org/flutter/flutter) [](https://ci.appveyor.com/project/flutter/flutter/branch/master) [](https://coveralls.io/github/flutter/flutter?branch=master)
+#
Flutter [](https://gitter.im/flutter/flutter?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://travis-ci.org/flutter/flutter) [](https://ci.appveyor.com/project/flutter/flutter/branch/master) [](https://cirrus-ci.com/github/flutter/flutter) [](https://coveralls.io/github/flutter/flutter?branch=master)
A new mobile app SDK to help developers and designers build modern mobile apps for iOS and Android. Flutter is an open-source project currently in beta.
diff --git a/dev/bots/docker/Dockerfile.windows b/dev/bots/docker/Dockerfile.windows
new file mode 100644
index 0000000000..008782704e
--- /dev/null
+++ b/dev/bots/docker/Dockerfile.windows
@@ -0,0 +1,13 @@
+FROM microsoft/windowsservercore:1709
+
+SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
+
+RUN netsh interface ipv4 set subinterface 'vEthernet (Ethernet)' mtu=1460 store=persistent
+
+RUN Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+
+RUN choco install -y git
+
+SHELL ["cmd", "/S", "/C"]
+
+RUN setx /m PATH "%PATH%;C:\nodejs"
\ No newline at end of file
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index dc47d11e9c..6fb1b19035 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -78,18 +78,12 @@ Future _verifyInternationalizations() async {
);
final String localizationsFile = path.join('packages', 'flutter_localizations', 'lib', 'src', 'l10n', 'localizations.dart');
+ final String expectedResult = await new File(localizationsFile).readAsString();
- final String executable = Platform.isWindows ? 'powershell' : 'cat';
- final List args = Platform.isWindows ?
- ['\$PSDefaultParameterValues["*:Encoding"]="utf8";(gc $localizationsFile) -join "`n"']:
- [localizationsFile];
-
- final EvalResult sourceContents = await _evalCommand(executable, args, workingDirectory: flutterRoot);
-
- if (genResult.stdout.trim() != sourceContents.stdout.trim()) {
+ if (genResult.stdout.trim() != expectedResult.trim()) {
stderr
..writeln('<<<<<<< $localizationsFile')
- ..writeln(sourceContents.stdout.trim())
+ ..writeln(expectedResult.trim())
..writeln('=======')
..writeln(genResult.stdout.trim())
..writeln('>>>>>>> gen_localizations')
@@ -343,8 +337,10 @@ Future _runCommand(String executable, List arguments, {
Future>> savedStdout, savedStderr;
if (printOutput) {
- stdout.addStream(process.stdout);
- stderr.addStream(process.stderr);
+ await Future.wait(>[
+ stdout.addStream(process.stdout),
+ stderr.addStream(process.stderr)
+ ]);
} else {
savedStdout = process.stdout.toList();
savedStderr = process.stderr.toList();
diff --git a/examples/layers/rendering/flex_layout.dart b/examples/layers/rendering/flex_layout.dart
index 0084ebae84..004e74fa62 100644
--- a/examples/layers/rendering/flex_layout.dart
+++ b/examples/layers/rendering/flex_layout.dart
@@ -10,7 +10,7 @@ import 'package:flutter/rendering.dart';
import 'src/solid_color_box.dart';
void main() {
- final RenderFlex table = new RenderFlex(direction: Axis.vertical);
+ final RenderFlex table = new RenderFlex(direction: Axis.vertical, textDirection: TextDirection.ltr);
void addAlignmentRow(CrossAxisAlignment crossAxisAlignment) {
TextStyle style = const TextStyle(color: const Color(0xFF000000));