Unverified Commit 22239f41 authored by Dan Field's avatar Dan Field Committed by GitHub

Test engine version hash, but skip for Dart HHH bot (#55223)

parent c32d1387
...@@ -80,7 +80,7 @@ Future<void> runCommand(String executable, List<String> arguments, { ...@@ -80,7 +80,7 @@ Future<void> runCommand(String executable, List<String> arguments, {
); );
final String commandDescription = '${path.relative(executable, from: workingDirectory)} ${arguments.join(' ')}'; final String commandDescription = '${path.relative(executable, from: workingDirectory)} ${arguments.join(' ')}';
final String relativeWorkingDir = path.relative(workingDirectory); final String relativeWorkingDir = path.relative(workingDirectory ?? Directory.current.path);
if (skip) { if (skip) {
printProgress('SKIPPING', relativeWorkingDir, commandDescription); printProgress('SKIPPING', relativeWorkingDir, commandDescription);
return; return;
......
...@@ -28,12 +28,26 @@ typedef ShardRunner = Future<void> Function(); ...@@ -28,12 +28,26 @@ typedef ShardRunner = Future<void> Function();
/// appropriate error message. /// appropriate error message.
typedef OutputChecker = String Function(CapturedOutput); typedef OutputChecker = String Function(CapturedOutput);
final String exe = Platform.isWindows ? '.exe' : '';
final String bat = Platform.isWindows ? '.bat' : '';
final String flutterRoot = path.dirname(path.dirname(path.dirname(path.fromUri(Platform.script)))); final String flutterRoot = path.dirname(path.dirname(path.dirname(path.fromUri(Platform.script))));
final String flutter = path.join(flutterRoot, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter'); final String flutter = path.join(flutterRoot, 'bin', 'flutter$bat');
final String dart = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'dart.exe' : 'dart'); final String dart = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', 'dart$exe');
final String pub = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'pub.bat' : 'pub'); final String pub = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', 'pub$bat');
final String pubCache = path.join(flutterRoot, '.pub-cache'); final String pubCache = path.join(flutterRoot, '.pub-cache');
final String toolRoot = path.join(flutterRoot, 'packages', 'flutter_tools'); final String toolRoot = path.join(flutterRoot, 'packages', 'flutter_tools');
final String engineVersionFile = path.join(flutterRoot, 'bin', 'internal', 'engine.version');
String get platformFolderName {
if (Platform.isWindows)
return 'windows-x64';
if (Platform.isMacOS)
return 'darwin-x64';
if (Platform.isLinux)
return 'linux-x64';
throw UnsupportedError('The platform ${Platform.operatingSystem} is not supported by this script.');
}
final String flutterTester = path.join(flutterRoot, 'bin', 'cache', 'artifacts', 'engine', platformFolderName, 'flutter_tester$exe');
/// The arguments to pass to `flutter test` (typically the local engine /// The arguments to pass to `flutter test` (typically the local engine
/// configuration) -- prefilled with the arguments passed to test.dart. /// configuration) -- prefilled with the arguments passed to test.dart.
...@@ -118,8 +132,37 @@ Future<void> main(List<String> args) async { ...@@ -118,8 +132,37 @@ Future<void> main(List<String> args) async {
print('$clock ${bold}Test successful.$reset'); print('$clock ${bold}Test successful.$reset');
} }
/// Verify the Flutter Engine is the revision in
/// bin/cache/internal/engine.version.
Future<void> _validateEngineHash() async {
final String luciBotId = Platform.environment['SWARMING_BOT_ID'] ?? '';
if (luciBotId.startsWith('luci-dart-')) {
// The Dart HHH bots intentionally modify the local artifact cache
// and then use this script to run Flutter's test suites.
// Because the artifacts have been changed, this particular test will return
// a false positive and should be skipped.
print('${yellow}Skipping Flutter Engine Version Validation for swarming '
'bot $luciBotId.');
return;
}
final String expectedVersion = File(engineVersionFile).readAsStringSync().trim();
final CapturedOutput flutterTesterOutput = CapturedOutput();
await runCommand(flutterTester, <String>['--help'], output: flutterTesterOutput, outputMode: OutputMode.capture);
final String actualVersion = flutterTesterOutput.stderr.split('\n').firstWhere((final String line) {
return line.startsWith('Flutter Engine Version:');
});
if (!actualVersion.contains(expectedVersion)) {
print('${red}Expected "Flutter Engine Version: $expectedVersion", '
'but found "$actualVersion".');
exit(1);
}
}
Future<void> _runSmokeTests() async { Future<void> _runSmokeTests() async {
print('${green}Running smoketests...$reset'); print('${green}Running smoketests...$reset');
await _validateEngineHash();
// Verify that the tests actually return failure on failure and success on // Verify that the tests actually return failure on failure and success on
// success. // success.
final String automatedTests = path.join(flutterRoot, 'dev', 'automated_tests'); final String automatedTests = path.join(flutterRoot, 'dev', 'automated_tests');
...@@ -1249,7 +1292,6 @@ int get prNumber { ...@@ -1249,7 +1292,6 @@ int get prNumber {
} }
Future<String> _getAuthors() async { Future<String> _getAuthors() async {
final String exe = Platform.isWindows ? '.exe' : '';
final String author = await runAndGetStdout( final String author = await runAndGetStdout(
'git$exe', <String>['-c', 'log.showSignature=false', 'log', gitHash, '--pretty="%an <%ae>"'], 'git$exe', <String>['-c', 'log.showSignature=false', 'log', gitHash, '--pretty="%an <%ae>"'],
workingDirectory: flutterRoot, workingDirectory: flutterRoot,
......
...@@ -12,7 +12,7 @@ final bool hasColor = stdout.supportsAnsiEscapes; ...@@ -12,7 +12,7 @@ final bool hasColor = stdout.supportsAnsiEscapes;
final String bold = hasColor ? '\x1B[1m' : ''; // used for shard titles final String bold = hasColor ? '\x1B[1m' : ''; // used for shard titles
final String red = hasColor ? '\x1B[31m' : ''; // used for errors final String red = hasColor ? '\x1B[31m' : ''; // used for errors
final String green = hasColor ? '\x1B[32m' : ''; // used for section titles, commands final String green = hasColor ? '\x1B[32m' : ''; // used for section titles, commands
final String yellow = hasColor ? '\x1B[33m' : ''; // unused final String yellow = hasColor ? '\x1B[33m' : ''; // used for skips
final String cyan = hasColor ? '\x1B[36m' : ''; // used for paths final String cyan = hasColor ? '\x1B[36m' : ''; // used for paths
final String reverse = hasColor ? '\x1B[7m' : ''; // used for clocks final String reverse = hasColor ? '\x1B[7m' : ''; // used for clocks
final String reset = hasColor ? '\x1B[0m' : ''; final String reset = hasColor ? '\x1B[0m' : '';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment