From dd642b05fa8d483db050d82e0c02aa9cea256ef5 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Tue, 4 Aug 2020 15:44:34 -0700 Subject: [PATCH] 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 --- ci/dev/README.md | 28 ++++++++++++ ci/dev/dev_test.sh | 19 ++++++++ ci/dev/engine_prod_builders.json | 52 ++++++++++++++++++++++ ci/dev/engine_try_builders.json | 60 +++++++++++++++++++++++++ ci/dev/validate_json.dart | 76 ++++++++++++++++++++++++++++++++ 5 files changed, 235 insertions(+) create mode 100644 ci/dev/README.md create mode 100644 ci/dev/dev_test.sh create mode 100644 ci/dev/engine_prod_builders.json create mode 100644 ci/dev/engine_try_builders.json create mode 100644 ci/dev/validate_json.dart diff --git a/ci/dev/README.md b/ci/dev/README.md new file mode 100644 index 000000000..8c0f473f3 --- /dev/null +++ b/ci/dev/README.md @@ -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 +``` diff --git a/ci/dev/dev_test.sh b/ci/dev/dev_test.sh new file mode 100644 index 000000000..43d4880bc --- /dev/null +++ b/ci/dev/dev_test.sh @@ -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 + + diff --git a/ci/dev/engine_prod_builders.json b/ci/dev/engine_prod_builders.json new file mode 100644 index 000000000..58fc27caa --- /dev/null +++ b/ci/dev/engine_prod_builders.json @@ -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" + } + ] +} diff --git a/ci/dev/engine_try_builders.json b/ci/dev/engine_try_builders.json new file mode 100644 index 000000000..f93d214ed --- /dev/null +++ b/ci/dev/engine_try_builders.json @@ -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" + } + ] +} diff --git a/ci/dev/validate_json.dart b/ci/dev/validate_json.dart new file mode 100644 index 000000000..957813cf4 --- /dev/null +++ b/ci/dev/validate_json.dart @@ -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 main(List args) async { + final String jsonString = await File(args[0]).readAsString(); + Map decodedJson; + final List messages = []; + try { + decodedJson = json.decode(jsonString) as Map; + final List builders = decodedJson['builders'] as List; + 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 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'; +} + + -- GitLab