addArgument('artifact', InputArgument::REQUIRED, 'The name of the artifact(s) to check for updates, comma-separated'); $this->addOption('json', null, null, 'Output result in JSON format'); $this->addOption('bare', null, null, 'Check update without requiring the artifact to be downloaded first (old version will be null)'); // --with-php option for checking updates with a specific PHP version context $this->addOption('with-php', null, InputOption::VALUE_REQUIRED, 'PHP version in major.minor format (default 8.4)', '8.4'); } public function handle(): int { $artifacts = parse_comma_list($this->input->getArgument('artifact')); try { $downloader = new ArtifactDownloader($this->input->getOptions()); $bare = (bool) $this->getOption('bare'); if ($this->getOption('json')) { $outputs = []; foreach ($artifacts as $artifact) { $result = $downloader->checkUpdate($artifact, bare: $bare); $outputs[$artifact] = [ 'need-update' => $result->needUpdate, 'old' => $result->old, 'new' => $result->new, ]; } $this->output->writeln(json_encode($outputs, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); return static::OK; } foreach ($artifacts as $artifact) { $result = $downloader->checkUpdate($artifact, bare: $bare); if (!$result->needUpdate) { $this->output->writeln("Artifact {$artifact} is already up to date (version: {$result->new})"); } else { $this->output->writeln("Update available for artifact: {$artifact}"); $this->output->writeln(" Old version: {$result->old}"); $this->output->writeln(" New version: {$result->new}"); } } return static::OK; } catch (SPCException $e) { $e->setSimpleOutput(); throw $e; } } }