- A célkörnyezet alapértelmezése a d2d (azt frissítjük sűrűbben). A config targets
tömbjének sorrendje adja az alapértelmezést, ezért csak a sorrend cserélődött.
- A "Környezetek állapota" panel betöltéskor magától lekérdezi a deploy-version.json-t,
percenkénti cache-sel (a hibás választ is cache-eljük, hogy egy nem válaszoló
környezet ne lassítsa minden kattintásnál a felületet). A Frissítés gomb kényszerít.
- A panel tömörebb, és valóban két hasábos: a md:grid-cols-2 nincs benne a lefordított
CSS-ben, ezért saját, media query-s stílussal oldjuk meg - így build nélkül is működik.
- A commitlistában a hash mellett jelöljük, melyik környezet áll azon a commiton:
zöld a szervertől lekérdezett, szürke a napló szerinti állapot.
Teszt: a beforeEach Http::fake() catch-all stubja minden URL-re illeszkedik és a factory
az első találatot adja vissza, ezért a konkrét választ váró teszt új factory-t kap.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A "Csomag készítése" gomb a felületen láthatatlan volt: a text-white benne van a
lefordított CSS-ben, a bg-primary-600 viszont nincs, így fehér szöveg került fehér
kártyára. Ugyanezért jelentek meg a státusz-badge-ek is színtelen szövegként.
Ok: egy új blade fájlban használt Tailwind utility class csak npm run build után kerül
be a bundle-be (a theme.css scanneli a resources/views/filament mappát, de a CSS-t
nem generálja újra magától). Ezért a kézzel stílusozott elemek helyett a Filament saját
button/badge komponenseit használjuk, amiknek a stílusa már a lefordított CSS-ben van -
így a felület build nélkül is helyesen jelenik meg.
A színes figyelmeztető dobozok maradtak nyers utility class-okkal: azok build hiányában
is olvashatók (keretes doboz), csak a színüket kapják meg npm run build után.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A csomagolás mostantól nyomot hagy: melyik környezetre mi készült, mi lett kirakva, és
mennyi a lemaradás - ez az, ami a "melyik verzió fut az e2e-n" kérdést kiveszi a fejből.
- deployment_packages tábla + modell (BaseAuditable): target, tartomány, darabszámok,
mappa/ZIP útvonal, deployed_at. A csomagolás és a tényleges kirakás két külön esemény.
- Targetenkénti előtöltés: a kezdő commit az adott környezetre utoljára kirakottként
megjelölt csomag to_commit-je. Rebase után nem létező hash esetén inkább üres marad,
mint hogy hamis tartományt mutasson.
- "Környezetek állapota" panel: napló szerinti állapot + commit-lemaradás
(git rev-list --count), és gombra a szerver deploy-version.json-jának lekérdezése.
Ha a kettő eltér, az elmaradt vagy félbemaradt feltöltés jele. Szándékosan gombra fut,
nem minden rendereléskor: így nem indul kimenő kérés magától.
- ZIP a kész mappából (a fájllista a zip létrejötte előtt készül, így nem csomagolja
magát), letöltés a naplóból. A DB-ből jövő útvonalat kiírás előtt a kimeneti mappához
kötjük, hogy egy módosított rekord se tehessen letölthetővé tetszőleges fájlt.
- _torles.sh: alapból dry run, --confirm kell a törléshez, app-gyökér ellenőrzéssel,
abszolút útvonal és .. kiszűrésével, LF sorvéggel és BOM nélkül. Lefuttatva ellenőrizve.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A kijelölt tartományból elkészül a feltölthető mappa: deploy_<target>_<időbélyeg>, benne
a fájlok eredeti relatív útvonalon, hogy a feltöltés mappa-összeolvasztás legyen.
- GitRepository::archiveTo(): git archive --format=zip + ZipArchive kicsomagolás, ~100
fájlonként darabolva a parancssor-limit miatt. A tartalom a git objektumtárból jön, nem a
working tree-ből: így nem szivárog ki commitolatlan módosítás, és a .gitattributes eol=lf
miatt LF sorvéggel kerül a Linux célgépre. Üres pathspec esetén nem hívunk gitet, mert az
a TELJES fát csomagolná.
- DeploymentPackageBuilder: _MANIFEST.json/.txt (sha1 + méret fájlonként), _TORLENDO.txt a
törölt és az átnevezett fájlok régi útvonalával, _TEENDOK.md a diffből származó lépésekkel
(migrate, composer install, asset-figyelmeztetés, verzió-ellenőrzés), és public/
deploy-version.json a kirakott commit hashével.
- A git archive által kihagyott fájlok (pl. .gitattributes export-ignore) külön "missing"
listára kerülnek - csendben hiányzó fájl a manuális deploynál a legrosszabb hiba.
- Felületen fájlonkénti kézi kivétel, megerősítéses csomagolás gomb, eredmény-kártya.
- DeploymentGuard::ensureEnvironmentAllowed(): a builder felhasználó nélkül is ellenőrzi az
env kapcsolót és a stage whitelistet, így konzolról indítva sem fut le egy szerveren.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- a topbar menüpont a most bemásolt git ikont használja; a fájl ico_gitpng néven
érkezett, átnevezve ico_git.png-re, hogy illeszkedjen az ico_*.png konvencióhoz,
amiből a nav az útvonalat építi
- a git log a törzset (%b) is elkéri, és a keresés a tárgysor mellett ebben is keres:
a hash-re ritkán keres ember, az érdemi leírás viszont gyakran a törzsben van
- a --shortstat sora a törzs után érkezik, ezért a parse leválasztja róla, különben
a "N files changed" szöveg a törzsbe és a keresésbe is beszivárogna
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>