runDeployCommand function

Future<int> runDeployCommand(
  1. List<String> args, {
  2. IOSink? outSink,
  3. IOSink? errSink,
  4. Map<String, String>? environment,
  5. DeployCommandRunner? commandRunner,
})

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);
}