GH GambleHub

Semantik versiyalash

Semantic Versioning (SemVer) - versiya raqami o’zgarishlar xususiyatini qanday aks ettirishi to’g "risidagi shartnoma. Formati: MAJOR. MINOR. PATCH[-PRERELEASE][+BUILD].

Maʼnosi:
  • MAJOR - mos kelmaydigan oʻzgarishlar (breaking).
  • MINOR - teskari mos keladigan chichlar/kengaytmalar.
  • PATCH - xato/xavfsizlikni teskari moslashuvchi tuzatishlar.

Maqsad: iste’molchilar to’satdan buzilmasdan API, voqealar, ma’lumotlar sxemalari, SDK va konfiguratsiyalarning oldindan aytib bo’ladigan evolyutsiyasi.


1) Raqamlar konvensiyasi


X.Y.Z[-alpha.1    -rc.1][+build.sha]

Pre-release (’-alpha’,’-beta’,’-rc’) - beqaror yig’ilishlar; mos kelmaydi.
Build metadata (’+ sha’) - taqqoslash tartibiga ta’sir qilmaydi, izlash uchun foydalidir.
1 gacha. 0. 0 har qanday o’zgarishni breaking deb hisoblash mumkin (lekin qoidalarga boshidanoq rioya qilish yaxshiroqdir).


2) Breaking/minor/patch ni nima deb hisoblash kerak

PATCH (Z):
  • Kontraktni o’zgartirmasdan xatolar va xavfsizlik fikslari.
  • Kontraktga ta’sir qilmaydigan dok-apdeytlar.
  • Javoblarni/hodisalarni/sxemalarni oʻzgartirmasdan optimallashtirish.
MINOR (Y):
  • Yangi ixtiyoriy maydonlarni/usullarni/endpointlarni qoʻshish.
  • Agar isteʼmolchilar notanish qiymatlarga chidamli boʻlsa, enum qiymatlarini kengaytirish.
  • Yangi DB indekslari, nullable ustunlari, eskisiga qoʻshimcha yangi voqealar.
MAJOR (X):
  • Maydonlarni olib tashlash/qayta nomlash, turlarni, majburiyatlarni oʻzgartirish.
  • Semantika/maqom/xato kodlarini oʻzgartirish.
  • Seriallashtirish formatini, kalitlar sxemasini, transport protokolini o’zgartirish.
  • Topiklarning siqilishi/qo’shilishi, hodisaning mazmunini o’zgartirish, partiyalashtirish sxemasini o’zgartirish.
  • «Ikki fazali» almashtirishni talab qiladigan BD migratsiyasi.
💡 Qoida: Producer backward compatibility ni MINOR/PATCH doirasida saqlashi shart. Agar qila olmasangiz, MAJORni oshiring va migratsiya davrida «ikki chiziq» ni saqlang.

3) Artefaktlar bo’yicha versiyalash

3. 1 REST

Variantlar:’URI/v1/...’, sarlavhalar (’Accept: application/vnd. acme. game+json; version = 1’), parametr.
Tavsiya: ommaviy API uchun URI versiyasi; ichki uchun - c negotiation sarlavhasi orqali.
MINOR: ixtiyoriy maydonlarni, yangi filtrlar/resurslarni qoʻshish; mavjud javoblarni o’zgartirmang.
PATCH: fikslar, tavsiflarni aniqlashtirish, barqaror saralash.

3. 2 gRPC

Signatur/turlarni oʻzgartirish → MAJOR (yangi paket/xizmat:’acme. wallet. v2`).
Yangi maydonlar - optional belgisi bilan; server nomaʼlum narsalarni eʼtiborsiz qoldirishi kerak.
Maydonlarni olib tashlamaymiz: «deprikeyt + raqamni zaxira qilish», olib tashlash - faqat quyidagi MAJORda.

3. 3 GraphQL

MINOR: Yangi maydonlar/tiplar/query; olib tashlash -’@deprecated’+ migratsiya oynasi orqali, to’liq olib tashlash - MAJOR.
Oʻzgartirish nullable → non-nullable - MAJOR.

3. 4 Voqealar va topiklar (Kafka/SQS)

Sxemalar Schema Registry: evolyutsiya additive (defoltli maydonlarni qoʻshish).
Yangi mos kelmaydigan versiya → yangi subject/topic (’bet. settled. v2`).
Partiyalash kaliti MAJOR ichida oʻzgarmagan.

3. 5. BQ sxemalari

«Kengaytiring, keyin qisqartiring»:

1. Ustunni qoʻshish (nullable/c defolt) →

2. Orqa oynani toʻldirish →

3. Oʻqishni tarjima qilish →

4. Eskisini olib tashlash (faqat MAJORda).

/ RK/noyoblik turini oʻzgartirish - MAJOR, ficheflag va qoʻshaloq yozuv ostida.

3. 6 SDK/CLI

Ommaviy usullar/signatura - xuddi shunday qoidalar.
Avtogeneratsiya uchun (OpenAPI/Proto) - paket nomi va artefaktlarning versiyasi.


4) Deprikatsiyalar siyosati va hayot sikli

Har bir breaking-o’zgarishdan oldin deprikatsiya sodir bo’ladi (odatda tashqi uchun 90-180 kun, ichki uchun 30-60 kun).
Kommunikatsiyalar: changelog, e-mail/vebxuklar hamkorlarga, bannerlar ishlab chiquvchi portalida.
Dual-run rejimi: parallel ravishda’v1’va’v2’tutamiz,’v1’trafik ulushini kuzatamiz.
Sunset headers (REST): `Sunset: 2026-03-31`, `Link: <url>; rel="deprecation"`.


5) Version negotiation

Mijoz istalgan + maksimal qoʻllab-quvvatlanadigan versiyani yuboradi (masalan,’Accept-Version: 1,2’).
Server’Content-Version: 2’ga javob beradi.
Ikki yo’nalishli protokollarda (WebSocket, gRPC) -’supported _ versions’bilan Hello-frame almashinuvi.


6) Provayder adapterlari bilan integratsiya (ACL)

Tashqi provayder sxemani o’zgartiradi - adapter ichida biz v1/v2 mapperlarini saqlaymiz va domen shartnomamizni saqlab qolgan holda ichki voqea uchun MINOR chiqaramiz.
Agar tashqi oʻzgarishlar ichkariga kirsa, bu bizning domen hodisasining MAJOR va yangi subject.


7) Changelog va kommit belgilari

Keep a Changelog va Conventional Commits:
  • `feat:...` → MINOR
  • ’fix:... ’/’ chore’,’docs’,’perf’(shartnomasiz) → PATCH
  • ’feat!: ’/’ fix!: ’/’ refactor!:’ yoki’BREAKING CHANGE:’tanada → MAJOR
Yozish namunasi:

[2.3.0] - 2025-10-31
Added
- GET /v1/games?capabilities=jackpot (optional)
Changed
- GraphQL: field Game.volatility @deprecated, use Game.riskProfile

8) Relizlarni avtomatlashtirish

CI: sxemalar validatorlari (OpenAPI/Protobuf/Euro/JSON-Schema), breaking-difflar detekti.
SemVer-bot: Conventional Commits → analizi bump (major/minor/patch) ni hisoblab chiqadi, tag qo’yadi, generit changelog.
CD: alohida deploy va release (ficheflaglar/konfiglar yangi versiyani faollashtiradi).
Nazorat: Muvaffaqiyatli va kelishilgan SLOlargacha’latest’ni PROda e’lon qilmaymiz.


9) Konfiguratsiyalar va siyosatlar uchun semantika

Konfiglar (YAML/JSON) ham sxema versiyasiga ega:’schema _ version: 3’.
MINOR - yangi ixtiyoriy maydonlar/qoidalar; MAJOR - tuzilma/majburiyatni o’zgartirish.
Validatorda v2/v3 ni qo’llab-quvvatlash; konfiguratsiyalar migratori nomuvofiqliklar hisoboti bilan.


10) Muvofiqlikni sinash

Consumer-driven contract tests (Pact): har bir integratsiya uchun.
Schema-evolution tests: eski payload’larni yangi sxemada haydash va aksincha.
Replay: soyada’v1’ga’v2’prod-trafigini takrorlash.
Property-based: notanish maydonlarga chidamlilik/enum.


11) Versiyalar bo’yicha kuzatish

Metrik/loglarni belgilang:’api _ version’,’schema _ version’,’event _ version’.
Migratsiya dashbordlari: versiyalar bo’yicha trafik ulushi, xatolik/yashirin’v1/v2’bo’yicha.
Alertlar: agar’v1’reja bo’yicha pasaymasa; ’v2’ chiqarilgandan keyin 4xx/5xx o’sishi.


12) Migratsiya patternlari

Expand → Migrate → Contract (БД).
Dual write + oʻqishni oʻzgartirishdan oldin divergentlarni taqqoslash.
Rang/qoidalar uchun shadow compare.
tenantlar/mintaqalar bo’yicha Canary; tez qaytish uchun feature flags.
Read-compat/Write-compat: yangi versiya eski ma’lumotlarni o’qiydi, lekin yangi formatda yozadi.


13) Anti-patternlar

Resurs/hodisani versiyalash oʻrniga «Har bir maydondagi versiya».
MINOR ostida yashirin breaking-oʻzgarishlar (masalan, defoltlarni oʻzgartirish).
Derazasiz va isteʼmol metriksiz deprikeytni olib tashlash.
«Abadiy v1»: eski versiyalarni olib tashlash rejasi yo’qligi → texnik qarz va zaifliklar.
Konteyner tasvirining biznes versiyasi va versiyasini aralashtirish.


14) Versiyalash siyosatining chek-varaqasi

  • Versiyalar formati va haqiqat manbalari qayd etildi (Registry/Portal).
  • Artefaktlar bo’yicha breaking-mezonlar ro’yxati tasdiqlandi (REST/gRPC/GraphQL/events/DB).
  • Deprikatsiya jarayoni: muddatlar, kommunikatsiyalar, sunset/bannerlar, dual-run.
  • Sxemalar va Conventional Commits avtomatik diff-checker.
  • Dashbord isteʼmol versiyasi va alertlar.
  • Migratsiya pleybuklari (expand/migrate/contract, dual-write, shadow).
  • Konfigi va SDK o’z versiyalari va registrlariga ega.
  • Mijozlar uchun «qanday variantni tanlash» va buyruqlar uchun «qanday oshirish» hujjatlari.

15) Versiyalash namunalari (iGaming-keyslar)

’BetSettled v1’ →’v2’hodisasi:’void _ reason’(optional) va’tax. amount` (optional) — MINOR. Qayta nomlandi’payout’→’win _ amount’- MAJOR, yangi subject.
REST ’/wallets/transfer’:’? tenant _ id =’- MINOR filteri qoʻshilgan. Xato kodi oʻzgartirildi’409’→’422’- MAJOR.
GraphQL:’Player. age’@deprecated’sifatida’Player’foydasiga. ageGroup’- MINORga chiqarish, MAJORga X. davridan keyin olib tashlash.
BD:’bonus _ wager _ left’nullable - MINOR ustunini qo’shing. Non-null va’bonus _ left’- MAJOR (expand/contract orqali) olib tashlandi.


Xulosa

Semantik versiyalash raqamlar haqida emas, balki ishonch va bashorat qilish haqida. Aniq qoidalar, avtomatik tekshiruvlar, nazorat qilinadigan deprikatsiyalar va shaffof telemetriya APIlarni, integratsiya uchun og’riqsiz voqealar va sxemalarni rivojlantirishga va tez-tez, xavfsiz va mazmunli o’zgarishlarni chiqarishga imkon beradi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.