Zkratka proSemantic VersioningTakéSemantic Versioning, semverPokročilý
Definice
SemVer je pravidlo pro zapisování verzí softwaru ve tvaru MAJOR.MINOR.PATCH, kde každá část signalizuje dopad změny na kompatibilitu. Pomáhá vývojářům, správcům balíčků a provozním týmům odhadnout, zda lze aktualizaci nasadit bezpečně, nebo zda vyžaduje úpravy kódu, testů či integračních smluv.
Než se na to spolehnete: Oficiální specifikace semver.org není mezi povolenými doménami, proto zdroje doplňují širší dokumentace k verzování a správě balíčků.
Co slibují čísla MAJOR.MINOR.PATCH
Verze v SemVeru má základní tvar MAJOR.MINOR.PATCH, například 2.7.4. Smyslem není jen vytvořit pěkné číslo release, ale předat informaci o kompatibilitě. Číslo MAJOR se zvyšuje při nekompatibilní změně veřejného rozhraní. Číslo MINOR se zvyšuje při zpětně kompatibilním přidání funkce. Číslo PATCH se zvyšuje při opravě, která má zachovat dosavadní chování z pohledu uživatele API.
Veřejné rozhraní nemusí být jen sada funkcí v knihovně. Veřejným rozhraním může být REST API, formát konfiguračního souboru, příkazový řádek, datový kontrakt události nebo exportovaný typ v balíčku. SemVer dává smysl teprve ve chvíli, kdy projekt jasně říká, co za takové rozhraní považuje.
Předverze, metadata a nulová hlavní verze
Předverze se zapisuje za pomlčku, například 1.4.0-beta.2. Předverze vyjadřuje, že vydání ještě nemusí mít stabilitu finální verze 1.4.0. Metadata sestavení se zapisují za plus, například 1.4.0+build.58. Metadata pomáhají identifikovat build, ale nemají měnit význam samotné verze pro rozhodování o kompatibilitě.
Číslo 0.y.z se v praxi používá pro raný vývoj. U takového projektu nelze očekávat stejnou stabilitu veřejného rozhraní jako u verze 1.0.0 a vyšší. Změny v 0.3.0 proto mohou být pro uživatele citelné, i když nejde o zvýšení MAJOR na první pozici.
Rozsahy závislostí nejsou samotný SemVer
Správci balíčků často přidávají vlastní syntaxi pro povolené aktualizace. V ekosystému JavaScriptu se běžně používá například ^1.2.3 nebo ~1.2.3. SemVer popisuje význam verzí, zatímco tyto rozsahy určují, jaké verze smí nástroj automaticky vybrat. Výsledek proto závisí i na konkrétním správci balíčků a lockfile.
{
"dependencies": {
"example-lib": "^1.2.3"
}
}Rozsah závislosti je slib založený na důvěře ve vydavatele balíčku. Pokud autor omylem vydá nekompatibilní změnu jako PATCH, správce balíčků ji může považovat za bezpečnou. Proto produkční projekty kombinují SemVer s automatickými testy, zamykáním verzí a čtením poznámek k vydání.
Kde SemVer pomáhá při rozhodování o releasu
SemVer je užitečný hlavně u knihoven, SDK, CLI nástrojů a služeb, které používají jiné týmy nebo externí zákazníci. Číslo verze zrychluje triáž: patch release se typicky nasazuje snáz, minor release vyžaduje ověření nových funkcí a major release se plánuje jako migrační práce.
SemVer ale není náhrada za changelog, migrační příručku ani testovací prostředí. Změna může být formálně kompatibilní, a přesto ovlivnit výkon, paměť, časování nebo okrajové chování. Dobré verzování proto kombinuje jasnou politiku, disciplinované release procesy a férové upozornění na dopady změn.
Příklady z praxe
Změna signatury v klientské knihovně
Knihovna změnila tvar veřejného API pro načítání uživatele. Protože starý kód po aktualizaci přestane fungovat, správné vydání je nová major verze, například z 2.4.1 na 3.0.0. Uživatelé balíčku mohou podle čísla poznat, že migrace nebude jen běžná oprava.
// Verze 2.4.1 client.getUser(id) // Verze 3.0.0 client.users.get({ id })Automatická aktualizace závislosti
Aplikace má v package.json povolený rozsah závislosti od 1.8.0 v rámci kompatibilních verzí. Správce balíčků může při instalaci zvolit novější minor nebo patch vydání, pokud pravidla daného nástroje takový rozsah dovolují. Lockfile pak pomáhá zajistit, že CI a produkce použijí stejný konkrétní build.
{ "dependencies": { "date-tools": "^1.8.0" } }
Časté omyly
- MýtusKdyž změním jen interní implementaci, musím zvýšit major verzi.
- Ve skutečnostiSemVer se řídí dopadem na veřejné rozhraní, ne velikostí interní práce. Interní přepis může být patch release, pokud zachová smluvené chování pro uživatele API.
- MýtusPatch verze je vždy úplně bezpečná aktualizace.
- Ve skutečnostiPatch verze má podle pravidel značit kompatibilní opravu, ale číslo verze samo o sobě nezaručuje kvalitu. Bez testů, lockfile a kontroly changelogu může i patch aktualizace způsobit problém.
Časté dotazy
- Kdy má projekt začít používat SemVer?
- SemVer má smysl zavést ve chvíli, kdy software používá někdo jiný než původní autor a změny mohou rozbít cizí kód, skripty nebo integrační smlouvy. U interního prototypu může stačit datum nebo číslo buildu. U knihovny, SDK, CLI nástroje nebo veřejného API ale SemVer pomáhá uživatelům plánovat aktualizace a odlišit běžnou opravu od migrace.
- Co je v SemVeru breaking change?
- SemVer považuje breaking change za změnu, která poruší dříve slíbené veřejné rozhraní. Typicky jde o odstranění metody, změnu názvu parametru, jiný formát odpovědi, nově povinné pole nebo změnu chování, na které se uživatelé mohli spoléhat. Interní refactoring bez dopadu na veřejné API breaking change být nemusí, i když je rozsáhlý.
- Znamená major verze vždy velkou technologickou změnu?
- SemVer sám nevyžaduje, aby každá nová major verze znamenala velký přepis systému. Major verze pouze říká, že existuje nekompatibilní změna veřejného rozhraní. Malá úprava může vyžadovat major release, pokud rozbije smlouvu s uživateli. Naopak rozsáhlý interní refactoring může zůstat patch nebo minor, pokud zachová kompatibilitu.
- Dá se SemVer použít pro REST API?
- SemVer může fungovat i u REST API, pokud služba jasně definuje veřejný kontrakt: cesty, metody, schémata požadavků, schémata odpovědí, chybové kódy a autentizaci. Číslo verze pak pomáhá rozlišit kompatibilní rozšíření od změn, které klienti musí upravit. U webových API se SemVer často kombinuje s verzovanými endpointy nebo verzemi klientského SDK.
Zdroje
- Software versioning(otevře se v novém okně)
- Package versioning(otevře se v novém okně)
- Git - Tagging(otevře se v novém okně)
- Modules: Packages(otevře se v novém okně)