runDeployCommand function
Runs the deploy CLI command and returns a process-compatible exit code.
Returns 0 for help and successful dry-runs, 64 for invalid arguments,
and 1 for runtime failures while resolving options.
Implementation
Future<int> runDeployCommand(
List<String> args, {
IOSink? outSink,
IOSink? errSink,
Map<String, String>? environment,
DeployCommandRunner? commandRunner,
}) async {
final IOSink out = outSink ?? stdout;
final IOSink err = errSink ?? stderr;
final Map<String, String> env = environment ?? Platform.environment;
if (args.any((String arg) => arg == '--help' || arg == '-h')) {
out.writeln(deployUsage);
return 0;
}
final DeployCliOptions options;
try {
options = _parseDeployOptions(args, env: env);
} on StateError catch (error) {
err.writeln(error.message);
return 1;
} on ArgumentError catch (error) {
err.writeln('${error.message}');
err.writeln(deployUsage);
return 64;
}
final DeployCommand command = DeployCommand(
service: options.service,
project: options.project,
region: options.region,
image: options.image,
extraArgs: options.extraArgs,
);
final List<String> gcloudCommand = switch (options.target) {
DeployTarget.cloudRun => toCloudRun(command),
DeployTarget.agentEngine => toAgentEngine(command),
DeployTarget.gke => toGke(command),
};
if (options.dryRun) {
out.writeln(gcloudCommand.join(' '));
return 0;
}
final DeployCommandRunner runner = commandRunner ?? _defaultDeployRunner;
return runner(gcloudCommand, out: out, err: err, environment: env);
}