Bosh sahifa Wiki Semantic Versioning

Semantic Versioning

Semantic Versioning — dastur versiyasini MAJOR.MINOR.PATCH ko‘rinishida belgilab, raqam o‘zgarishini public API mosligi haqidagi ma’no bilan bog‘laydigan versiyalash qoidalaridir. Asosiy modelda mos kelmaydigan API o‘zgarishi MAJORni, orqaga mos yangi imkoniyat MINORni, orqaga mos xato tuzatishi esa PATCHni oshiradi. SemVer nomi bilan tanilgan bu yondashuv dependency resolver va foydalanuvchiga release xavfini taxmin qilishga yordam beradi.

Public API chegarasi

Semantik raqam faqat loyiha o‘z public APIini aniq belgilaganida foydali. API funksiya nomlari bilan cheklanmasligi mumkin: command-line option, konfiguratsiya kaliti, wire protocol, ma’lumot formati va kuzatiladigan xatti-harakat ham iste’molchi tayangan shartnomaga kiradi. Hujjatlanmagan ichki modulni o‘zgartirish PATCH bo‘lishi mumkin, public formatni o‘zgartirish esa breaking change bo‘lishi mumkin.

Public API haqida noaniqlik “bu internal edi” degan bahsga olib keladi. Hujjat, type declaration, deprecation siyosati va compatibility testlar chegarani amaliy ko‘rsatadi. SemVer o‘z-o‘zidan moslikni kafolatlamaydi; maintainer o‘zgarishni to‘g‘ri tasniflashi kerak.

Raqamlarni oshirish

2.4.7 versiyadan incompatible o‘zgarish 3.0.0ga olib boradi. Orqaga mos funksiya qo‘shilishi 2.5.0, faqat mos bug fix esa 2.4.8 bo‘ladi. Yuqori qism oshirilganda undan past qismlar nolga qaytariladi. Yangi release avvalgi paket artefaktini o‘zgartirmaydi; yangi immutable versiya sifatida nashr qilinadi.

Deprecation darhol APIni olib tashlash emas. Eski yo‘l bir yoki bir necha MINOR release davomida ishlashi, warning va migratsiya qo‘llanmasi berilishi mumkin. Keyingi MAJORda olib tashlash SemVerga mos, ammo foydalanuvchiga migratsiya xarajati baribir mavjud.

Pre-release va build metadata

Asosiy versiyadan keyingi tire pre-release identifikatorini bildiradi: 2.0.0-alpha.3. Bunday versiya tegishli normal 2.0.0dan past precedencega ega va beqarorlikni bildirishi mumkin. Nuqta bilan ajratilgan raqamli va matnli identifikatorlar maxsus taqqoslash qoidalariga ega.

Plyusdan keyingi build metadata, masalan 2.0.0+build.184, precedencega ta’sir qilmaydi. Ikki artefakt faqat build metadata bilan farqlansa, SemVer tartibida teng hisoblanadi. Package registry bir xil normal versiya uchun turli bitli artefaktga qanday munosabat qilishini alohida belgilaydi.

Dependency diapazonlari

Iste’molchi >=2.4.0 <3.0.0 kabi diapazon bilan mos MINOR va PATCHlarni qabul qilishi mumkin. Caret va tilde sintaksisi package managerga qarab nozik farq qiladi, ayniqsa 0.x versiyalarda. Lock file resolver tanlagan aniq versiyani mahkamlaydi; manifest esa ruxsat etilgan oralig‘ini saqlaydi.

Avtomatik yangilanish test va rollback bilan birga bo‘ladi. Maintainer xato bilan breaking changeni MINORda chiqarsa, SemVer diapazoni iste’molchini himoya qilmaydi. Contract test, changelog va canary deploy raqamli signaldan tashqari nazorat beradi.

Nol major va cheklovlar

0.y.z dastlabki rivojlanish uchun ishlatiladi va public API barqaror deb qaralmasligi mumkin. Bu har bir o‘zgarishni ixtiyoriy qilish degani emas; loyiha 0.xdagi compatibility siyosatini hujjatlashtiradi. 1.0.0 public APIning belgilanganligini bildiradi, mahsulotning xatosiz yoki to‘liq ekanini emas.

SemVer tez-tez chiqariladigan servis, mobil ilova yoki sana bo‘yicha qo‘llab-quvvatlanadigan platforma uchun har doim eng yaxshi model emas. Calendar Versioning release vaqtini yaxshiroq ko‘rsatishi mumkin. Tanlov foydalanuvchi versiyadan qaysi qarorni olishiga qarab qilinadi.

Bog‘liq tushunchalar

Version, Major version, Minor version, Patch release, Backward compatibility, Pre-release, Dependency constraint