Add Start and Stop commands

This commit is contained in:
Daniel Winning 2025-04-24 00:41:13 +01:00
parent ba26a6bc17
commit 977822936b
3 changed files with 105 additions and 1 deletions

View file

@ -3,14 +3,18 @@
use Loom\Spinner\Command\DestroyCommand; use Loom\Spinner\Command\DestroyCommand;
use Loom\Spinner\Command\SpinCommand; use Loom\Spinner\Command\SpinCommand;
use Loom\Spinner\Command\StartCommand;
use Loom\Spinner\Command\StopCommand;
use Symfony\Component\Console\Application; use Symfony\Component\Console\Application;
require dirname(__DIR__) . '/vendor/autoload.php'; require dirname(__DIR__) . '/vendor/autoload.php';
$application = new Application('Loom Spinner'); $application = new Application('Loom Spinner');
$application->add(new SpinCommand());
$application->add(new DestroyCommand()); $application->add(new DestroyCommand());
$application->add(new SpinCommand());
$application->add(new StartCommand());
$application->add(new StopCommand());
try { try {
$application->run(); $application->run();

View file

@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
namespace Loom\Spinner\Command;
use Loom\Spinner\Classes\Config\Config;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
#[AsCommand(name: 'spin:start', description: 'Start a development environment')]
class StartCommand extends AbstractSpinnerCommand
{
protected function configure(): void
{
$this->addArgument(
'name',
InputArgument::REQUIRED,
'The name of the project (as used when running spin:up).'
);
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
if (parent::execute($input, $output)) {
return Command::FAILURE;
}
$this->config = new Config($input->getArgument('name'));
if (!file_exists($this->config->getDataDirectory())) {
$this->style->error('No project found with the provided name.');
return Command::FAILURE;
}
try {
passthru($this->buildDockerComposeCommand('start', false, false));
} catch (\Exception $exception) {
$this->style->error('An error occurred while starting the project: ' . $exception->getMessage());
return Command::FAILURE;
}
return Command::SUCCESS;
}
}

View file

@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
namespace Loom\Spinner\Command;
use Loom\Spinner\Classes\Config\Config;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
#[AsCommand(name: 'spin:stop', description: 'Stop a currently running development environment')]
class StopCommand extends AbstractSpinnerCommand
{
protected function configure(): void
{
$this->addArgument(
'name',
InputArgument::REQUIRED,
'The name of the project (as used when running spin:up).'
);
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
if (parent::execute($input, $output)) {
return Command::FAILURE;
}
$this->config = new Config($input->getArgument('name'));
if (!file_exists($this->config->getDataDirectory())) {
$this->style->error('No project found with the provided name.');
return Command::FAILURE;
}
try {
passthru($this->buildDockerComposeCommand('stop', false, false));
} catch (\Exception $exception) {
$this->style->error('An error occurred while starting the project: ' . $exception->getMessage());
return Command::FAILURE;
}
return Command::SUCCESS;
}
}