run method
Implementation
Future<int> run({
/// If true, the script will be skipped if it is not found in the config.
bool skipIfMissing = false,
}) async {
assert(options.script != null, 'Script name is required');
final scriptExists =
config.scripts?.scriptsMap.containsKey(options.script) == true;
if (!scriptExists && skipIfMissing) {
return 0;
}
final scriptName = options.script;
if (scriptName != null &&
_isHookScriptName(scriptName) &&
!_canRunHook(scriptName)) {
return 0;
}
final targetDirectory =
options.globalOptions.directory ?? config.workingDirectory;
var beforeHooks = <IntCallback>[];
var afterHooks = <IntCallback>[];
if (scriptExists) {
final hooks = _getHooks(
config: config,
options: options,
arguments: arguments,
targetDirectory: targetDirectory,
);
beforeHooks = hooks.before;
afterHooks = hooks.after;
}
for (final hook in beforeHooks) {
final hookExitCode = await hook();
if (hookExitCode != 0) {
return hookExitCode;
}
}
final exitCode = await _runScript(
config: config,
options: options,
arguments: arguments,
targetDirectory: targetDirectory,
skipIfMissing: skipIfMissing,
);
if (exitCode != 0) {
return exitCode;
}
for (final hook in afterHooks) {
final hookExitCode = await hook();
if (hookExitCode != 0) {
return hookExitCode;
}
}
return 0;
}