// Copyright 2020 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:io'; import 'package:path/path.dart' as p; import 'common.dart'; void main() async { final packageDirs = listPackageDirs(Directory.current) .map((path) => p.relative(path, from: Directory.current.path)) .where((path) => !p.dirname(path).startsWith('_')) .toList(); print('Package dirs:\n${packageDirs.map((path) => ' $path').join('\n')}'); final results = []; for (var i = 0; i < packageDirs.length; i++) { final dir = packageDirs[i]; logWrapped(ansiMagenta, '\n$dir (${i + 1} of ${packageDirs.length})'); final upgradeResult = await run(dir, 'flutter', [ 'pub', 'pub', 'upgrade', '--no-precompile', ]); results.add(upgradeResult); if (!upgradeResult) { // skipping analyze when `pub upgrade` fails. results.add(false); continue; } results.add(await run( dir, 'dart', ['analyze', '--fatal-infos', '--fatal-warnings', '.'], )); _printStatus(results); } if (results.any((v) => !v)) { exitCode = 1; } } void _printStatus(List results) { var successCount = results.where((t) => t).length; var success = (successCount == results.length); var pct = 100 * successCount / results.length; logWrapped(success ? ansiGreen : ansiRed, '$successCount of ${results.length} (${pct.toStringAsFixed(2)}%)'); }