Két commit közötti fájlok összegyűjtését előkészítő felület első fázisa: célkörnyezet választás (e2e/d2d), commitlista, diff-előnézet figyelmeztetésekkel. Ez a fázis még semmit nem ír a fájlrendszerre, a csomagolás a phase2-ben érkezik. - DeploymentGuard: .env kapcsoló + hardkódolt stage whitelist + developer szerep + feature flag; a flag szándékosan nem biztonsági réteg, csak láthatóság-vezérlés - GitRepository: csak olvasó wrapper, argumentum-tömbös Symfony Process (nincs shell), hash- és referencia-validáció, core.quotePath=false az ékezetes útvonalakhoz - ChangeSetAnalyzer: kizárási lista, törlendő/másolandó szétválasztás (átnevezésnél mindkettő), figyelmeztetések migrációra, composer.lock-ra és a nem verziókövetett fordított assetekre Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
55 lines
1.5 KiB
PHP
55 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Deployment;
|
|
|
|
/**
|
|
* A célkörnyezetek (e2e, d2d) feloldása a config/deployment.php-ból.
|
|
*
|
|
* A target nem utólagos címke: már a csomagoláskor rögzül, mert befolyásolja a
|
|
* mappanevet, a teendők listáját, a kezdő commit előtöltését és a naplót is.
|
|
*/
|
|
class DeploymentTargets
|
|
{
|
|
/**
|
|
* @return array<string, array{key:string, label:string, domain:string, remote_path:string, expected_branch:?string}>
|
|
*/
|
|
public function all(): array
|
|
{
|
|
/** @var array<string, array<string, string>> $targets */
|
|
$targets = (array) config('deployment.targets', []);
|
|
|
|
$resolved = [];
|
|
|
|
foreach ($targets as $key => $target) {
|
|
$resolved[$key] = array_merge(
|
|
['label' => $key, 'domain' => '', 'remote_path' => '', 'expected_branch' => null],
|
|
$target,
|
|
['key' => $key],
|
|
);
|
|
}
|
|
|
|
return $resolved;
|
|
}
|
|
|
|
/**
|
|
* @return array{key:string, label:string, domain:string, remote_path:string, expected_branch:?string}|null
|
|
*/
|
|
public function find(?string $key): ?array
|
|
{
|
|
return $key ? ($this->all()[$key] ?? null) : null;
|
|
}
|
|
|
|
/**
|
|
* @return array<string, string>
|
|
*/
|
|
public function options(): array
|
|
{
|
|
return array_map(fn (array $target): string => $target['label'], $this->all());
|
|
}
|
|
|
|
public function defaultKey(): ?string
|
|
{
|
|
return array_key_first($this->all());
|
|
}
|
|
}
|