Test engine version hash, but skip for Dart HHH bot (#55223)
This commit is contained in:
parent
c32d1387ab
commit
22239f4183
@ -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();
|
|||||||
/// 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 {
|
|||||||
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 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|||||||
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' : '';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user