blob: 94bedd1e14f5f86112ed4de87183eefe57260697 [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;
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 'logger.dart';
/// This class encapsulates information about the host system.
///
/// Rather than being written directly against `dart:io`, implementations in the
/// tool should only access the system by way of the abstractions in this class.
/// This is so that unit tests can be hermetic by providing fake
/// implementations.
final class Environment {
/// Constructs the environment.
Environment({
required this.abi,
required this.engine,
required this.logger,
required this.platform,
required this.processRunner,
this.verbose = false,
});
/// Whether the tool should be considered running in "verbose" mode.
final bool verbose;
/// The host OS and architecture that the tool is running on.
final ffi.Abi abi;
/// Information about paths in the engine repo.
final Engine engine;
/// Where log messages are written.
final Logger logger;
/// More detailed information about the host platform.
final Platform platform;
/// Facility for commands to run subprocesses.
final ProcessRunner processRunner;
/// Whether it appears that the current environment supports remote builds.
///
/// This is a heuristic based on the presence of certain directories in the
/// engine repo; it is not a guarantee that remote builds will work (due to
/// authentication, network, or other issues).
///
/// **Note**: This calls does synchronous I/O.
bool hasRbeConfigInTree() {
final String rbeConfigPath = p.join(
engine.srcDir.path,
'flutter',
'build',
'rbe',
);
return io.Directory(rbeConfigPath).existsSync();
}
}