Kural Uyumluluğu

Bazel Starlark kuralları, aşağıdaki iki senaryoda Bazel LTS sürümleriyle uyumluluğu bozabilir:

  1. Kural, bağlı olduğu bir özellik HEAD'de Bazel'den kaldırıldığı için gelecekteki LTS sürümleriyle uyumluluğu bozar.
  2. Kural, bağlı olduğu bir özellik yalnızca daha yeni Bazel LTS sürümlerinde kullanılabildiği için 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 Bazel kullanıcıları için genellikle hayal kırıklığına neden olabilir. Bu sayfada, kural yazarlarının kullanıcıların Bazel ve kuralları yükseltmesini 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, geçiş sürecinin Bazel kullanıcıları için yönetilebilir olmasını sağlamaktır. Yönetilebilir taşıma süreci, kullanıcıların kuralın ana sürümünü ve Bazel'in ana sürümünü aynı anda yükseltmeye zorlanmadığı, böylece kullanıcıların uyumsuz değişiklikleri tek bir kaynaktan birer birer ele almasına olanak tanıyan bir süreç olarak tanımlanır.

Ö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:

  1. Kural, anlamsal sürüm oluşturma yöntemine uygun olmalıdır: Aynı ana sürümün alt sürümleri geriye dönük olarak uyumludur.
  2. HEAD'deki kural, en son Bazel LTS sürümüyle uyumlu olmalıdır.
  3. HEAD'deki kural, HEAD'deki Bazel ile uyumlu olmalıdır. Bunu yapmak için
  4. Kuralın en son ana sürümü, en son Bazel LTS sürümüyle uyumlu olmalıdır.
  5. 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.

2. ve 3. hedeflere ulaşmak, 4. ve 5. hedeflere ulaşmayı sağladığı için 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şınabilir ve en son Bazel LTS sürümüyle uyumluluğu kaybetmeden HEAD'deki yeni Bazel özelliklerinden yararlanabilir.