Kural Uyumluluğu

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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'deki Bazel'den kaldırıldığı için gelecekteki LTS sürümleriyle uyumluluğu bozar.
  2. Kural, bağımlı olduğu özellik yalnızca daha yeni Bazel LTS sürümlerinde kullanılabildiği için mevcut veya eski LTS sürümleriyle uyumluluğu bozar.

Bu sırada kuralın kendisi de kullanıcıları için uyumsuz değişiklikler gönderebilir. Bazel'deki önemli değişikliklerle birlikte kural sürümünü ve Bazel sürümünü yükseltmek, Bazel kullanıcıları için genellikle can sıkıcı olabilir. Bu sayfada, kural yazarlarının kullanıcıların Bazel ve kuralları yükseltmesini kolaylaştırmak için kural uyumluluğunu Bazel ile nasıl sağlaması gerektiği ele alınmaktadır.

Yönetilebilir taşıma süreci

Bazel'in her sürümü ile kuralın her sürümü arasında uyumluluğu garanti etmek mümkün olmasa da amacımız, taşıma sürecinin Bazel kullanıcıları için yönetilebilir kalmasını sağlamaktır. Yönetilebilir bir 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ığı, böylece kullanıcıların uyumsuz değişiklikleri tek bir kaynaktan tek seferde ele almasına olanak tanıyan bir işlem olarak tanımlanır.

Örneğin, aşağıdaki uyumluluk matrisinde:

  • 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şin yönetilebilir olduğu kabul edilmez.
  • Kullanıcılar önce Bazel ana sürümünü değiştirmeden rules_foo'yu 2.x sürümünden 3.x sürümüne, ardından Bazel'i 5.x sürümünden 6.x sürümüne yükseltebileceğinden, rules_foo 2.x + Bazel 5.x'ten rules_foo 3.x + Bazel 6.x'e geçişin yönetilebilir olduğu kabul edilir.
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ğildir.

✅: 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'ya uygun olmalıdır: Aynı büyük sürümün alt sürümleri geriye dönük 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. Bunun için şunu yapabilirsiniz:
  4. Kuralın en son büyük sürümü, en son Bazel LTS sürümüyle uyumlu olmalıdır.
  5. Kuralın yeni 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. hedeflere ulaşmanızı sağladığı için 2. ve 3. hedeflere ulaşmak en önemli görevdir. doğal olarak.

Hem HEAD'deki Bazel hem de en son Bazel LTS sürümü ile uyumluluğu korumayı kolaylaştırmak için kural yazarları şunları yapabilir:

  • Geriye dönük uyumlu özelliklerin en son LTS sürümüne geri taşınmasını isteyin. Daha fazla bilgi için sürüm sürecine göz atın.
  • Bazel özellik algılama için bazel_features parametresini 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.