eventName = $this->getName(); $this ->setName('build:config_doc') ->setDescription('Step 2 (Optional): configure the documentation site for the current environment.') ->setDefinition( new InputDefinition([ new InputArgument(static::ARG_FILE, InputArgument::OPTIONAL), ]) ) ->setHelp( <<validateTemplateName($input, $output); if ($err) { return 1; }; $settingsPath = $this->getSettingsPath(); $templatePath = "${settingsPath}/${templateName}"; $realTemplatePath = realpath($templatePath); if (empty($realTemplatePath)) { $output->writeln(sprintf("Could not load template %s: no such file", $templateName)); return 2; } $paramsPath = "${settingsPath}/merged.params.local.yml"; $realParamsPath = realpath($paramsPath); if (empty($realParamsPath)) { $output->writeln(sprintf("Could not load parameters %s: no such file", $paramsPath)); return 3; } $yaml = new Yaml(); try { $params = $yaml->parseFile($realParamsPath); } catch (ParseException $e) { $output->writeln(sprintf("Could not parse %s: %s", $realParamsPath, $e->getMessage())); return 4; } $loader = new FilesystemLoader($settingsPath, $settingsPath); $twig = new Environment($loader, [ 'auto_reload' => true, 'cache' => false, 'debug' => true, 'strict_variables' => true, ]); $twig->addExtension(new DebugExtension()); $wrapper = $twig->load($templateName); $context = [ 'base_url' => $params['instance']['doc']['base_url'], ]; $error = $this->render($wrapper, $context, $output); if ($error) { $output->writeln(sprintf("Failed rendering doc configuration")); return 5; } $cwd = getcwd(); chdir('doc'); $err = system("hugo -D", $exit); if ($exit != 0) { $output->writeln(sprintf("Failed running hugo to rebuild documentation site: %s\n", $err)); return 6; } chdir($cwd); } protected function render(TemplateWrapper $wrapper, array $context, OutputInterface $output): int { $configPath = "doc/config.toml"; if (file_exists($configPath)) { $ok = unlink($configPath); if (!$ok) { $output->writeln(sprintf( "Could not remove old %s file", $configPath )); return 1; } } $rendered = $wrapper->render($context); $ok = file_put_contents($configPath, $rendered, LOCK_EX); if (!$ok) { $output->writeln(sprintf('Could not write new %s file', $configPath)); return 2; } return 0; } }