GH GambleHub

Semantik sürüm oluşturma

Anlamsal sürüm oluşturma

1) SemVer nedir ve neden gereklidir

SemVer, tüketicilerin güncellemeden ne bekleyeceklerini anlamaları için yapaylara (kütüphaneler, API'ler, hizmetler, şemalar) sürüm atamak için öngörülebilir kurallar belirler:
  • MAJOR - kırılma değişiklikleri.
  • MINOR, API uyumlu yeni bir özelliktir.
  • PATCH - tersinir kusur düzeltmeleri.

Amaç: Sözleşmelerin istikrarı üzerinde anlaşmak ve yükseltmelerin maliyetini azaltmak.

2) Sürüm formatı

Temel format:
  • 'BINBAŞI. MINÖR. PATCH [-PRERELEASE] [+ BUILD] '

`1. 4. 7 'kararlı bir sürümdür.
`1. 5. 0-rc. 2 '- yayın öncesi (2 numaralı yayın adayı).
`2. 0. 0 + linux. arm64 '- meta veriler oluşturun (sürüm karşılaştırmasını etkilemez).

Karşılaştırma kuralları:

1. Önce 'MAJOR', sonra 'MINOR', sonra 'PATCH' karşılaştırılır.

2. Ön sürümler, ilgili kararlı sürümden daha küçüktür: '1. 2. 0-rc. 1 < 1. 2. 0`.

3. Yapı meta verileri ('+...') şu sırayı etkilemez: '1. 2. 0+001 == 1. 2. 0`.

3) Değişimin kırılması olarak kabul edilen şey

Kırılma değişikliği - tüketici eylemi gerektiren herhangi bir değişiklik:
  • Ortak yöntemlerin/uç noktaların imzasını silme/yeniden adlandırma/değiştirme.
  • Giriş/çıkış formatını değiştirin (JSON şeması, türleri).
  • Hata sözleşmelerini (kodları/yapıları) değiştirin.
  • Yan etkileri/SLA'ları değiştirin (örneğin, katı sınırlar veya yeni gerekli alanlar).

Kesmeme (doğru uygulanırsa): isteğe bağlı alanlar ekleme, enumu yeni değerlerle genişletme (istemci bunları yoksayarsa), yeni uç noktalar, geçerli çağrıları etkilemeyen varsayılanları olan yeni bayraklar.

4) Ön yayınlar ve kanal stratejileri

Ön sürümler, SemVer vaatlerini bozmadan test etmenizi sağlar:
  • Etiketler: 'alfa', 'beta', 'rc'. Örnek: '2. 3. 0-beta. 3`.
  • Kanallar: Her gece, alfa, beta, rc, kararlı.
  • Politika: Ön sürümler varsayılan üretim düzenekleri için geçişli bağımlılıklar olarak düşmemelidir.

5) Sürüm aralıkları ve kısıtlama doğruluğu

Gerçek ekosistemler aralık ifadelerini kullanır:

5. 1 Düğüm/npm (varsayılan SemVer)

`^1. 4. 2` ≈ `>=1. 4. 2 <2. 0. 0 '(MINOR/PATCH'e izin verir, MAJOR'ı düzeltir).
`~1. 4. 2` ≈ `>=1. 4. 2 <1. 5. 0 '(MINOR içinde PATCH'e izin verir).
`1. 4. x '1'deki herhangi bir yama. 4.
Tam pin: '1. 4. 2`.

5. 2 Python (PEP 440, pip)

`~=1. 4. 2` ≈ `>=1. 4. 2,==1. 4.`.
`>=1. 4,<2. 0 '- açık sınırlar.

5. 3 Maven/Gradle (Java)

`[1. 4,2. 0) '- kapsayıcı/özel.
Gıda açısından kritik eserler için sıkı tekme önerilir.

5. 4 Go modülleri

Her zaman 'vMAJOR' etiketlerini tamamlayın. MINÖR. PATCH ';' v2 + 'modül soneki'/v2' gerektirir.

Öneri: uygulamalar için - tam pimler (tekrarlanabilir yapılar). Kütüphaneler için - bakım aralıkları (kırılmadan güncellemeleri kolaylaştırın).

6) CHANGELOG и Konvansiyonel Taahhütler

Yapılandırılmış değişiklik günlüğü saydamlığı artırır.

Konvansiyonel taahhütler:

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', 'angarya' и т. д.
Bir ünlem işareti veya 'BREAKING CHANGE' bloğu MAJOR ilan eder.
CHANGELOG, taahhütlerin tarihinden (botlar tarafından serbest bırakma notları) üretilir.

7) API için sürüm politikası

Genel API'ler: sıkı SemVer; Breaking MAJOR.
HTTP/REST: URL/header ile sürüm oluşturma:'/v1/... ','/v2/...' veya 'Accept: application/vnd. org. hizmet. V2 + json '.
JSON şemaları: küçük uzantılar - yeni isteğe bağlı alanlar; major - sil/değiştir zorunlu.
gRPC/Protobuf: yeni numaralarla yeni alanlar ekleyin; Kullanımdan kaldırmayı silen alan numaralarını yeniden kullanmayın - mevcut olanları kırmayın.

8) Veri ve geçiş planları

Veritabanı geçişleri app @ 1 sürümleriyle senkronize edilir. 8. 0 'schema @ 1 gerektirir. 8. x '.
Şema değişikliklerini kırmak için - aşamalar: genişlet (ekle), taşı, sözleşme (sil). Yalnızca eski sözleşmeyi sildiğinizde MAJOR'a yükseltin.
Geçiş süresince çift yazma/okuma desteği.

9) Monorepos ve mikro hizmetler

Çoklu paket: Her paketin kendi 'MAJOR'u vardır. MINÖR. YAMA '; Yalnızca meta eserler için ortak kök serbest bırakma döngüsü.

Çeşitlilik stratejileri:
  • Bağımsız sürümler (Lerna/Changesets) - izolasyonu artırır.
  • Kilit adımı - daha kolay iletişim, ancak daha yanlış MAJORS.
  • Mikro hizmetler için, sözleşmeleri (OpenAPI/Protobuf) ayrı bir sürümle düzeltin: 'contract @ 2. 1. 0 ', servis onu takip ediyor.

10) CI/CD'deki sürümlerin otomasyonu

Konvansiyonel Taahhütlere dayalı versiyonun otomatik hesaplanması:
  • 'mix' - 'PATCH', 'feat' - 'MINOR', '!'/' BREAKING' - 'MAJOR'.
Autotegs ve artifact 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 üretimi, yayın notları yayınlama, GitOps repo'daki bağımlılıkları güncelleme,'ana'nın her zaman son kararlı etikete işaret ettiğini kontrol etme.

11) Yoksunluk politikası

Duyuru: MINOR sürümünde kullanımdan kaldırılan işlevselliği işaretleyin, EOL terimi verin (örn. 90 gün).
Gözlemlenebilirlik: Eski uç noktaların kullanımını kullanıcı/kiracı bağlamında kaydedin.
Silme: aşağıdaki MAJOR'da. Geçiş yolunu belgeleyin.

12) Örnekler ve şablonlar

12. 1 Düzenli SemVer doğrulama ifadesi

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 Karşılaştırma örnekleri

`1. 2. 3` < `1. 10. 0 '(MINOR karşılaştırma).
`2. 0. 0-rc. 1` < `2. 0. 0`.
`1. 2. 3 + yapı. 5` == `1. 2. 3`.

12. 3 Bağımlılık politikası (YAML örneği)

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-desenler

Prod'daki'en son'/kayan etiketleri kullanma.
Gerçek arızalar olmadan BÜYÜK geliştirme ("pazarlama sürümleri").
'PATCH' kisvesi altında gizli kırılma değişiklikleri.
Üretim uygulamalarının geçişli bağımlılıklarında ön sürümler.
Nesneyi yeni bir etiket (değiştirilebilir sürümler) olmadan değiştirin.
Tutarsız kod sürümleri ve veritabanı şemaları.

14) Uygulama kontrol listesi (0-45 gün)

0-10 gün

SemVer'i zorunlu bir standart olarak kabul edin, kırma kriterlerini onaylayın.
Konvansiyonel Taahhütler ve 'BREAKING CHANGE' alanına sahip bir PR şablonu ekleyin.

11-25 gün

Anlamsal-serbest bırakma/değiştirme kümelerini bağlayın, CHANGELOG otojenerasyon.
Yapıtların imzalanmasını ve yayınlanmasını vX etiketine karşı yapılandırın. Y.Z '.

26-45 gün

Eski API kullanımı için kullanımdan kaldırma politikasını ve telemetrisini girin.
Sözleşme sürümlerini (OpenAPI/Proto) ve hizmetleri senkronize edin.
Politika düzeyinde'en son've değiştirilebilir etiketleri yasaklayın (OPA/CI düzenlemeleri).

15) Olgunluk metrikleri

Yalnızca SemVer etiketiyle yayınlanan eserlerin %'si.
MINOR sürümleri arasında ortalama geçiş süresi.
Gizli kırılma değişikliklerinden kaynaklanan olay sayısı.
Depolarda Konvansiyonel Taahhütlerin Kapsamı (> %95).
Üründe kayan aralık olmayan bağımlılıkların oranı (> %90).

16) SemVer'e ihtiyaç duyulmadığında

Dış tüketiciler olmadan dahili hızlı prototipler (tarihli sürümler uygundur).
Deneysel özelliklere sahip veri/modeller (dönüştürücü düzeyinde uyumluluk ile daha iyi Model/Şema Sürümleri).
Kararlı bir genel API olmadan içerik paketleri.

17) Sonuç

SemVer, üretici ve tüketici arasındaki bir güven sözleşmesidir. Uyumluluğu neyin bozduğunu açıkça tanımlayın, sürüm tipi tanıma ve eser yayınlamayı otomatikleştirin, şeffaf bir CHANGELOG'u koruyun ve yoksunluk politikalarına uyun. Daha sonra güncellemeler rutin, öngörülebilir ve güvenli hale gelecek ve altyapı ve API'ler işletmeye şok vermeden gelişecektir.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.