121 lines
4.3 KiB
Dart
121 lines
4.3 KiB
Dart
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
/// Collects the test results for all build bots in [buildGroups] for tests
|
|
/// that mention one of the test names given as argument.
|
|
///
|
|
/// The results are currently pulled from the second to last build since the
|
|
/// last build might not have completed yet.
|
|
|
|
import 'dart:async';
|
|
import 'dart:math' hide log;
|
|
import 'dart:io';
|
|
|
|
import 'package:args/args.dart';
|
|
import 'package:gardening/src/bot.dart';
|
|
import 'package:gardening/src/buildbot_data.dart';
|
|
import 'package:gardening/src/buildbot_structures.dart';
|
|
import 'package:gardening/src/util.dart';
|
|
|
|
void help(ArgParser argParser) {
|
|
print('Displays the current status of specific tests on the buildbot');
|
|
print('The test-names may be fully qualified (such as in ');
|
|
print('"pkg/front_end/test/token_test") or just be a substring of the fully');
|
|
print(' qualified name.');
|
|
print('Usage: current_summary [options] <test-name1> [<test-name2> ...]');
|
|
print('where options are:');
|
|
print(argParser.usage);
|
|
}
|
|
|
|
Future main(List<String> args) async {
|
|
ArgParser argParser = createArgParser();
|
|
argParser.addOption('group',
|
|
help: "Restricts the build groups\n"
|
|
"to be searched for the results of the given test\n"
|
|
"to those containing the given substring, case insensitive.");
|
|
ArgResults argResults = argParser.parse(args);
|
|
processArgResults(argResults);
|
|
|
|
Bot bot = new Bot(logdog: argResults['logdog']);
|
|
|
|
if (argResults.rest.length == 0 || argResults['help']) {
|
|
help(argParser);
|
|
if (argResults['help']) return;
|
|
exit(1);
|
|
}
|
|
int maxStatusWidth = 0;
|
|
int maxConfigWidth = 0;
|
|
|
|
Map<String, Map<BuildUri, TestStatus>> resultMap =
|
|
<String, Map<BuildUri, TestStatus>>{};
|
|
|
|
bool testsFound = false;
|
|
List<BuildGroup> notFoundGroups = <BuildGroup>[];
|
|
for (BuildGroup group in buildGroups) {
|
|
if (argResults['group'] != null &&
|
|
!containsIgnoreCase(group.groupName, argResults['group'])) {
|
|
log('Skipping group $group');
|
|
continue;
|
|
}
|
|
List<BuildUri> uriList = group.createUris(bot.mostRecentBuildNumber);
|
|
if (uriList.isEmpty) continue;
|
|
print('Fetching "${uriList.first}" + ${uriList.length - 1} more ...');
|
|
List<BuildResult> results = await bot.readResults(uriList);
|
|
bool testsFoundInGroup = false;
|
|
for (BuildResult buildResult in results) {
|
|
if (buildResult == null) continue;
|
|
var buildUri = buildResult.buildUri;
|
|
for (TestStatus testStatus in buildResult.results) {
|
|
String testName = testStatus.config.testName;
|
|
for (String arg in argResults.rest) {
|
|
if (testName.contains(arg) || arg.contains(testName)) {
|
|
testsFoundInGroup = true;
|
|
resultMap.putIfAbsent(testName, () => {})[buildUri] = testStatus;
|
|
maxStatusWidth = max(maxStatusWidth, testStatus.status.length);
|
|
maxConfigWidth =
|
|
max(maxConfigWidth, testStatus.config.configName.length);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (testsFoundInGroup) {
|
|
testsFound = true;
|
|
} else {
|
|
notFoundGroups.add(group);
|
|
}
|
|
}
|
|
print('');
|
|
if (testsFound) {
|
|
resultMap.forEach((String testName, Map<BuildUri, TestStatus> statusMap) {
|
|
print(testName);
|
|
statusMap.forEach((BuildUri buildUri, TestStatus status) {
|
|
print(' ${padRight(status.status, maxStatusWidth)}: '
|
|
'${padRight(status.config.configName, maxConfigWidth)} '
|
|
'${buildUri.shortBuildName}');
|
|
});
|
|
});
|
|
if (notFoundGroups.isNotEmpty) {
|
|
if (argResults.rest.length == 1) {
|
|
print("Test pattern '${argResults.rest.single}' not found "
|
|
"in these build bot groups:");
|
|
} else {
|
|
print("Test patterns '${argResults.rest.join("', '")}' not found "
|
|
"in these build bot groups:");
|
|
}
|
|
for (BuildGroup group in notFoundGroups) {
|
|
print(' $group');
|
|
}
|
|
}
|
|
} else {
|
|
if (argResults.rest.length == 1) {
|
|
print("Test pattern '${argResults.rest.single}' not found "
|
|
"in any build bot groups.");
|
|
} else {
|
|
print("Test patterns '${argResults.rest.join("', '")}' not found "
|
|
"in any build bot groups.");
|
|
}
|
|
}
|
|
bot.close();
|
|
}
|