// 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<String> args) => grind(args); @DefaultTask() @Depends(pubGet, generateJsonBindings, analyzeSource, test) void build() {} @Task() Future<void> pubGet() async => _logProcessOutput( Process.start( 'flutter', ['pub', 'get'], ), ); @Task() Future<void> generateJsonBindings() async => _logProcessOutput( Process.start( 'flutter', ['pub', 'run', 'build_runner', 'build', '--delete-conflicting-outputs'], ), ); @Task() Future<void> watch() async => _logProcessOutput( Process.start( 'flutter', ['pub', 'run', 'build_runner', 'watch'], ), ); @Task() Future<void> analyzeSource() async => _logProcessOutput( Process.start( 'flutter', ['analyze'], ), ); @Task() Future<void> test() async => _logProcessOutput( Process.start( 'flutter', ['test'], ), ); @Task() Future<void> clean() => _logProcessOutput( Process.start( 'flutter', ['clean'], ), ); Future<void> _logProcessOutput(Future<Process> proc) async { final process = await proc; final output = StreamGroup.merge([process.stdout, process.stderr]); await for (final message in output) { log(utf8.decode(message)); } }