Semantic Versioning — Verziovanie so zmyslom
Semantic Versioning (SemVer) je štandard pre verziovanie softvéru, ktorý dáva číslu verzie jasný význam. V kombinácii s conventional commits umožňuje plne automatizované releasy.
Čo je Semantic Versioning
SemVer definuje formát verzie ako MAJOR.MINOR.PATCH (napr. 2.4.1):
- MAJOR (2.x.x) — breaking changes, nekompatibilné API zmeny
- MINOR (x.4.x) — nová funkcionalita, spätne kompatibilná
- PATCH (x.x.1) — bugfixy, žiadne nové features
Špeciálne prípady:
- Pre-release:
1.0.0-beta.1,2.0.0-rc.1 - Build metadata:
1.0.0+build.123 - Počiatočný vývoj:
0.x.x— API sa môže meniť kedykoľvek
Pravidlo je jednoduché: ak používateľ vašej knižnice musí zmeniť svoj kód, je to MAJOR bump.
Conventional Commits
Conventional Commits je konvencia pre písanie commit správ, ktorá umožňuje automatickú detekciu typu zmeny:
feat: pridanie OAuth2 autentifikácie
fix: oprava memory leak v connection pool
docs: aktualizácia API dokumentácie
feat!: zmena response formátu na JSON:API
BREAKING CHANGE: Endpoint /users teraz vracia pagination wrapper
Typy commitov:
feat:→ MINOR bumpfix:→ PATCH bumpfeat!:aleboBREAKING CHANGE:→ MAJOR bumpchore:,docs:,style:,refactor:,test:→ žiadny bump
Auto-release a Changelog
S conventional commits môžete plne automatizovať release proces:
Nástroje:
| Nástroj | Popis |
|---|---|
semantic-release |
Automatický release na základe commitov |
standard-version |
Generovanie changelog a version bump |
release-please |
Google-ov nástroj pre automated releases |
commitlint |
Validácia commit správ |
husky |
Git hooks pre lokálnu validáciu |
Typický flow:
- Developer commituje s conventional commit správou
- CI pipeline spustí
semantic-release - Nástroj analyzuje commity od posledného release
- Automaticky určí nové číslo verzie
- Vygeneruje CHANGELOG.md
- Vytvorí Git tag a GitHub/GitLab release
- Publikuje package (npm, PyPI, Docker)
Praktické použitie
- Knižnice a SDK — konzumenti potrebujú vedieť, či update niečo rozbije
- API versioning —
v1,v2endpointy podľa MAJOR verzie - Monorepo — každý package má vlastnú verziu
- Docker images — tagovanie obrazov podľa SemVer (
app:1.2.3)
Best Practices
- Vynucujte conventional commits cez
commitlint+husky - Automatizujte release — manuálne verziovanie vedie k chybám
- Generujte CHANGELOG automaticky, nie ručne
- Začínajte na
0.1.0počas vývoja,1.0.0= stabilné API - Nikdy nemeňte obsah už vydanej verzie (immutability)
- V monorepe používajte
release-pleases per-package konfiguráciou
SemVer v kombinácii s conventional commits a automatizáciou eliminuje ľudské chyby z release procesu a dáva používateľom jasný signál o type zmien.