mirror of
https://github.com/opdavies/build-configs.git
synced 2025-03-13 05:26:56 +00:00
refactor: use the Config DTO to output the project
...name
This commit is contained in:
parent
3e1ced3aff
commit
33103417de
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Action;
|
namespace App\Action;
|
||||||
|
|
||||||
|
use App\DataTransferObject\Config;
|
||||||
use App\DataTransferObject\TemplateFile;
|
use App\DataTransferObject\TemplateFile;
|
||||||
use App\Enum\Language;
|
use App\Enum\Language;
|
||||||
use App\Enum\WebServer;
|
use App\Enum\WebServer;
|
||||||
|
@ -11,7 +12,14 @@ use Illuminate\Support\Arr;
|
||||||
|
|
||||||
final class CreateListOfFilesToGenerate
|
final class CreateListOfFilesToGenerate
|
||||||
{
|
{
|
||||||
public function handle(array $configurationData, \Closure $next) {
|
public function handle(array $configurationDataAndDto, \Closure $next) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Config $configurationDataDto,
|
||||||
|
* @var array<string,mixed> $configurationData
|
||||||
|
*/
|
||||||
|
[$configurationData, $configurationDataDto] = $configurationDataAndDto;
|
||||||
|
|
||||||
/** @var Collection<int, TemplateFile> */
|
/** @var Collection<int, TemplateFile> */
|
||||||
$filesToGenerate = collect([
|
$filesToGenerate = collect([
|
||||||
new TemplateFile(data: 'common/.dockerignore', name: '.dockerignore'),
|
new TemplateFile(data: 'common/.dockerignore', name: '.dockerignore'),
|
||||||
|
@ -93,7 +101,7 @@ final class CreateListOfFilesToGenerate
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $next([$configurationData, $filesToGenerate]);
|
return $next([$configurationData, $configurationDataDto, $filesToGenerate]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function isCaddy(?string $webServer): bool
|
private static function isCaddy(?string $webServer): bool
|
||||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Action;
|
namespace App\Action;
|
||||||
|
|
||||||
|
use App\DataTransferObject\Config;
|
||||||
use App\DataTransferObject\TemplateFile;
|
use App\DataTransferObject\TemplateFile;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Symfony\Component\Filesystem\Filesystem;
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
|
@ -22,9 +23,10 @@ final class GenerateConfigurationFiles
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var Collection<int,TemplateFile> $filesToGenerate
|
* @var Collection<int,TemplateFile> $filesToGenerate
|
||||||
|
* @var Config $configurationDataDto,
|
||||||
* @var array<string,mixed> $configurationData
|
* @var array<string,mixed> $configurationData
|
||||||
*/
|
*/
|
||||||
[$configurationData, $filesToGenerate] = $filesToGenerateAndConfigurationData;
|
[$configurationData, $configurationDataDto, $filesToGenerate] = $filesToGenerateAndConfigurationData;
|
||||||
|
|
||||||
$filesToGenerate->each(function(TemplateFile $templateFile) use ($configurationData): void {
|
$filesToGenerate->each(function(TemplateFile $templateFile) use ($configurationData): void {
|
||||||
if ($templateFile->path !== null) {
|
if ($templateFile->path !== null) {
|
||||||
|
@ -53,6 +55,6 @@ final class GenerateConfigurationFiles
|
||||||
$this->filesystem->chmod("{$outputDir}/.githooks/pre-push", 0755);
|
$this->filesystem->chmod("{$outputDir}/.githooks/pre-push", 0755);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $next([$configurationData, $filesToGenerate]);
|
return $next([$configurationDataDto, $filesToGenerate]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,15 +17,16 @@ final class ValidateConfigurationData
|
||||||
// Convert the input to a configuration data object.
|
// Convert the input to a configuration data object.
|
||||||
$normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
|
$normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
|
||||||
$serializer = new Serializer([$normalizer], [new JsonEncoder()]);
|
$serializer = new Serializer([$normalizer], [new JsonEncoder()]);
|
||||||
$configurationDataObject = $serializer->deserialize(json_encode($configurationData), Config::class, 'json');
|
|
||||||
|
$configurationDataDto = $serializer->deserialize(json_encode($configurationData), Config::class, 'json');
|
||||||
|
|
||||||
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
|
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
|
||||||
$violations = $validator->validate($configurationDataObject);
|
$violations = $validator->validate($configurationDataDto);
|
||||||
|
|
||||||
if (0 < $violations->count()) {
|
if (0 < $violations->count()) {
|
||||||
throw new \RuntimeException('Configuration is invalid.');
|
throw new \RuntimeException('Configuration is invalid.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $next($configurationData);
|
return $next([$configurationData, $configurationDataDto]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,14 +76,14 @@ class GenerateCommand extends Command
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Collection<int,TemplateFile> $generatedFiles
|
* @var Collection<int,TemplateFile> $generatedFiles
|
||||||
* @var array<string,mixed> $configurationData
|
* @var Config $configurationData
|
||||||
*/
|
*/
|
||||||
[$configurationData, $generatedFiles] = (new Pipeline())
|
[$configurationData, $generatedFiles] = (new Pipeline())
|
||||||
->send($configFile)
|
->send($configFile)
|
||||||
->through($pipelines)
|
->through($pipelines)
|
||||||
->thenReturn();
|
->thenReturn();
|
||||||
|
|
||||||
$io->info("Building configuration for {$configurationData['name']}.");
|
$io->info("Building configuration for {$configurationData->name}.");
|
||||||
|
|
||||||
$io->write('Generated files:');
|
$io->write('Generated files:');
|
||||||
$io->listing(static::getListOfFiles(filesToGenerate: $generatedFiles)->toArray());
|
$io->listing(static::getListOfFiles(filesToGenerate: $generatedFiles)->toArray());
|
||||||
|
|
Loading…
Reference in a new issue