Karmaşık kurumsal platform düzeyinde bağımlılık yönetimi ve sürüm sürümü oluşturma konusundaki deneyimlerime dayanarak Yarı Semantik Sürüm Oluşturma adını vermeyi düşündüğüm bir yaklaşım önermeye geldim .
Temel olarak Semantic Versioning 2.0'dan oluşur, ancak o kadar da katı değildir.
Yarı Semantik Versiyon Segmentleri:
<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]
Birincil Sürüm Segment Biçimi:
MARKETTING.MAJOR.MINOR.PATCH
Her bölüm alfasayısallara izin vermelidir, ancak mantıksal artımlı değişiklikler için saf sayısallar önerilir.
SemVer gibi, Major, Minor ve Patch bileşenlerini ters uyumluluk katmanlarını temsil etmelerini öneriyorum, ancak bir Marketing bileşenini de eklemenizi tavsiye ediyorum . Bu, ürün sahiplerinin, özellik destanlarının / gruplarının ve ticari kaygıların, teknik uyumluluk kaygılarından bağımsız olarak birincil bileşeni çarpmasına izin verir.
Diğer yanıtların aksine, birincil segmente bir Yapı numarası eklemenizi önermiyorum. Bunun yerine, bir '+' işaretinin ardından Yayın Sonrası Segment ekleyin (ör: 1.1.0.0 + derleme.42). SemVer bu derleme meta verilerini çağırıyor, ancak Post-Release Segment'in daha net olduğunu düşünüyorum. Bu segment, son Sürüm verilerini birincil Sürüm Segmentindeki uyumluluk bilgileriyle ilgili olmadığı bildirmek için mükemmeldir. Daha sonra sürekli entegrasyon derlemelerinize, her bir birincil sürümden sonra sıfırlanan artımlı bir derleme numarası eklenmiş önceki sürüm numarası verilebilir (ör: 1.1.0.0 -> 1.1.0.0 + derleme 1 -> 1.1.0.0 + derleme 2 -> 1.1.0.1). Bazı insanlar dönüşümlü olarak svn revizyon numarasını veya git deposunu kod deposuna bağlamayı kolaylaştırmak için koymak isterler. Başka bir seçenek, düzeltmeler ve düzeltme ekleri için sürüm sonrası segmentini kullanmaktır, bunun için yeni bir birincil sürüm bileşeni eklemeye değer olabilir. Yama bileşeni artırıldığında her zaman bırakılabilir, çünkü sürümler etkili bir şekilde sola hizalanır ve sıralanır.
Serbest bırakma ve serbest bırakma bölümlerine ek olarak, insanlar genellikle alfalar, betalar ve serbest bırakma adayları gibi neredeyse istikrarlı ön sürümleri belirtmek için bir Ön Sürüm Segmenti kullanmak isterler. SemVer yaklaşımı iyi çalışır, ancak sayısal bileşenleri alfa-sayısal sınıflandırıcılardan ayırmanızı öneririm (örn: 1.2.0.0 + alpha.2 veya 1.2.0.0 + RC.2). Normalde, serbest bırakma segmentini serbest bırakma sonrası segmentini eklerken aynı anda çarptıracak ve daha sonra bir sonraki serbest bırakma segmentini çarptığınızda serbest bırakma segmentini bırakacaksınız (ör: 1.0.1.2 -> 1.2.0.0-RC.1 - > 1.2.0.0). Sürüm öncesi segmentler, sürüm sürümünün geldiğini belirtmek için eklenir; genellikle, daha fazla işleme bağlı olarak dakikadan dakikaya değişmeyen daha ayrıntılı test ve paylaşım için yalnızca sabit bir özellik grubu.
Bunların hepsini semantik olarak neredeyse tüm kullanım durumlarını kapsayacak şekilde tanımlamanın güzelliği, bunları standart bir şekilde ayrıştırabilir, sıralayabilir, karşılaştırabilir ve artırabilirsiniz. Bu, özellikle her biri kendi yönetilen bağımlılıklarına sahip bağımsız olarak küçük çok sayıda bileşen (mikro hizmetler gibi) içeren karmaşık uygulamalar için CI sistemleri kullanıldığında özellikle önemlidir.
Eğer ilgileniyorsanız, Ruby'de yarı-anlamsal bir ayrıştırıcı yazdım . Sadece bu kalıbı kullanmam gerekiyordu, aynı zamanda onu kullanan diğer uygulamaları da yönetebilmeliydim.