Semantic Versioning
- Türkçe karşılığı
- anlamsal sürümleme, semantik versiyonlama
- Okunuşu
- simentik vörjıning
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Semantic versioning, her bölümün bir sürümün uyumluluğu bozduğunu, özellik eklediğini ya da hata düzelttiğini belirttiği MAJOR.MINOR.PATCH şemasıdır.
Semantic versioning nedir?
Sıklıkla SemVer olarak kısaltılan semantic versioning, yazılım sürümlerine anlam taşıyan sürüm numaraları verir. 2.4.1 gibi bir sürüm üç bölümden oluşur: major (ana) sürüm (2), minor (ara) sürüm (4) ve patch (yama) sürümü (1). Geliştiriciler yalnızca iki sürüm numarasını karşılaştırarak bir yükseltmenin ne kadar riskli olabileceğini anlayabilir.
Kurallar basittir. Geriye dönük uyumlu hata düzeltmeleri için patch numarasını, mevcut kodu bozmayan yeni özellikler için minor numarasını, kullanıcıların kodunu güncellemesini gerektirebilecek uyumsuz değişiklikler için major numarasını artırın. Üst bir bölüm arttığında alttaki bölümler sıfırlanır; yani 2.4.1'den sonra yeni bir özellik sürümü 2.5.0, uyumsuz bir sürüm ise 3.0.0 olur. 0.9.2 gibi 0 ile başlayan sürümler, her şeyin her an değişebileceği erken geliştirme aşamasını gösterir.
Semantic versioning, bir güncellemenin üzerindeki uyarı etiketi gibi çalışır: patch sessiz bir onarımdır, minor sürüm hiçbir şeyi yerinden oynatmadan yeni bir şey ekler, major sürüm ise bağımlı olduğunuz şeyleri yeniden düzenleyebilir. Paket yöneticileri buna büyük ölçüde güvenir. npm'in package.json dosyasında ^2.4.1 gibi bir aralık 2.4.1'den itibaren her 2.x sürümünü kabul ederken, ~2.4.1 yalnızca 2.4'ün daha yeni patch'lerini kabul eder; sürümler Git'te de çoğu zaman v2.4.1 gibi etiketlerle işaretlenir.
SemVer, araçların zorunlu kıldığı bir şey değil, insanların verdiği bir sözdür; dolayısıyla bir sürüm yine de yanlışlıkla bir şeyleri bozabilir. Ayrıca, Ubuntu gibi projelerin kullandığı (örneğin 24.04) ve sayıların uyumluluğu değil yayın tarihini yansıttığı takvim sürümlemesinden (calendar versioning) de farklıdır. Ön sürümler (pre-release), tireden sonra 3.0.0-beta.1 gibi bir etiket ekler ve nihai 3.0.0 sürümünden düşük kabul edilir.
Önemli noktalar
- Sürümler
2.4.1gibi MAJOR.MINOR.PATCH biçimini izler. - Uyumsuz değişiklikler için MAJOR, uyumlu yeni özellikler için MINOR, hata düzeltmeleri için PATCH artırılır.
- Üst numara arttığında alt numaralar sıfırlanır.
0.xsürümleri, genel API'nin henüz kararlı olmadığı anlamına gelir.- npm'deki
^ve~gibi aralıklar, hangi güncellemelerin güvenle yüklenebileceğine SemVer'e bakarak karar verir.
Örnek
# Mark a release in Git with a version tag
git tag -a v2.4.1 -m "Fix crash on empty cart"
git push origin v2.4.1
# Let npm bump the version in package.json and create the tag
npm version patch # 2.4.1 -> 2.4.2 (bug fix)
npm version minor # 2.4.2 -> 2.5.0 (new feature)
npm version major # 2.5.0 -> 3.0.0 (breaking change)
# How dependency ranges in package.json read:
# "^2.4.1" allows >=2.4.1 <3.0.0
# "~2.4.1" allows >=2.4.1 <2.5.0Sık sorulan sorular
Uyumsuz değişiklik (breaking change) nedir?
Uyumsuz değişiklik, yazılımı kullanan mevcut kodun çalışmaz hale gelmesine yol açabilecek her değişikliktir; örneğin bir fonksiyonu kaldırmak, bir seçeneği yeniden adlandırmak ya da bir fonksiyonun döndürdüğü değeri değiştirmek gibi. Semantic versioning'de uyumsuz bir değişiklik yeni bir major sürüm gerektirir.
package.json içindeki şapka (^) ne anlama gelir?
^2.4.1 gibi bir şapka aralığı, npm'in aynı major numarasına sahip sonraki her sürümü yüklemesine izin verir; yani 2.9.0 kabul edilir, 3.0.0 edilmez. 0.x sürümlerinde daha katıdır: ^0.4.1 yalnızca 0.4.x patch'lerine izin verir.
1.0.0 sürümü ne anlama gelir?
Semantic versioning'de 1.0.0, kararlı bir genel API'ye sahip ilk sürümdür. Ondan önce 0.x sürümleri ilk geliştirme içindir ve uyumsuz değişiklikler herhangi bir sürümde olabilir.
İlgili sayfalar
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- CommitSürüm Kontrolü, s. 5Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- MonorepoSürüm Kontrolü, s. 31Monorepo, uygulamalar, servisler ve paylaşılan kütüphaneler gibi birçok projenin kodunu birlikte yönetilen tek bir sürüm kontrol deposunda tutma yaklaşımıdır.
- Conventional CommitsSürüm Kontrolü, s. 6Conventional Commits, feat: add search gibi yapılandırılmış commit mesajları için bir şartnamedir; araçlar değişiklik günlüğü üretip sürümü otomatik seçer.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin