dart-sdk/tools/bots/extend_results.dart
Robert Nystrom 0689ec527a Move "test.dart" (well, most of its contents) into pkg/test_runner.
I don't like having a large volume of Dart code sitting under tools/
where it is hard to analyze, lint, test, and reuse. Also, eventually
we want to merge test.dart and test.py. This seems like an easy mostly
mechanical first step.

All I did was:

1. Move the contents of tools/test.dart to
   pkg/test_runner/lib/test_runner.dart. (That's not a great file name
   since we already have pkg/test_runner/bin/test_runner.dart, but it
   was the best I could come up with.

2. Copy tools/bots/results to pkg/test_runner/bot_results.dart. I
   don't like duplicating this, but there are other scripts under tools
   that import the old location. Eventually, we should have those
   scripts import it from package:test_runner/bot_results.dart, but I
   didn't want to do that here since I'm not familiar with those other
   scripts.

3. Make tools/test.dart import and forward to
   pkg/test_runner/lib/test_runner.dart.

4. Fix any linter and type errors. The test_runner package has a bunch
   of strictness checks and lints enable to keep it cleaner.

5. Run dartfmt --fix to format and get rid of "new", etc.

Change-Id: Ifc89817508d3fc147fa78dbc6744d547aeaf4c55
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/155240
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Jonas Termansen <sortie@google.com>
2020-07-22 23:00:49 +00:00

82 lines
2.8 KiB
Dart

// Copyright (c) 2019, 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.
// Add fields with data about the test run and the commit tested, and
// with the result on the last build tested, to the test results file.
import 'dart:convert';
import 'dart:io';
import 'package:test_runner/bot_results.dart';
const skipped = 'skipped';
main(List<String> args) async {
final resultsPath = args[0];
final priorResultsPath = args[1];
final flakyPath = args[2];
final priorFlakyPath = args[3];
final builderName = args[4];
final buildNumber = args[5];
final commitTime = int.parse(args[6]);
final commitHash = args[7];
final newResultsPath = args[8];
// Load the input and the flakiness data if specified.
final results = await loadResultsMap(resultsPath);
final priorResults = await loadResultsMap(priorResultsPath);
final flakes = await loadResultsMap(flakyPath);
final priorFlakes = await loadResultsMap(priorFlakyPath);
final firstPriorResult =
priorResults.isEmpty ? null : priorResults.values.first;
priorResults.forEach((key, priorResult) {
if (priorResult['result'] != skipped) {
results.putIfAbsent(key, () => constructNotRunResult(priorResult));
}
});
for (final String key in results.keys) {
final Map<String, dynamic> result = results[key];
final Map<String, dynamic> priorResult = priorResults[key];
final Map<String, dynamic> flaky = flakes[key];
final Map<String, dynamic> priorFlaky = priorFlakes[key];
result['commit_hash'] = commitHash;
result['commit_time'] = commitTime;
result['build_number'] = buildNumber;
result['builder_name'] = builderName;
result['flaky'] = (flaky != null);
result['previous_flaky'] = (priorFlaky != null);
if (firstPriorResult != null) {
result['previous_commit_hash'] = firstPriorResult['commit_hash'];
result['previous_commit_time'] = firstPriorResult['commit_time'];
result['previous_build_number'] = firstPriorResult['build_number'];
}
if (priorResult != null) {
result['previous_result'] = priorResult['result'];
}
result['changed'] = (result['result'] != result['previous_result'] ||
result['flaky'] != result['previous_flaky']);
}
final sink = new File(newResultsPath).openWrite();
final sorted = results.keys.toList()..sort();
for (final key in sorted) {
sink.writeln(jsonEncode(results[key]));
}
sink.close();
}
Map<String, dynamic> constructNotRunResult(Map<String, dynamic> previous) => {
for (final key in [
'name',
'configuration',
'suite',
'test_name',
'expected'
])
key: previous[key],
'time_ms': 0,
'result': skipped,
'matches': true,
'bot_name': '',
};