diff --git a/src/Console/Command/AbstractCommand.php b/src/Console/Command/AbstractCommand.php index 9784672..44d56da 100644 --- a/src/Console/Command/AbstractCommand.php +++ b/src/Console/Command/AbstractCommand.php @@ -4,15 +4,9 @@ namespace App\Console\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; abstract class AbstractCommand extends Command { - protected ?string $extraArgs; - - protected string $workingDir; - protected function configure(): void { $this->addOption( @@ -38,12 +32,4 @@ abstract class AbstractCommand extends Command default: '.', ); } - - public function execute(InputInterface $input, OutputInterface $output): int - { - $this->extraArgs = $input->getOption('extra-args'); - $this->workingDir = $input->getOption('working-dir'); - - return Command::SUCCESS; - } } diff --git a/src/Console/Command/BuildCommand.php b/src/Console/Command/BuildCommand.php index 2d5c4b8..3b29b8c 100644 --- a/src/Console/Command/BuildCommand.php +++ b/src/Console/Command/BuildCommand.php @@ -16,14 +16,17 @@ final class BuildCommand extends AbstractCommand { $projectType = null; + $extraArgs = $input->getOption('extra-args'); + $workingDir = $input->getOption('working-dir'); + $filesystem = new Filesystem(); // Attempt to prepopulate some of the options, such as the project type // based on its dependencies. // TODO: move this logic to a service so it can be tested. - if ($filesystem->exists($this->workingDir.'/composer.json')) { + if ($filesystem->exists($workingDir.'/composer.json')) { $json = json_decode( - json: strval(file_get_contents($this->workingDir.'/composer.json')), + json: strval(file_get_contents($workingDir.'/composer.json')), associative: true, ); @@ -42,15 +45,15 @@ final class BuildCommand extends AbstractCommand // the option value if there is one. $projectType = $input->getOption('type') ?? $projectType; - $isDockerCompose = $filesystem->exists($this->workingDir . '/docker-compose.yaml'); + $isDockerCompose = $filesystem->exists($workingDir . '/docker-compose.yaml'); switch ($projectType) { case ProjectType::Drupal->value: if ($isDockerCompose) { $process = Process::create( command: ['docker', 'compose', 'build'], - extraArgs: $this->extraArgs, - workingDir: $this->workingDir, + extraArgs: $extraArgs, + workingDir: $workingDir, ); $process->run(); @@ -64,8 +67,8 @@ final class BuildCommand extends AbstractCommand case ProjectType::Sculpin->value: $process = Process::create( command: ['./vendor/bin/sculpin', 'generate'], - extraArgs: $this->extraArgs, - workingDir: $this->workingDir, + extraArgs: $extraArgs, + workingDir: $workingDir, ); $process->run(); diff --git a/src/Console/Command/InstallCommand.php b/src/Console/Command/InstallCommand.php index 8dc0a83..52ca37b 100644 --- a/src/Console/Command/InstallCommand.php +++ b/src/Console/Command/InstallCommand.php @@ -11,13 +11,14 @@ final class InstallCommand extends AbstractCommand { public function execute(InputInterface $input, OutputInterface $output): int { - parent::execute($input, $output); + $extraArgs = $input->getOption('extra-args'); + $workingDir = $input->getOption('working-dir'); // TODO: Composer in Docker Compose? $process = Process::create( command: ['composer', 'install'], - extraArgs: $this->extraArgs, - workingDir: $this->workingDir, + extraArgs: $extraArgs, + workingDir: $workingDir, ); $process->setTimeout(null); diff --git a/src/Console/Command/RunCommand.php b/src/Console/Command/RunCommand.php index 8faee1c..637e6bd 100644 --- a/src/Console/Command/RunCommand.php +++ b/src/Console/Command/RunCommand.php @@ -13,15 +13,16 @@ final class RunCommand extends AbstractCommand { public function execute(InputInterface $input, OutputInterface $output): int { - parent::execute($input, $output); - $projectType = null; + $extraArgs = $input->getOption('extra-args'); + $workingDir = $input->getOption('working-dir'); + // Attempt to prepopulate some of the options, such as the project type // based on its dependencies. // TODO: move this logic to a service so it can be tested. $json = json_decode( - json: strval(file_get_contents($this->workingDir.'/composer.json')), + json: strval(file_get_contents($workingDir.'/composer.json')), associative: true, ); @@ -40,13 +41,13 @@ final class RunCommand extends AbstractCommand $projectType = $input->getOption('type') ?? $projectType; $filesystem = new Filesystem(); - $isDockerCompose = $filesystem->exists($this->workingDir . '/docker-compose.yaml'); + $isDockerCompose = $filesystem->exists($workingDir . '/docker-compose.yaml'); if ($isDockerCompose) { $process = Process::create( command: ['docker', 'compose', 'up'], - extraArgs: $this->extraArgs, - workingDir: $this->workingDir, + extraArgs: $extraArgs, + workingDir: $workingDir, ); $process->setTimeout(null); @@ -56,8 +57,8 @@ final class RunCommand extends AbstractCommand case ProjectType::Sculpin->value: $process = Process::create( command: ['./vendor/bin/sculpin', 'generate', '--server', '--watch'], - extraArgs: $this->extraArgs, - workingDir: $this->workingDir, + extraArgs: $extraArgs, + workingDir: $workingDir, ); $process->setTimeout(null); diff --git a/src/Console/Command/TestCommand.php b/src/Console/Command/TestCommand.php index 61a3267..a3f9045 100644 --- a/src/Console/Command/TestCommand.php +++ b/src/Console/Command/TestCommand.php @@ -11,11 +11,12 @@ final class TestCommand extends AbstractCommand { public function execute(InputInterface $input, OutputInterface $output): int { - parent::execute($input, $output); + $extraArgs = $input->getOption('extra-args'); + $workingDir = $input->getOption('working-dir'); // TODO: move this logic to a service so it can be tested. $json = json_decode( - json: strval(file_get_contents($this->workingDir.'/composer.json')), + json: strval(file_get_contents($workingDir.'/composer.json')), associative: true, ); @@ -32,8 +33,8 @@ final class TestCommand extends AbstractCommand // TODO: commands in Docker Compose? $process = Process::create( command: $command, - extraArgs: $this->extraArgs, - workingDir: $this->workingDir, + extraArgs: $extraArgs, + workingDir: $workingDir, ); $process->run();