. * * @package LibreNMS * @link http://librenms.org * @copyright 2020 Tony Murray * @author Tony Murray */ namespace App\Console\Commands; use App\Console\LnmsCommand; use Illuminate\Support\Arr; use LibreNMS\Util\CiHelper; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; class DevCheckCommand extends LnmsCommand { protected $developer = true; protected $name = 'dev:check'; /** @var CiHelper */ protected $helper; public function __construct() { parent::__construct(); $this->addArgument('check', InputArgument::OPTIONAL, __('commands.dev:check.arguments.check', ['checks' => '[unit, lint, style, dusk]']), 'all'); $this->addOption('os', 'o', InputOption::VALUE_REQUIRED); $this->addOption('module', 'm', InputOption::VALUE_REQUIRED); $this->addOption('fail-fast', 'f', InputOption::VALUE_NONE); $this->addOption('quiet', 'q', InputOption::VALUE_NONE); $this->addOption('db', null, InputOption::VALUE_NONE); $this->addOption('snmpsim', null, InputOption::VALUE_NONE); $this->addOption('full', null, InputOption::VALUE_NONE); $this->addOption('commands', 'c', InputOption::VALUE_NONE); } /** * Execute the console command. * * @return mixed */ public function handle() { $this->helper = new CiHelper(); $this->parseInput(); $this->helper->detectChangedFiles(); $this->helper->checkEnvSkips(); $result = $this->helper->run(); if (getenv('EXECUTE_BUILD_DOCS') && $this->helper->getFlag('docs_changed')) { exec('bash scripts/deploy-docs.sh'); } if ($result == 0 && $this->helper->allChecksComplete()) { $this->line("\033[32mTests ok, submit away :)\033[0m"); } return $result; } private function parseInput() { $check = $this->argument('check'); if (!in_array($check, ['all', 'lint', 'style', 'unit', 'web', 'ci'])) { $this->error("Invalid check: $check"); exit(1); } $this->helper->setFlags(Arr::only($this->options(), ['quiet', 'commands', 'fail-fast', 'full'])); $all = $check == 'all' || $check == 'ci'; $this->helper->enable('style', $all || $check === 'style'); $this->helper->enable('lint', $all || $check === 'lint'); $this->helper->enable('unit', $all || $check === 'unit'); $this->helper->enable('web', $all || $check === 'web'); if ($os = $this->option('os')) { $this->helper->setFlags(['style_enable' => false, 'lint_enable' => false, 'unit_enable' => true, 'web_enable' => false]); $this->helper->setOS(explode(',', $os)); } if ($modules = $this->option('module')) { $this->helper->setFlags(['style_enable' => false, 'lint_enable' => false, 'unit_enable' => true, 'web_enable' => false]); $this->helper->setModules(explode(',', $modules)); } if ($check == 'ci') { $this->helper->setFlags(['ci' => true]); $this->helper->duskHeadless(); $this->helper->enableSnmpsim(); $this->helper->enableDb(); } if ($this->option('snmpsim')) { $this->helper->enableSnmpsim(); } if ($this->option('db')) { $this->helper->enableDb(); } } }