🟢 Beginner

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 bump
  • fix: → PATCH bump
  • feat!: alebo BREAKING CHANGE: → MAJOR bump
  • chore:, 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:

  1. Developer commituje s conventional commit správou
  2. CI pipeline spustí semantic-release
  3. Nástroj analyzuje commity od posledného release
  4. Automaticky určí nové číslo verzie
  5. Vygeneruje CHANGELOG.md
  6. Vytvorí Git tag a GitHub/GitLab release
  7. Publikuje package (npm, PyPI, Docker)

Praktické použitie

  • Knižnice a SDK — konzumenti potrebujú vedieť, či update niečo rozbije
  • API versioningv1, v2 endpointy 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.0 počas vývoja, 1.0.0 = stabilné API
  • Nikdy nemeňte obsah už vydanej verzie (immutability)
  • V monorepe používajte release-please s 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.