Add Destroy command
This commit is contained in:
parent
9db6a5f623
commit
02625fb0d2
3 changed files with 37 additions and 5 deletions
|
@ -41,12 +41,12 @@ class AbstractSpinnerCommand extends Command implements ConsoleCommandInterface
|
||||||
return Command::SUCCESS;
|
return Command::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildDockerComposeCommand(string $command, bool $daemon = true): string
|
protected function buildDockerComposeCommand(string $command, bool $withEnv = false, bool $daemon = true): string
|
||||||
{
|
{
|
||||||
return sprintf(
|
return sprintf(
|
||||||
'cd %s && docker compose --env-file=%s %s%s',
|
'cd %s && docker compose%s %s%s',
|
||||||
$this->config->getDataDirectory(),
|
$this->config->getDataDirectory(),
|
||||||
$this->config->getDataDirectory() . '/.env',
|
$withEnv ? ' --env-file=' . $this->config->getDataDirectory() . '/.env' : '',
|
||||||
$command,
|
$command,
|
||||||
$daemon ? ' -d' : ''
|
$daemon ? ' -d' : ''
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Loom\Spinner\Command;
|
namespace Loom\Spinner\Command;
|
||||||
|
|
||||||
|
use Loom\Spinner\Classes\Config\Config;
|
||||||
use Symfony\Component\Console\Attribute\AsCommand;
|
use Symfony\Component\Console\Attribute\AsCommand;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
@ -28,6 +29,37 @@ class DestroyCommand extends AbstractSpinnerCommand
|
||||||
return Command::FAILURE;
|
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('down', false, false));
|
||||||
|
recursive_rmdir($this->config->getDataDirectory());
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
$this->style->error('An error occurred while destroying the project: ' . $exception->getMessage());
|
||||||
|
|
||||||
|
return Command::FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
return Command::SUCCESS;
|
return Command::SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function recursive_rmdir(string $dir): void
|
||||||
|
{
|
||||||
|
if (!is_dir($dir)) return;
|
||||||
|
|
||||||
|
$items = new \RecursiveIteratorIterator(
|
||||||
|
new \RecursiveDirectoryIterator($dir, \FilesystemIterator::SKIP_DOTS),
|
||||||
|
\RecursiveIteratorIterator::CHILD_FIRST
|
||||||
|
);
|
||||||
|
foreach ($items as $item) {
|
||||||
|
$item->isDir() ? rmdir($item->getPathname()) : unlink($item->getPathname());
|
||||||
|
}
|
||||||
|
rmdir($dir);
|
||||||
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ class SpinCommand extends AbstractSpinnerCommand
|
||||||
|
|
||||||
$this->config = new Config($input->getArgument('name'), $this->projectWorkPath);
|
$this->config = new Config($input->getArgument('name'), $this->projectWorkPath);
|
||||||
|
|
||||||
if ($this->config->projectDataExists($input->getArgument('name'))) {
|
if (file_exists($this->config->getDataDirectory())) {
|
||||||
$this->style->error('A project with the same name already exists.');
|
$this->style->error('A project with the same name already exists.');
|
||||||
|
|
||||||
return Command::FAILURE;
|
return Command::FAILURE;
|
||||||
|
|
Loading…
Add table
Reference in a new issue