blob: e524e07ad0ed5b7a66e45aec5382c29304c2793b [file] [log] [blame]
// Copyright 2013 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:ffi' as ffi show Abi;
import 'dart:io' as io show Directory, Platform, exitCode, stderr;
import 'package:engine_build_configs/engine_build_configs.dart';
import 'package:engine_repo_tools/engine_repo_tools.dart';
import 'package:path/path.dart' as p;
import 'package:platform/platform.dart';
import 'package:process_runner/process_runner.dart';
import 'src/commands/command_runner.dart';
import 'src/environment.dart';
import 'src/logger.dart';
import 'src/phone_home.dart';
void main(List<String> args) async {
if (phoneHome(args)) {
return;
}
final bool verbose = args.contains('--verbose') || args.contains('-v');
final bool help = args.contains('help') || args.contains('--help') ||
args.contains('-h');
// Find the engine repo.
final Engine engine;
try {
engine = Engine.findWithin(p.dirname(io.Platform.script.toFilePath()));
} catch (e) {
io.stderr.writeln(e);
io.exitCode = 1;
return;
}
// Find and parse the engine build configs.
final io.Directory buildConfigsDir = io.Directory(p.join(
engine.flutterDir.path,
'ci',
'builders',
));
final BuildConfigLoader loader = BuildConfigLoader(
buildConfigsDir: buildConfigsDir,
);
// Treat it as an error if no build configs were found. The caller likely
// expected to find some.
final Map<String, BuilderConfig> configs = loader.configs;
if (configs.isEmpty) {
io.stderr.writeln(
'Error: No build configs found under ${buildConfigsDir.path}',
);
io.exitCode = 1;
return;
}
if (loader.errors.isNotEmpty) {
loader.errors.forEach(io.stderr.writeln);
io.exitCode = 1;
}
final Logger logger;
if (verbose) {
logger = Logger(level: Logger.infoLevel);
} else {
logger = Logger();
}
final Environment environment = Environment(
abi: ffi.Abi.current(),
engine: engine,
platform: const LocalPlatform(),
processRunner: ProcessRunner(),
logger: logger,
verbose: verbose,
);
// Use the Engine and BuildConfig collection to build the CommandRunner.
final ToolCommandRunner runner = ToolCommandRunner(
environment: environment,
configs: configs,
help: help,
);
try {
io.exitCode = await runner.run(args);
} on FatalError catch (e, st) {
environment.logger.error('FatalError caught in main. Please file a bug\n'
'error: $e\n'
'stack: $st');
io.exitCode = 1;
}
return;
}