Kvalita a vývoj

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 --strict a 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ý:

  1. zostaví release z vetvy a nainštaluje závislosti bez vývojárskych balíčkov,
  2. pripojí zdieľané dáta (.env, logy, nahrané súbory),
  3. aplikáciu skúšobne naštartuje, takže pokazený build sa k prepnutiu nikdy nedostane,
  4. zazálohuje databázu a spustí migrácie (lydiacms:upgrade),
  5. 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.

← LydiaCMS