mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
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
This commit is contained in:
parent
ab23dc3a74
commit
dd642b05fa
28
ci/dev/README.md
Normal file
28
ci/dev/README.md
Normal file
@ -0,0 +1,28 @@
|
||||
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
|
||||
```
|
||||
19
ci/dev/dev_test.sh
Normal file
19
ci/dev/dev_test.sh
Normal file
@ -0,0 +1,19 @@
|
||||
#!/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
|
||||
|
||||
|
||||
52
ci/dev/engine_prod_builders.json
Normal file
52
ci/dev/engine_prod_builders.json
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
60
ci/dev/engine_try_builders.json
Normal file
60
ci/dev/engine_try_builders.json
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
76
ci/dev/validate_json.dart
Normal file
76
ci/dev/validate_json.dart
Normal file
@ -0,0 +1,76 @@
|
||||
// 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';
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user