Bazel Starlark kuralları, aşağıdaki iki senaryoda Bazel LTS sürümleriyle uyumluluğu bozabilir:
- Kural, bağlı olduğu bir özellik HEAD'de Bazel'den kaldırıldığı için gelecekteki LTS sürümleriyle uyumluluğu bozar.
- Kural, bağlı olduğu bir özellik yalnızca daha yeni Bazel LTS sürümlerinde kullanılabildiğinden mevcut veya eski LTS sürümleriyle uyumluluğu bozuyor.
Bu arada, kuralın kendisi de kullanıcıları için uyumsuz değişiklikler gönderebilir. Kural sürümünün ve Bazel sürümünün yükseltilmesi, Bazel'deki önemli değişikliklerle birleştiğinde genellikle Bazel kullanıcıları için hayal kırıklığına neden olabilir. Bu sayfada, kural yazarlarının Bazel'i ve kuralları yükseltmelerini kolaylaştırmak için kuralların Bazel ile uyumluluğunu nasıl koruması gerektiği açıklanmaktadır.
Yönetilebilir taşıma süreci
Bazel'in her sürümü ile kuralın her sürümü arasında uyumluluk garantisi vermenin mümkün olmadığı açıkça görülse de amacımız, Bazel kullanıcıları için geçiş sürecinin yönetilebilir olmasını sağlamaktır. Yönetilebilir taşıma işlemi, kullanıcıların kuralın ana sürümünü ve Bazel'in ana sürümünü aynı anda yükseltmeye zorlanmadığı bir işlem olarak tanımlanır. Bu sayede, kullanıcılar tek bir kaynaktan gelen uyumsuz değişiklikleri birer birer ele alabilir.
Örneğin, aşağıdaki uyumluluk matrisiyle:
- Kullanıcıların rules_foo ve Bazel'in ana sürümünü aynı anda yükseltmesi gerektiğinden rules_foo 1.x + Bazel 4.x'ten rules_foo 2.x + Bazel 5.x'e geçiş yönetilebilir olarak kabul edilmez.
- Kullanıcılar önce Bazel'in ana sürümünü değiştirmeden rules_foo'yu 2.x'ten 3.x'e yükseltebilir, ardından Bazel'i 5.x'ten 6.x'e yükseltebilir. Bu nedenle, rules_foo 2.x + Bazel 5.x'ten rules_foo 3.x + Bazel 6.x'e geçişin yönetilebilir olduğu düşünülmektedir.
rules_foo 1.x | rules_foo 2.x | rules_foo 3.x | HEAD | |
---|---|---|---|---|
Bazel 4.x | ✅ | ❌ | ❌ | ❌ |
Bazel 5.x | ❌ | ✅ | ✅ | ❌ |
Bazel 6.x | ❌ | ❌ | ✅ | ✅ |
HEAD | ❌ | ❌ | ❌ | ✅ |
❌: Ana kural sürümünün hiçbir sürümü Bazel LTS sürümüyle uyumlu değil.
✅: Kuralın en az bir sürümü, Bazel LTS sürümünün en son sürümüyle uyumludur.
En iyi uygulamalar
Bazel kurallarının yazarları olarak, aşağıdaki en iyi uygulamaları izleyerek kullanıcılar için yönetilebilir bir taşıma süreci sağlayabilirsiniz:
- Kural, anlamsal sürüm oluşturma ilkesine uygun olmalıdır: Aynı ana sürümün alt sürümleri geriye dönük olarak uyumludur.
- HEAD'deki kural, en son Bazel LTS sürümüyle uyumlu olmalıdır.
- HEAD'deki kural, HEAD'deki Bazel ile uyumlu olmalıdır. Bunu yapmak için
şunları yapabilirsiniz:
- HEAD'de Bazel ile kendi CI testinizi ayarlama
- Projenizi Bazel downstream testine ekleyin. Bazel'deki değişiklikler projenizi etkilerse Bazel ekibi projenizle ilgili sorunları bildirir. Sorunları zamanında çözmek için downstream proje politikalarımıza uymanız gerekir.
- Kuralın en son ana sürümü, en son Bazel LTS sürümüyle uyumlu olmalıdır.
- Kuralın yeni bir ana sürümü, kuralın önceki ana sürümü tarafından desteklenen son Bazel LTS sürümüyle uyumlu olmalıdır.
4. ve 5. adımların gerçekleştirilmesini sağladığı için 2. ve 3. adımların tamamlanması en önemli görevdir. doğal olarak.
Kuralları yazanlar, hem HEAD'deki Bazel hem de en son Bazel LTS sürümüyle uyumluluğu korumak için şunları yapabilir:
- Geriye dönük uyumlu özelliklerin en son LTS sürümüne geri aktarılmasını isteyin. Daha fazla bilgi için sürüm sürecine göz atın.
- Bazel özelliklerini algılamak için bazel_features'ı kullanın.
Genel olarak, önerilen yaklaşımlarla kurallar, Bazel ile uyumlu olmayan değişiklikler için taşınabilmeli ve en son Bazel LTS sürümüyle uyumluluğu kaybetmeden HEAD'de yeni Bazel özelliklerinden yararlanabilmelidir.