// Copyright 2019 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:async/async.dart' show StreamGroup; import 'package:grinder/grinder.dart'; void main(List args) => grind(args); @DefaultTask() @Depends(pubGet, generateJsonBindings, analyzeSource, test) void build() {} @Task() Future pubGet() async => _logProcessOutput( Process.start( 'flutter', ['pub', 'get'], ), ); @Task() Future generateJsonBindings() async => _logProcessOutput( Process.start( 'flutter', ['pub', 'run', 'build_runner', 'build', '--delete-conflicting-outputs'], ), ); @Task() Future watch() async => _logProcessOutput( Process.start( 'flutter', ['pub', 'run', 'build_runner', 'watch'], ), ); @Task() Future analyzeSource() async => _logProcessOutput( Process.start( 'flutter', ['analyze'], ), ); @Task() Future test() async => _logProcessOutput( Process.start( 'flutter', ['test'], ), ); @Task() Future clean() => _logProcessOutput( Process.start( 'flutter', ['clean'], ), ); Future _logProcessOutput(Future proc) async { final process = await proc; final output = StreamGroup.merge([process.stdout, process.stderr]); await for (final message in output) { log(utf8.decode(message)); } }