From dfef735c896758ebdee27060139a7c620c7dfa0c Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sat, 1 Nov 2025 11:38:10 +0100 Subject: [PATCH] Make ReadEnvVarCommand invokable --- .../src/Command/Config/ReadEnvVarCommand.php | 31 +++++++++---------- .../Command/Config/ReadEnvVarCommandTest.php | 4 +-- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/module/CLI/src/Command/Config/ReadEnvVarCommand.php b/module/CLI/src/Command/Config/ReadEnvVarCommand.php index e1cef3fd..e3a38be6 100644 --- a/module/CLI/src/Command/Config/ReadEnvVarCommand.php +++ b/module/CLI/src/Command/Config/ReadEnvVarCommand.php @@ -6,9 +6,10 @@ namespace Shlinkio\Shlink\CLI\Command\Config; use Closure; use Shlinkio\Shlink\Core\Config\EnvVars; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Exception\InvalidArgumentException; -use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; @@ -18,6 +19,11 @@ use function Shlinkio\Shlink\Core\ArrayUtils\contains; use function Shlinkio\Shlink\Core\enumValues; use function sprintf; +#[AsCommand( + name: ReadEnvVarCommand::NAME, + description: 'Display current value for an env var', + hidden: true, +)] class ReadEnvVarCommand extends Command { public const string NAME = 'env-var:read'; @@ -31,19 +37,10 @@ class ReadEnvVarCommand extends Command parent::__construct(); } - protected function configure(): void - { - $this - ->setName(self::NAME) - ->setHidden() - ->setDescription('Display current value for an env var') - ->addArgument('envVar', InputArgument::REQUIRED, 'The env var to read'); - } - protected function interact(InputInterface $input, OutputInterface $output): void { $io = new SymfonyStyle($input, $output); - $envVar = $input->getArgument('envVar'); + $envVar = $input->getArgument('env-var'); $validEnvVars = enumValues(EnvVars::class); if ($envVar === null) { @@ -54,14 +51,14 @@ class ReadEnvVarCommand extends Command throw new InvalidArgumentException(sprintf('%s is not a valid Shlink environment variable', $envVar)); } - $input->setArgument('envVar', $envVar); + $input->setArgument('env-var', $envVar); } - protected function execute(InputInterface $input, OutputInterface $output): int - { - $envVar = $input->getArgument('envVar'); - $output->writeln(formatEnvVarValue(($this->loadEnvVar)($envVar))); - + public function __invoke( + SymfonyStyle $io, + #[Argument(description: 'The env var to read')] string $envVar, + ): int { + $io->writeln(formatEnvVarValue(($this->loadEnvVar)($envVar))); return Command::SUCCESS; } } diff --git a/module/CLI/test/Command/Config/ReadEnvVarCommandTest.php b/module/CLI/test/Command/Config/ReadEnvVarCommandTest.php index c377cf86..e90f94af 100644 --- a/module/CLI/test/Command/Config/ReadEnvVarCommandTest.php +++ b/module/CLI/test/Command/Config/ReadEnvVarCommandTest.php @@ -28,13 +28,13 @@ class ReadEnvVarCommandTest extends TestCase $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('foo is not a valid Shlink environment variable'); - $this->commandTester->execute(['envVar' => 'foo']); + $this->commandTester->execute(['env-var' => 'foo']); } #[Test] public function valueIsPrintedIfProvidedEnvVarIsValid(): void { - $this->commandTester->execute(['envVar' => EnvVars::BASE_PATH->value]); + $this->commandTester->execute(['env-var' => EnvVars::BASE_PATH->value]); $output = $this->commandTester->getDisplay(); self::assertStringNotContainsString('Select the env var to read', $output);