GH GambleHub

Semantik versiya

Semantik versiya

1) SemVer nədir və niyə lazımdır

SemVer, artefaktların (kitabxanalar, API, xidmətlər, sxemlər) versiyalarının təyin edilməsi üçün proqnozlaşdırıla bilən qaydaları təyin edir ki, istehlakçılar yeniləmədən nə gözlədiklərini başa düşsünlər:
  • MAJOR - Uyğunsuz dəyişikliklər (breaking changes).
  • MINOR - API uyğun yeni funksionallıq.
  • PATCH - geri qaytarıla bilən qüsurların düzəldilməsi.

Məqsəd: müqavilələrin sabitliyi barədə razılığa gəlmək və yeniləmələrin dəyərini azaltmaqdır.

2) Versiya formatı

Əsas format:
  • `MAJOR. MINOR. PATCH[-PRERELEASE][+BUILD]`

`1. 4. 7 '- sabit buraxılış.
`1. 5. 0-rc. 2 '- pre-release (release candidate № 2).
`2. 0. 0+linux. arm64 '- build-metadata (versiyaların müqayisəsinə təsir göstərmir).

Müqayisə qaydaları:

1. Əvvəlcə «MAJOR», sonra «MINOR», sonra «PATCH» müqayisə olunur.

2. Pre-relizlər müvafiq sabit versiyadan daha azdır: '1. 2. 0-rc. 1 < 1. 2. 0`.

3. Build-metadata ('+...') sıraya təsir etmir: '1. 2. 0+001 == 1. 2. 0`.

3) Breaking change hesab olunur

Breaking change - istehlakçı hərəkətlərini tələb edən hər hansı bir dəyişiklik:
  • İctimai metodların/end nöqtələrinin silinməsi/adının dəyişdirilməsi/işarəsinin dəyişdirilməsi.
  • Giriş/çıxış formatının dəyişdirilməsi (JSON sxemi, növləri).
  • Səhv müqavilələrinin dəyişdirilməsi (kodlar/strukturlar).
  • Side-effects/SLA-ların dəyişdirilməsi (məsələn, ciddi limitlər və ya yeni məcburi sahələr).

Breaking deyil (düzgün həyata keçirildikdə): isteğe bağlı sahələrin əlavə edilməsi, yeni dəyərlərlə enum genişləndirilməsi (müştəri onlara məhəl qoymasa), yeni son nöqtələr, cari çağırışlara təsir etməyən defoltlarla yeni bayraqlar.

4) Pre-relizlər və kanal strategiyaları

Pre-relizlər SemVer vədlərini pozmadan sınaqdan keçirməyə imkan verir:
  • Etiketlər: 'alpha', 'beta', 'rc'. Nümunə: '2. 3. 0-beta. 3`.
  • Kanallar: nightly → alpha → beta → rc → stable.
  • Siyasət: pre-relizlər default məhsullar üçün transitiv asılılıq kimi daxil olmamalıdır.

5) Variant diapazonları və asılılıq dəqiqliyi

Real ekosistemlərdə diapazon ifadələri istifadə olunur:

5. 1 Node/npm (SemVer default)

`^1. 4. 2` ≈ `>=1. 4. 2 <2. 0. 0 '(MINOR/PATCH, MAJOR fiksasiya edir).
`~1. 4. 2` ≈ `>=1. 4. 2 <1. 5. 0 '(MINOR daxilində PATCH imkan verir).
`1. 4. x '- 1-də hər hansı bir yamaq. 4.
Dəqiq pin: '1. 4. 2`.

5. 2 Python (PEP 440, pip)

`~=1. 4. 2` ≈ `>=1. 4. 2,==1. 4.`.
`>=1. 4,<2. 0 '- açıq sərhədlər.

5. 3 Maven/Gradle (Java)

`[1. 4,2. 0) '- daxil/müstəsna.
Prod-kritik artefaktlar üçün ciddi təpik tövsiyə olunur.

5. 4 Go modules

Həmişə tam etiketlər 'vMAJOR. MINOR. PATCH ';' v2 + 'modulu '/v2' şəkilçisini tələb edir.

Tövsiyə: tətbiqlər üçün - dəqiq pinlər (reproducible builds). Kitabxanalar üçün - caret diapazonları (yeniləmələri sındırmadan asanlaşdırmaq).

6) CHANGELOG и Conventional Commits

Strukturlaşdırılmış dəyişiklik jurnalı şəffaflığı artırır.

Conventional Commits:

feat(payments): add PIX refund endpoint fix(api): correct 400 → 422 on invalid payload perf(cache): reduce p99 by 20%
refactor(core): extract rule engine docs: update API usage examples chore(deps): bump lodash to 4. 17. 21 feat!: remove legacy webhook v1 (BREAKING CHANGE:...)

Типы: `feat`, `fix`, `perf`, `docs`, `refactor`, `chore` и т. д.
Nida işarəsi və ya 'BREAKING CHANGE' bloku MAJOR artımını elan edir.
CHANGELOG kommitlərin tarixindən (release-notes botları) yaranır.

7) API üçün versiya siyasəti

Public API: ciddi SemVer; breaking → MAJOR.
HTTP/REST: URL versiyası/başlığı: '/v1/... ', '/v2/...' və ya 'Accept: application/vnd. org. service. v2+json`.
JSON sxemləri: minor genişləndirmələr - yeni isteğe bağlı sahələr; major - məcburi çıxarılması/dəyişdirilməsi.
gRPC/Protobuf: yeni nömrələrlə yeni sahələr əlavə edin; sahə nömrələrini yenidən istifadə etməyin; → deprecate aradan qaldırılması, mövcud deyil «qırmaq».

8) Məlumat və miqrasiya sxemləri

DB miqrasiyaları tətbiqin versiyaları ilə sinxronlaşdırılır: 'app @ 1. 8. 0 'tələb edir' schema @ 1. 8. x`.
Sxem dəyişikliyi üçün - fazalar: expand (əlavə et), migrate, contract (sil). Versiyanı yalnız köhnə müqaviləni sildiyiniz zaman MAJOR-a qaldırın.
Miqrasiya zamanı ikiqat yazma/oxumağı dəstəkləyin.

9) Monorepo və mikroservislər

Multi-package: Hər paketin öz 'MAJOR. MINOR. PATCH`; yalnız meta-artefaktlar üçün ümumi kök reliz dövrü.

Strategiyaları dəyişin:
  • Independent versions (Lerna/Changesets) - izolyasiyanı gücləndirir.
  • Lock-step - daha asan ünsiyyət, lakin daha çox saxta MAJOR.
  • Mikroservislər üçün ayrı bir versiya ilə müqavilələri (OpenAPI/Protobuf) qeyd edin: 'contract @ 2. 1. 0 ', xidmət onu izləyir.

10) CI/CD-də buraxılışların avtomatlaşdırılması

Conventional Commits əsasında avto versiyası:
  • `fix` → `PATCH`, `feat` → `MINOR`, `!`/`BREAKING` → `MAJOR`.
Avtoteqlər və artefaktların imzası:
yaml
Pseudo-workflow steps:
- run: npx semantic-release
- run: git tag v$NEW_VERSION && git push --tags
- run: cosign sign ghcr. io/org/app:v$NEW_VERSION

CHANGELOG Generation, Release Nouts, GitOps-Repo-da asılılığı yeniləmək, 'main' həmişə son sabit etiketi göstərir.

11) Deprivasiya siyasəti (deprecation policy)

Elan: funksionallığı MINOR-relizində deprecated kimi qeyd edin, EOL müddətini verin (məsələn, 90 gün).
Müşahidə: user/tenant kontekstində köhnəlmiş end nöqtələrinin istifadəsini loqo edin.
Silinir: Aşağıdakı MAJOR. Miqrasiya yolunu sənədləşdirin.

12) Nümunələr və şablonlar

12. 1 Müntəzəm SemVer validasiya ifadəsi

regex
^(0    [1-9]\d)\.(0    [1-9]\d)\.(0    [1-9]\d)(?--([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))? (?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)))?$

12. 2 Müqayisə nümunələri

`1. 2. 3` < `1. 10. 0 '(MINOR ilə müqayisə).
`2. 0. 0-rc. 1` < `2. 0. 0`.
`1. 2. 3+build. 5` == `1. 2. 3`.

12. 3 Asılılıq siyasəti (YAML nümunəsi)

yaml policy:
libraries:
default_range: "^MAJOR. MINOR. PATCH"
pin_security_critical: true services:
pin_exact: true allow_prerelease_in_nonprod: true api_contract:
require_same_minor: true forbid_major_mismatch: true

13) Anti-nümunələr

Prodda 'latest '/üzən etiketlərdən istifadə edin.
Real pozulmadan MAJOR-un artırılması («marketinq versiyaları»).
'PATCH' adı altında gizli breaking dəyişikliklər.
Pre-relizlər transitiv asılılıq prod-applications.
Yeni etiketsiz artefaktı dəyişdirin (mutabel versiyalar).
Kod və DB sxeminin razılaşdırılmamış versiyaları.

14) Giriş çek siyahısı (0-45 gün)

0-10 gün

SemVer-i məcburi standart kimi qəbul edin, qırılma meyarlarını təsdiq edin.
Conventional Commits və 'BREAKING CHANGE' sahəsi ilə PR şablonunu daxil edin.

11-25 gün

semantic-release/changesets, CHANGELOG avtomatik generasiya qoşun.
Imzanı və artefaktların vX etiketi ilə yayımlanmasını konfiqurasiya edin. Y.Z`.

26-45 gün

Köhnə API istifadə deprecation policy və telemetriya daxil edin.
Müqavilələrin (OpenAPI/Proto) və xidmətlərin versiyalarını sinxronlaşdırın.
Siyasət səviyyəsində 'latest' və mutable etiketləri qadağan edin (ORA/CI qaydaları).

15) Yetkinlik metrikası

Yalnız SemVer etiketi ilə nəşr olunan artefaktların% -i.
MINOR versiyaları arasında orta miqrasiya müddəti.
Gizli fasilə dəyişikliklərinə görə hadisələrin sayı.
Anbarlarda Conventional Commits əhatə (> 95%).
Məhsulda üzən diapazonlar olmadan asılılığın payı (> 90%).

16) SemVer lazım deyil zaman

Xarici istehlakçılar olmadan daxili sürətli prototiplər (tarixi versiyalaşdırma uyğun gəlir).
Data/eksperimental modellər (daha yaxşı Model/Schema Versioning konverter səviyyəsində uyğunluğu ilə).
Sabit ictimai API olmadan məzmun paketləri.

17) Nəticə

SemVer istehsalçı və istehlakçı arasında etimad müqaviləsidir. Uyğunluğu pozan şeyi dəqiq müəyyənləşdirin, buraxılış növlərinin tanınmasını və artefaktların yayımlanmasını avtomatlaşdırın, şəffaf CHANGELOG aparın və deprivasiya siyasətinə əməl edin. Sonra yeniləmələr rutin, proqnozlaşdırıla bilən və təhlükəsiz olacaq - və infrastruktur və API-lər biznes şoku olmadan inkişaf edəcək.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.