| Index: tools/gardening/lib/src/buildbot_data.dart
|
| diff --git a/tools/gardening/lib/src/buildbot_data.dart b/tools/gardening/lib/src/buildbot_data.dart
|
| index 1d67b64e841e89239f4b10336ba0fd9b9e3f2d0e..31fd89649d8b13a1f62d0b7bfd3cf07e367ba8a7 100644
|
| --- a/tools/gardening/lib/src/buildbot_data.dart
|
| +++ b/tools/gardening/lib/src/buildbot_data.dart
|
| @@ -2,7 +2,10 @@
|
| // 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.
|
|
|
| +import 'dart:async';
|
| import 'buildbot_structures.dart';
|
| +import 'logdog.dart' as logdog;
|
| +import 'util.dart';
|
|
|
| /// Data describing the steps of the buildbots.
|
| const List<BuildGroup> buildGroups = const <BuildGroup>[
|
| @@ -344,6 +347,7 @@ const List<BuildGroup> buildGroups = const <BuildGroup>[
|
| 'dart2js d8 package tests',
|
| 'dart2js d8 co19 tests',
|
| 'dart2js d8 extra tests',
|
| + 'dart2js-with-kernel d8 tests',
|
| 'dart2js d8 fast-startup tests',
|
| 'dart2js d8 observatory_ui fast-startup tests',
|
| 'dart2js d8 package fast-startup tests',
|
| @@ -478,18 +482,10 @@ const List<BuildGroup> buildGroups = const <BuildGroup>[
|
| subgroups: const <BuildSubgroup>[
|
| const BuildSubgroup(shardNames: const <String>[
|
| 'dart-sdk-linux-be',
|
| - ], testSteps: const <String>[
|
| - 'annotated_steps',
|
| - ]),
|
| - const BuildSubgroup(shardNames: const <String>[
|
| 'dart-sdk-windows-be',
|
| - ], testSteps: const <String>[
|
| - 'annotated_steps',
|
| - ]),
|
| - const BuildSubgroup(shardNames: const <String>[
|
| 'dart-sdk-mac-be',
|
| ], testSteps: const <String>[
|
| - 'annotated_steps',
|
| + 'generate_sdks',
|
| ]),
|
| const BuildSubgroup(shardNames: const <String>[
|
| 'sdk-trigger-be',
|
| @@ -503,18 +499,13 @@ const List<BuildGroup> buildGroups = const <BuildGroup>[
|
| subgroups: const <BuildSubgroup>[
|
| const BuildSubgroup(shardNames: const <String>[
|
| 'dartium-linux-x64-inc-be',
|
| - ], testSteps: const <String>[
|
| - 'annotated steps',
|
| - ]),
|
| - const BuildSubgroup(shardNames: const <String>[
|
| 'dartium-mac-x64-inc-be',
|
| - ], testSteps: const <String>[
|
| - 'annotated steps',
|
| - ]),
|
| - const BuildSubgroup(shardNames: const <String>[
|
| 'dartium-win-ia32-inc-be',
|
| ], testSteps: const <String>[
|
| - 'annotated steps',
|
| + 'drt_layout_unchecked_tests',
|
| + 'drt_layout_checked_tests',
|
| + 'dartium_core_unchecked_tests',
|
| + 'dartium_core_checked_tests',
|
| ]),
|
| ],
|
| ),
|
| @@ -837,7 +828,7 @@ class BuildSubgroup {
|
| Map<String, String> get logDogPaths {
|
| Map<String, String> paths = <String, String>{};
|
| for (String shardName in shardNames) {
|
| - paths[shardName] = 'chromium/bb/client.dart/$shardName';
|
| + paths[shardName] = getLogDogPath(shardName);
|
| }
|
| return paths;
|
| }
|
| @@ -860,3 +851,106 @@ class BuildSubgroup {
|
| return uriList;
|
| }
|
| }
|
| +
|
| +/// Computes the logdog path for a build bot with the given [botName].
|
| +String getLogDogPath(String botName) {
|
| + return 'chromium/bb/client.dart/$botName';
|
| +}
|
| +
|
| +/// Pulls the list of the build numbers (in decreasing order) of the available
|
| +/// builds for [botName] using logdog.
|
| +Future<List<int>> lookupBotBuildNumbers(String botName) async {
|
| + String subgroupPath = getLogDogPath(botName);
|
| + List<int> buildNumbers = <int>[];
|
| + log('Lookup build numbers for $subgroupPath');
|
| + String text = await logdog.ls(subgroupPath);
|
| + for (String line in text.split('\n')) {
|
| + line = line.trim();
|
| + if (line.isNotEmpty) {
|
| + buildNumbers.add(int.parse(line));
|
| + }
|
| + }
|
| + buildNumbers.sort((a, b) => -a.compareTo(b));
|
| + return buildNumbers;
|
| +}
|
| +
|
| +/// Returns the index of [buildNumber] in the decreasing list of
|
| +/// [absoluteBuildNumbers].
|
| +///
|
| +/// If [buildNumber] is negative it is interpreted as a relative number; -1
|
| +/// is the last build number (the largest), -2 is the second-to-last build
|
| +/// number etc.
|
| +///
|
| +/// If [buildNumber] is non-negative and not in [absoluteBuildNumbers], the
|
| +/// index of the next available build number: looking up 3 in [5, 4, 2, 1]
|
| +/// returns index 2 (the index of 2).
|
| +///
|
| +/// If no index is found, `null` is returned.
|
| +int getBuildNumberIndex(List<int> absoluteBuildNumbers, int buildNumber) {
|
| + if (buildNumber < 0) {
|
| + int buildNumberIndex = -buildNumber - 1;
|
| + if (buildNumberIndex < absoluteBuildNumbers.length) {
|
| + return buildNumberIndex;
|
| + } else {
|
| + return null;
|
| + }
|
| + } else {
|
| + for (int i = 0; i < absoluteBuildNumbers.length; i++) {
|
| + if (absoluteBuildNumbers[i] <= buildNumber) return i;
|
| + }
|
| + return null;
|
| + }
|
| +}
|
| +
|
| +Future<int> lookupAbsoluteBuildNumber(
|
| + String botName, int relativeBuildNumber) async {
|
| + if (relativeBuildNumber >= 0) return relativeBuildNumber;
|
| + List<int> absoluteBuildNumbers = await lookupBotBuildNumbers(botName);
|
| + int buildNumberIndex =
|
| + getBuildNumberIndex(absoluteBuildNumbers, relativeBuildNumber);
|
| + return buildNumberIndex != null
|
| + ? absoluteBuildNumbers[buildNumberIndex]
|
| + : null;
|
| +}
|
| +
|
| +Map<BuildSubgroup, List<String>> findSubgroupsByName(String name) {
|
| + Map<BuildSubgroup, List<String>> subgroups = <BuildSubgroup, List<String>>{};
|
| + for (BuildGroup group in buildGroups) {
|
| + if (group.groupName == name) {
|
| + for (BuildSubgroup subgroup in group.subgroups) {
|
| + subgroups[subgroup] = subgroup.shardNames;
|
| + }
|
| + } else {
|
| + for (BuildSubgroup subgroup in group.subgroups) {
|
| + List<String> shardNames = <String>[];
|
| + for (String shardName in subgroup.shardNames) {
|
| + if (shardName.contains(name)) {
|
| + shardNames.add(shardName);
|
| + }
|
| + }
|
| + if (shardNames.isNotEmpty) {
|
| + subgroups[subgroup] = shardNames;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + return subgroups;
|
| +}
|
| +
|
| +Map<BuildSubgroup, List<String>> findSubgroupsByStep(String stepName) {
|
| + Map<BuildSubgroup, List<String>> subgroups = <BuildSubgroup, List<String>>{};
|
| + for (BuildGroup group in buildGroups) {
|
| + for (BuildSubgroup subgroup in group.subgroups) {
|
| + List<String> stepNames = <String>[];
|
| + for (String step in subgroup.testSteps) {
|
| + if (step.contains(stepName)) {
|
| + stepNames.add(step);
|
| + }
|
| + }
|
| + if (stepNames.isNotEmpty) {
|
| + subgroups[subgroup] = stepNames;
|
| + }
|
| + }
|
| + }
|
| + return subgroups;
|
| +}
|
|
|