d2d.emegrendeles.hu/app/Services/Deployment/DeploymentTargets.php
E98Developer 09eed3eeb3 ADD Deployment csomagoló phase1 védelem, git olvasó és read-only commit/diff felület
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>
2026-08-16 06:45:09 +02:00

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());
}
}