Kvalitu LydiaCMS drží statická analýza, testy a release pipeline. Čo sa dá automatizovať, automatizujem: od kontroly kódu po nasadenie.
Statická analýza PHP: PHPStan a Rector
PHPStan beží na najvyššej úrovni (max) s 8 vlastnými pravidlami, ktoré strážia konvencie projektu, a 14 vlastných pravidiel Rector vie odchýlky opraviť hromadne naprieč všetkými balíčkami. Výsledkom je vyššia kvalita kódu: chyby v architektúre sa zachytia pri analýze, a nie až za behu. Kód: PHPStan, Rector.
Testy: Nette Tester a E2E v Playwrighte
- Jadro má cez 600 unit a integračných testov v Nette Testeri. Spúšťajú sa paralelne a každé vlákno pracuje s vlastným prefixom databázových tabuliek.
- Ukážková aplikácia má sadu E2E testov v Playwrighte (cez 30 súborov), ktorá prechádza verejnú časť webu aj administráciu.
- Testy balíčkov PHPStan a Rector bežia v CI pipeline, testy jadra spúšťam lokálne v Dockeri.
CI/CD pipeline v GitLabe: automatické verzie a publikácia balíčkov
Balíčky sa inštalujú zo súkromného Composer registra, takže každé vydanie musí byť jednotné a bez ručného kroku. Všetky balíčky preto používajú jednu zdieľanú pipeline v GitLabe a zmena procesu sa robí na jedinom mieste. Má tri fázy:
- Check.
composer validate --stricta kontrola syntaxe PHP vo všetkých zdrojoch. Keď zlyhá, balíček sa nevydá. - Tag. Na hlavnej vetve sa vypočíta a odošle ďalšia verzia.
- Build. Odoslaný tag publikuje balíček do Composer registra a aplikácia si novú verziu stiahne pomocou
composer update.
Nasadenie bez výpadku (zero-downtime deployment)
Nová verzia webu sa nenasadzuje priamo do bežiacej aplikácie. Jeden skript pripraví vedľa nej kompletný nový release a prepne sa naň, až keď je overený:
- zostaví release z vetvy a nainštaluje závislosti bez vývojárskych balíčkov,
- pripojí zdieľané dáta (
.env, logy, nahrané súbory), - aplikáciu skúšobne naštartuje, takže pokazený build sa k prepnutiu nikdy nedostane,
- zazálohuje databázu a spustí migrácie (
lydiacms:upgrade), - overí web health checkom a pri zlyhaní sa sám vráti na predchádzajúci release.
Záloha a rollback
Pred migráciami sa zálohuje databáza. Pri probléme sa dá vrátiť predchádzajúci release (súbory) aj databáza zo zálohy.