Jak nastavit verzování kódu pro monorepo s více balíčky

Pro monorepo s více balíčky je klíčové rozhodnout, zda použiješ jednotné, nebo nezávislé verzování kódu. Jednotný přístup znamená, že všechny balíčky sdílejí stejné číslo verze, což výrazně zjednodušuje vydávání i komunikaci směrem k uživatelům. Pokud ale balíčky vydáváš v různých cyklech a některé jsou stabilní, zatímco jiné se rychle mění, zvol raději nezávislé verzování. V takovém případě potřebuješ nástroj, který umí sledovat změny v jednotlivých balíčcích a automaticky dopočítat, které z nich si zaslouží novou verzi. Prakticky to znamená zavést konvence pro commit zprávy, ideálně v duchu Conventional Commits, kde prefixy jako feat, fix nebo breaking change určují, jaký typ změny jsi provedl. Bez tohoto základu se neobejdeš, protože ruční určování verzí u desítek balíčků dříve nebo později skončí chybou. Druhým krokem je nastavit nástroj pro správu verzí a Vyvojarska . V praxi se osvědčily monorepo nástroje, které umí detekovat změněné soubory, spočítat nové verze podle commit zpráv a vygenerovat changelog. Tyto nástroje obvykle fungují tak, že při každé změně vytvoří takzvaný changeset, tedy malý soubor s popisem změny a typem bumpu. Ten se ukládá do repozitáře společně s kódem. Při vydání nové verze nástroj changesety přečte, aktualizuje čísla verzí v příslušných balíčcích, upraví vzájemné závislosti a publikuje pouze to, co se skutečně změnilo. Důležité je, aby všechny balíčky měly jasně definované vnitřní závislosti, protože při nezávislém verzování kódu může snadno vzniknout stav, kdy jeden balíček odkazuje na verzi jiného, která ještě nebyla vydána. Tomu se vyhneš tak, že před publikací vždy nejdříve aktualizuješ závislosti a teprve potom spustíš vydání. Třetí oblastí je automatizace a ochrana před chybami. Nastav si v CI pipeline kontrolu, která ověří, že každý pull request obsahuje changeset, pokud mění kód některého balíčku. Zároveň přidej krok, který při sloučení do hlavní větve automaticky vytvoří release pull request s aktualizovanými verzemi a changelogem. Tím zajistíš, že verzování kódu bude předvídatelné a nebude záviset na lidské paměti. Dbej také na to, aby všechny balíčky měly stejný formát čísel verzí a aby se tagy v repozitáři vytvářely konzistentně, ideálně ve tvaru názvu balíčku a verze. Pokud používáš monorepo s více balíčky dlouhodobě, vyplatí se zdokumentovat, jak se změny zapisují, kdo schvaluje vydání a jak se řeší breaking changes. Bez jasných pravidel se i dobře nastavený nástroj časem rozpadne a ty budeš trávit hodiny ručním dohledáváním, která verze vlastně patří kam.