blob: 779c38c94453ba5a5283fd128323bad2748ea1f7 [file] [log] [blame] [edit]
// Copyright 2020 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
import 'dart:async';
import 'package:args/command_runner.dart';
import '../model.dart';
class RepoCheckCommand extends Command {
@override
String get name => 'repo-check';
@override
String get description => 'Validate properties of the repo source code.';
@override
Future run() async {
final repo = DevToolsRepo.getInstance();
print('DevTools repo at ${repo.repoPath}.');
final checks = <Check>[DevToolsVersionCheck()];
print('\nPerforming checks...');
int failureCount = 0;
for (final check in checks) {
print('\nchecking ${check.name}:');
try {
await check.performCheck(repo);
print(' check successful');
} catch (e) {
failureCount++;
print(' failed: $e');
}
}
return failureCount == 0 ? 0 : 1;
}
}
abstract class Check {
String get name;
// Throw if the check fails.
Future<void> performCheck(DevToolsRepo repo);
}
class DevToolsVersionCheck extends Check {
@override
String get name => 'devtools version';
@override
Future<void> performCheck(DevToolsRepo repo) {
// TODO(devoncarew): Update this to use a package to parse the pubspec file;
// https://pub.dev/packages/pubspec.
final pubspecContents = repo.readFile(
Uri.parse('packages/devtools_app/pubspec.yaml'),
);
final versionString = pubspecContents
.split('\n')
.firstWhere((line) => line.startsWith('version:'));
final pubspecVersion = versionString.substring('version:'.length).trim();
final dartFileContents = repo.readFile(
Uri.parse('packages/devtools_app/lib/devtools.dart'),
);
final regexp = RegExp(r"version = '(\S+)';");
final match = regexp.firstMatch(dartFileContents);
if (match == null) {
throw 'Unable to parse the DevTools version from '
'packages/devtools_app/lib/devtools.dart';
}
final dartVersion = match.group(1);
if (pubspecVersion != dartVersion) {
throw 'App version $dartVersion != pubspec version $pubspecVersion; '
'these need to be kept in sync.';
}
print(' version $pubspecVersion');
return Future.value();
}
}