///|
fn command() -> @argparse.Command {
  let options = [
    @argparse.OptionArg("config", about="JSON package specification"),
    @argparse.OptionArg(
      "executable",
      about="Already-built application executable",
    ),
  ]
  options.append(@package_args.options())
  @argparse.Command(
    "proton_package",
    about="Package an already-built desktop executable",
    flags=@package_args.flags(),
    options~,
    arg_required_else_help=true,
  )
}

///|
async fn run(args : ArrayView[String]) -> Unit {
  let matches = command().parse(argv=args, env={})
  for artifact in @package.build(package_spec(matches)) {
    println(artifact)
  }
}

///|
async fn main {
  run(@env.args()[1:]) catch {
    error => {
      let message = error.to_string()
      println(
        if message.has_prefix("error: ") {
          message
        } else {
          "error: " + message
        },
      )
      @sys.exit(1)
    }
  }
}