未验证 提交 dd642b05 编写于 作者: K keyonghan 提交者: GitHub

add supported luci builders (#20099)

* add supported luci builders

* fix license

* add readme

* add code to validate json contents

* license

* move dev to ci

* fix license

* add shell script to run test
上级 ab23dc3a
This directory contains resources that the Flutter team uses during
the development of engine.
## Luci builder file
`engine_try_builders.json` and `engine_prod_builders.json` contains the
supported luci try/prod builders for engine. It follows format:
```json
{
"builders":[
{
"name":"xxx",
"repo":"engine"
},
{
"name":"yyy",
"repo":"engine"
}
]
}
```
This file will be mainly used in [`flutter/cocoon`](https://github.com/flutter/cocoon)
to trigger/update engine luci tasks.
If any new changes, please validate json contents by running
```
dart validate_json.dart engine_try_builders.json
dart validate_json.dart engine_prod_builders.json
```
#!/bin/bash
# Copyright 2020 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Runner for dart tests. It expects a single parameter with the full
# path to the start folder where tests will be run.
set -e
dir=$(dirname $0)
pushd $dir > /dev/null
dart validate_json.dart engine_try_builders.json
dart validate_json.dart engine_prod_builders.json
popd > /dev/null
{
"builders":[
{
"name":"Linux Host Engine",
"repo":"engine"
},
{
"name":"Linux Fuchsia",
"repo":"engine"
},
{
"name":"Linux Android AOT Engine",
"repo":"engine"
},
{
"name":"Linux Android Debug Engine",
"repo":"engine"
},
{
"name":"Mac Host Engine",
"repo":"engine"
},
{
"name":"Mac Android AOT Engine",
"repo":"engine"
},
{
"name":"Mac Android Debug Engine",
"repo":"engine"
},
{
"name":"Mac iOS Engine",
"repo":"engine"
},
{
"name":"Mac iOS Engine Profile",
"repo":"engine"
},
{
"name":"Mac iOS Engine Release",
"repo":"engine"
},
{
"name":"Windows Host Engine",
"repo":"engine"
},
{
"name":"Windows Android AOT Engine",
"repo":"engine"
}
]
}
{
"builders":[
{
"name":"Linux Host Engine",
"repo":"engine"
},
{
"name":"Linux Fuchsia",
"repo":"engine"
},
{
"name":"Linux Android AOT Engine",
"repo":"engine"
},
{
"name":"Linux Android Debug Engine",
"repo":"engine"
},
{
"name":"Linux Web Engine",
"repo":"engine"
},
{
"name":"Mac Host Engine",
"repo":"engine"
},
{
"name":"Mac Android AOT Engine",
"repo":"engine"
},
{
"name":"Mac Android Debug Engine",
"repo":"engine"
},
{
"name":"Mac Host Engine",
"repo":"engine"
},
{
"name":"Mac iOS Engine",
"repo":"engine"
},
{
"name":"Windows Host Engine",
"repo":"engine"
},
{
"name":"Windows Android AOT Engine",
"repo":"engine"
},
{
"name":"Windows Web Engine",
"repo":"engine"
},
{
"name":"Mac Web Engine",
"repo":"engine"
}
]
}
// Copyright 2020 The Flutter Authors. 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:convert';
import 'dart:io';
import 'dart:io' show File;
import 'dart:io' as io_internals show exit;
final bool hasColor = stdout.supportsAnsiEscapes;
final String bold = hasColor ? '\x1B[1m' : ''; // used for shard titles
final String red = hasColor ? '\x1B[31m' : ''; // used for errors
final String reset = hasColor ? '\x1B[0m' : '';
final String reverse = hasColor ? '\x1B[7m' : ''; // used for clocks
/// Validates if the input builders JSON file has valid contents.
///
/// Examples:
/// dart validate_json.dart /path/to/json/file
Future<void> main(List<String> args) async {
final String jsonString = await File(args[0]).readAsString();
Map<String, dynamic> decodedJson;
final List<String> messages = <String>[];
try {
decodedJson = json.decode(jsonString) as Map<String, dynamic>;
final List<dynamic> builders = decodedJson['builders'] as List<dynamic>;
if (builders == null) {
messages.add('${bold}Json format is violated: no "builders" exists. Please follow: $reset');
messages.add('''
{
"builders":[
{
"name":"xxx",
"repo":"engine"
}, {
"name":"xxx",
"repo":"engine"
}
]
}''');
exitWithError(messages);
}
} on ExitException catch (error) {
error.apply();
}
print('$clock ${bold}Analysis successful for ${args[0]}.$reset');
}
class ExitException implements Exception {
ExitException(this.exitCode);
final int exitCode;
void apply() {
io_internals.exit(exitCode);
}
}
void exitWithError(List<String> messages) {
final String redLine = '$red━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$reset';
print(redLine);
messages.forEach(print);
print(redLine);
exit(1);
}
String get clock {
final DateTime now = DateTime.now();
return '$reverse▌'
'${now.hour.toString().padLeft(2, "0")}:'
'${now.minute.toString().padLeft(2, "0")}:'
'${now.second.toString().padLeft(2, "0")}'
'▐$reset';
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册