Add DockerComposeFileBuilder

This commit is contained in:
Daniel Winning 2025-04-13 13:11:35 +01:00
parent 7d8fcac15e
commit 881210312f
2 changed files with 51 additions and 11 deletions

View file

@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Loom\Spinner\Classes\File;
use Loom\Spinner\Classes\Config\Config;
use Symfony\Component\Console\Input\InputInterface;
class DockerComposeFileBuilder extends AbstractFileBuilder
{
/**
* @throws \Exception
*/
public function __construct(Config $config)
{
$projectDockerCompose = $this->config->getFilePaths()->get('projectDockerCompose');
if (!$projectDockerCompose instanceof SpinnerFilePath) {
throw new \Exception('Project Docker Compose file path not found.');
}
return parent::__construct($projectDockerCompose, $config);
}
public function build(InputInterface $input): DockerComposeFileBuilder
{
$this->content = file_get_contents(
$this->config->getFilePaths()->get('phpYamlTemplate')->getAbsolutePath()
);
return $this;
}
}

View file

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Loom\Spinner\Command; namespace Loom\Spinner\Command;
use Loom\Spinner\Classes\File\DockerComposeFileBuilder;
use Loom\Spinner\Classes\File\PHPDockerFileBuilder; use Loom\Spinner\Classes\File\PHPDockerFileBuilder;
use Loom\Spinner\Classes\File\SpinnerFilePath; use Loom\Spinner\Classes\File\SpinnerFilePath;
use Loom\Spinner\Classes\OS\PortGenerator; use Loom\Spinner\Classes\OS\PortGenerator;
@ -70,9 +71,9 @@ class SpinCommand extends AbstractSpinnerCommand
$this->style->text('Creating project data...'); $this->style->text('Creating project data...');
$this->createProjectData($input); $this->createProjectData($input);
$command = $this->buildDockerComposeCommand(sprintf('-p %s up', $input->getArgument('name'))); // $command = $this->buildDockerComposeCommand(sprintf('-p %s up', $input->getArgument('name')));
//
passthru($command); // passthru($command);
return Command::SUCCESS; return Command::SUCCESS;
} }
@ -95,7 +96,7 @@ class SpinCommand extends AbstractSpinnerCommand
{ {
$this->createProjectDataDirectory(); $this->createProjectDataDirectory();
$this->createEnvironmentFile($input); $this->createEnvironmentFile($input);
$this->buildDockerComposeFile(); $this->buildDockerComposeFile($input);
$this->buildDockerfile($input); $this->buildDockerfile($input);
} }
@ -139,22 +140,27 @@ class SpinCommand extends AbstractSpinnerCommand
/** /**
* @throws \Exception * @throws \Exception
*/ */
private function buildDockerComposeFile(): void private function buildDockerComposeFile(InputInterface $input): void
{
$this->createProjectPhpFpmDirectory();
(new DockerComposeFileBuilder($this->config))->build($input)->save();
}
/**
* @throws \Exception
*/
private function createProjectPhpFpmDirectory(): void
{ {
$projectData = $this->config->getFilePaths()->get('projectData'); $projectData = $this->config->getFilePaths()->get('projectData');
$projectDockerCompose = $this->config->getFilePaths()->get('projectDockerCompose');
if (!$projectData instanceof SpinnerFilePath || !$projectDockerCompose instanceof SpinnerFilePath) { if (!$projectData instanceof SpinnerFilePath) {
throw new \Exception('Invalid project data directory provided.'); throw new \Exception('Invalid project data directory provided.');
} }
if (!file_exists($projectData->getProvidedPath() . '/php-fpm')) { if (!file_exists($projectData->getProvidedPath() . '/php-fpm')) {
mkdir($projectData->getProvidedPath() . '/php-fpm', 0777, true); mkdir($projectData->getProvidedPath() . '/php-fpm', 0777, true);
} }
file_put_contents(
$projectDockerCompose->getProvidedPath(),
file_get_contents($this->config->getFilePaths()->get('phpYamlTemplate')->getAbsolutePath())
);
} }
/** /**