#!/usr/bin/env php error("Please run this script via CLI!"); exit(1); } if (count($argv) === 1 || in_array($argv[1], ["h", "-h", "help", "--help"], true)) { print $help; exit(0); } if (!in_array($argv[1], $commands)) { $climate->error("Unknown command '{$argv[1]}'. Use --help for a list of available commands."); $suggestion = \Kelunik\AcmeClient\suggestCommand($argv[1], $commands); if ($suggestion) { $climate->br()->info(" Did you mean '$suggestion'?")->br(); } exit(1); } /** @var \Kelunik\AcmeClient\Commands\Command $class */ $class = "Kelunik\\AcmeClient\\Commands\\" . ucfirst($argv[1]); $definition = $class::getDefinition(); try { $args = $argv; unset($args[1]); $climate->arguments->add($definition); $climate->arguments->parse(array_values($args)); } catch (Exception $e) { if (count($argv) === 3 && in_array($argv[2], ["h", "-h", "--help", "help"], true)) { $climate->usage(["bin/acme {$argv[1]}"]); $climate->br(); exit(0); } else { $climate->error($e->getMessage()); exit(1); } } $handler = new StreamHandler("php://stdout", Logger::DEBUG); $handler->setFormatter(new ColoredLineFormatter(new LoggerColorScheme, null, null, true, true)); $logger = new Logger("ACME"); $logger->pushHandler($handler); $injector->alias(LoggerInterface::class, Logger::class); $injector->share($logger); $command = $injector->make($class); Amp\run(function () use ($command, $climate, $logger) { $handler = function($e) use ($logger) { $error = (string) $e; $lines = explode("\n", $error); $lines = array_filter($lines, function ($line) { return strlen($line) && $line[0] !== "#" && $line !== "Stack trace:"; }); foreach ($lines as $line) { $logger->error($line); } exit(1); }; try { yield $command->execute($climate->arguments); } catch (Throwable $e) { $handler($e); } catch (Exception $e) { $handler($e); } Amp\stop(); });