Semantik Versiyonlama (SemVer): Sürüm Numarası Ne Anlatır?
Semantik versiyonlamanın ne olduğunu, BÜYÜK.KÜÇÜK.YAMA sürüm numaralarının nasıl artırıldığını ve commit standardıyla otomasyonunu öğrenin.
Semantik versiyonlama nedir?
Semantik versiyonlama, sürüm numarasına anlam yükleyen bir sözleşmedir. Numara rastgele ya da pazarlama amaçlı verilmez; her parçası değişikliğin türünü söyler. Böylece bir kütüphaneyi kullanan geliştirici, yeni sürüme baktığında güncellemenin güvenli olup olmadığını numaradan çıkarabilir.
Standardın resmî tanımı semver.org adresinde yayımlanır ve Türkçe çevirisi de bulunur. Sözleşme, bir API'nin açıkça tanımlanmış olmasını varsayar: neyin uyumsuz değişiklik sayılacağı, o API'ye göre belirlenir.
Numara nasıl okunur?
Sürüm numarası BÜYÜK.KÜÇÜK.YAMA biçimindedir:
- BÜYÜK: Önceki sürümle uyumsuz bir API değişikliği yapıldığında artırılır. Bu durumda KÜÇÜK ve YAMA sıfırlanır.
- KÜÇÜK: Geriye dönük uyumlu yeni bir işlev eklendiğinde ya da bir işlev kullanımdan kaldırılmak üzere işaretlendiğinde artırılır. YAMA sıfırlanır.
- YAMA: Önceki sürümle uyumlu hata düzeltmelerinde artırılır.
Ön sürümler yama numarasından sonra tire ve bir etiketle belirtilir (örneğin alfa ya da beta etiketi). Bunlar kararsız sürümlerdir ve ilgili normal sürümden önce gelir. Derleme bilgisi ise artı işaretiyle eklenir ve sürüm önceliğini etkilemez.
Küçük bir örnek
Örneğin bir tarih biçimlendirme kütüphanesi düşünelim. Geliştirici yalnızca belirli bir ayda yanlış sonuç veren hatayı düzeltirse YAMA numarasını artırır. Yeni bir biçimlendirme seçeneği eklerse, mevcut kullanımlar bozulmadığı için KÜÇÜK numarayı artırır ve YAMA sıfırlanır. Mevcut bir fonksiyonun adını ya da davranışını değiştirirse, eski kodlar çalışmayabileceğinden BÜYÜK numarayı artırır ve diğer ikisi sıfırlanır.
Kütüphaneyi kullanan ekip, güncelleme politikasını buna göre kurar: yama ve küçük güncellemeleri otomatik alır, büyük güncellemeleri ise inceleyip test ettikten sonra uygular.
Sıfırlı ilk geliştirme sürümleri
Sürüm numarasının büyük bileşeni sıfır olan sürümler ilk geliştirme aşamasını gösterir. Bu aşamada API her an değişebilir ve kararlılık güvencesi yoktur. Kütüphane kararlı hale geldiğinde ve kullanıcılar buna güvenmeye başladığında ilk büyük sürüm yayınlanır.
Bu kuralın pratik sonucu şudur: sıfırlı sürümleri kullanıyorsanız her güncellemeyi olası uyumsuzluk olarak ele alın.
Commit standardı ve sürüm otomasyonu
Semantik versiyonlama, değişikliklerin türünü kayıt altına alan bir commit standardıyla birleştirildiğinde otomatikleştirilebilir. Conventional Commits gibi bir sözleşmede commit mesajı değişikliğin türünü (hata düzeltmesi, yeni özellik, uyumsuz değişiklik) belirtir. Bir sürüm otomasyon aracı bu mesajları okuyup yeni sürüm numarasını belirler, değişiklik günlüğünü üretir ve sürümü yayınlar.
Böyle bir akışta insanlar sürüm numarasını tartışmaz; kural net olduğu için numara commit geçmişinden türer. Bu, yayın sürecini hızlandırır ve tutarlı kılar.
Sınırlar ve nasıl öğrenilir?
SemVer'in sınırı, uyumsuzluğun ne olduğuna insanın karar vermesidir. Davranışsal bir değişikliğin uyumsuz sayılıp sayılmayacağı bazen tartışmalıdır. Sözleşme ancak ekip API'sini açıkça tanımladığında ve sözleşmeye gerçekten uyduğunda işe yarar. Her projede tam uygun da değildir: tarih tabanlı sürümleme, sürekli yayınlanan uygulamalarda daha doğal bir seçenek olabilir.
Mindset kataloğundaki Yayın Yönetimi ve Sürüm Otomasyonu (Semantic Release) programının modül başlıkları sürümleme sözleşmesi ve commit standardı, semantic-release ile yayın otomasyonu, yayın kanalları, doğrulama ve geri almayı kapsar.
İlgili Mindset programı
Yayın Yönetimi ve Sürüm Otomasyonu (Semantic Release)
Sık sorulan sorular
SemVer'de büyük sürüm ne zaman artırılır?
Önceki sürümle uyumsuz bir API değişikliği yapıldığında. Bu durumda küçük ve yama numaraları sıfırlanır. Büyük sürüm artışı, kullanıcıya güncellemeden önce değişiklik günlüğünü okuması ve kodunu uyarlaması gerektiğini haber veren bir işarettir.
Ön sürüm (pre-release) etiketi ne işe yarar?
Henüz kararlı olmayan sürümleri işaretler; örneğin yama numarasından sonra tire ile eklenen alfa ya da beta etiketi. Ön sürümler, ilgili normal sürümden önce sıralanır. Kullanıcıya bu sürümün riskli olabileceğini ve üretimde dikkatli kullanılması gerektiğini bildirir.
Semantik versiyonlama her proje için uygun mu?
Kütüphane ve API gibi başkalarının bağımlı olduğu ürünlerde çok uygundur. Sürekli yayınlanan son kullanıcı uygulamalarında ise sürüm numarası kullanıcı için anlam taşımayabilir ve tarih ya da yapı numarası tabanlı yöntemler daha pratik olabilir. Seçim, ürünü kimin ve nasıl tükettiğine bağlıdır.
Sürüm numarası otomatik üretilebilir mi?
Evet. Commit mesajları belirli bir standarda göre yazılırsa, bir sürüm otomasyon aracı bunları okuyarak uygun numarayı belirler, değişiklik günlüğünü üretir ve yayını yapar. Bu yaklaşım insan hatasını azaltır, ama commit standardına disiplinli uyumu gerektirir.