Kvalita a vývoj

Kvalitu LydiaCMS drží statická analýza, testy a release pipeline. Co jde automatizovat, automatizuji: od kontroly kódu po nasazení.

Statická analýza PHP: PHPStan a Rector

PHPStan běží na nejvyšší úrovni (max) s 8 vlastními pravidly, která hlídají konvence projektu, a 14 vlastních pravidel Rector umí odchylky opravit hromadně napříč všemi balíčky. Výsledkem je vyšší kvalita kódu: chyby v architektuře se zachytí při analýze, a ne až za běhu. Kód: PHPStan, Rector.

Testy: Nette Tester a E2E v Playwrightu

  • Jádro má přes 600 unit a integračních testů v Nette Testeru. Spouštějí se paralelně a každé vlákno pracuje s vlastním prefixem databázových tabulek.
  • Ukázková aplikace má sadu E2E testů v Playwrightu (přes 30 souborů), která prochází veřejnou část webu i administraci.
  • Testy balíčků PHPStan a Rector běží v CI pipeline, testy jádra spouštím lokálně v Dockeru.

CI/CD pipeline v GitLabu: automatické verze a publikace balíčků

Balíčky se instalují z privátního Composer registru, takže každé vydání musí být jednotné a bez ručního kroku. Všechny balíčky proto používají jednu sdílenou pipeline v GitLabu a změna procesu se dělá na jediném místě. Má tři fáze:

  • Check. composer validate --strict a kontrola syntaxe PHP ve všech zdrojích. Když selže, balíček se nevydá.
  • Tag. Na hlavní větvi se vypočítá a odešle další verze.
  • Build. Odeslaný tag publikuje balíček do Composer registru a aplikace si novou verzi stáhne pomocí composer update.

Nasazení bez výpadku (zero-downtime deployment)

Nová verze webu se nenasazuje přímo do běžící aplikace. Jeden skript připraví vedle ní kompletní nový release a přepne se na něj, až když je ověřený:

  1. sestaví release z větve a nainstaluje závislosti bez vývojářských balíčků,
  2. připojí sdílená data (.env, logy, nahrané soubory),
  3. aplikaci zkušebně nastartuje, takže rozbitý build se k přepnutí nikdy nedostane,
  4. zazálohuje databázi a spustí migrace (lydiacms:upgrade),
  5. ověří web health checkem a při selhání se sám vrátí na předchozí release.

Záloha a rollback

Před migracemi se zálohuje databáze. Při problému lze vrátit předchozí release (soubory) i databázi ze zálohy.

← LydiaCMS