setDescription('Publish public assets.'); $this->setHelp( 'Publishes public assets. ' . 'Needs to be run after composer install.' ); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output): int { $failsafeContainer = $this->bootService->getFailsafeContainer(); $failsafeResourcePublisher = $failsafeContainer->has(AssetPublishing::class) ? $failsafeContainer->get(SystemResourcePublisherInterface::class) : null; try { $container = $this->bootService->loadExtLocalconfDatabase(false, false); } catch (\Throwable $e) { if ($output->isVerbose()) { throw $e; } $output->writeln('Can not initialize dependency injection container. Increase verbosity to get the full error message.'); return self::FAILURE; } $resourcePublisher = $container->get(SystemResourcePublisherInterface::class); $output->getFormatter()->setStyle('bold', new OutputFormatterStyle(null, null, ['bold'])); $output->writeln('Publishing assets from extensions…'); $exitCode = self::SUCCESS; foreach ($this->packageManager->getAvailablePackages() as $package) { $messages = $resourcePublisher->publishResources($package); if ($package->isPartOfMinimalUsableSystem()) { // Publish resources for install tool, if it is installed $failsafeResourcePublisher?->publishResources($package); } $exitCode = $this->determineExitCode($exitCode, $messages); $this->messageRenderer->renderAll($messages, $output); } $output->writeln('done.'); return $exitCode; } private function determineExitCode(int $currentCode, FlashMessageQueue $queue): int { if ($currentCode === self::FAILURE) { return self::FAILURE; } foreach ($queue->getAllMessages() as $message) { if ($message->getSeverity() === ContextualFeedbackSeverity::ERROR) { return self::FAILURE; } } return $currentCode; } }