Bazel kayıt otoriteleri

Bazel, bağımlılıkların bilgilerini Bazel kayıtlarından (Bazel modüllerinin veritabanları) isteyerek bağımlılıkları keşfeder. Bazel yalnızca bir kayıt türünü (dizin kayıtları) destekler. Bunlar, belirli bir biçime uyan yerel dizinler veya statik HTTP sunucularıdır.

Dizin kaydı

Dizin kayıt defteri, bir modül listesiyle ilgili bilgileri (ana sayfaları, bakımcıları, her sürümün MODULE.bazel dosyası ve her sürümün kaynağının nasıl getirileceği dahil) içeren yerel bir dizin veya statik bir HTTP sunucusudur. Özellikle, kaynak arşivlerin kendisini sunması gerekmez.

Dizin kaydı şu biçimde olmalıdır:

  • /bazel_registry.json: Kayıt defterinin meta verilerini içeren isteğe bağlı bir JSON dosyası.
  • /modules: Bu kayıt defterindeki her modül için bir alt dizin içeren bir dizin
  • /modules/$MODULE: $MODULE adlı modülün her sürümü için bir alt dizin ve bu modülün meta verilerini içeren metadata.json dosyası içeren bir dizin.
  • /modules/$MODULE/$VERSION: Aşağıdaki dosyaları içeren bir dizin:
    • MODULE.bazel: Bu modül sürümünün MODULE.bazel dosyası. Bunun, Bazel'in harici bağımlılık çözümlemesi sırasında okunan MODULE.bazel dosyası olduğunu, kaynak arşivdeki dosya olmadığını (kayıt dışı bir geçersiz kılma olmadığı sürece) unutmayın. Ayrıca, sürümün versiyonunu ayarlamak için bu dosyayı kullanmanın ve kaynak arşiv MODULE.bazel dosyasında bu işlemi yapmaktan kaçınmanın en iyi yöntem olduğunu unutmayın. Modül sürümü oluşturma hakkında daha fazla bilgi edinmek için SSS bölümüne bakın.
    • source.json: Bu modül sürümünün kaynağının nasıl getirileceğiyle ilgili bilgileri içeren bir JSON dosyası
    • patches/: Yama dosyalarını içeren isteğe bağlı bir dizin. Yalnızca source.json "archive" türüne sahip olduğunda kullanılır.
    • overlay/: Yer paylaşımı dosyalarını içeren isteğe bağlı bir dizin. Yalnızca source.json "archive" türüne sahip olduğunda kullanılır.

bazel_registry.json

bazel_registry.json, kayıt defterinin tamamı için geçerli olan meta verileri belirten isteğe bağlı bir dosyadır. Aşağıdaki alanları içerebilir:

  • mirrors: Kaynak arşivler için kullanılacak yansıtma listesini belirten bir dizi dize.
    • Yansıtılan URL, yansıtmanın kendisi ile protokol hariç source.json dosyası tarafından belirtilen modülün kaynak URL'sinin birleştirilmesidir. Örneğin, bir modülün kaynak URL'si https://foo.com/bar/baz ise ve mirrors, ["https://mirror1.com/", "https://example.com/mirror2/"] içeriyorsa Bazel'in sırayla deneyeceği URL'ler https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz ve son olarak orijinal kaynak URL'nin kendisi https://foo.com/bar/baz olur.
  • module_base_path: source.json dosyasında local_path türündeki modüllerin temel yolunu belirten bir dize

metadata.json

metadata.json, aşağıdaki alanları içeren ve modül hakkında bilgi barındıran isteğe bağlı bir JSON dosyasıdır:

  • versions: Her biri bu kayıt defterinde bulunan modülün bir sürümünü belirten bir dizi dize. Bu dizi, modül dizininin alt öğeleriyle eşleşmelidir.
  • yanked_versions: Bu modülün yanked sürümlerini belirten bir JSON nesnesi. Anahtarlar, kaldırılacak sürümler olmalı, değerler ise sürümün neden kaldırıldığına dair açıklamalar olmalıdır. İdeal olarak, daha fazla bilgiye bağlantı içermelidir.

BCR'nin metadata.json dosyasında daha fazla bilgi gerektirdiğini unutmayın.

source.json

source.json, bir modülün belirli bir sürümünün nasıl getirileceği hakkında bilgi içeren zorunlu bir JSON dosyasıdır. Bu dosyanın şeması, varsayılan olarak archive olan type alanına bağlıdır.

  • type archive (varsayılan) ise bu modül sürümü bir http_archive depo kuralıyla desteklenir. Belirli bir URL'den arşiv indirilip içeriği çıkarılarak getirilir. Aşağıdaki alanları destekler:
    • url: Kaynak arşivin URL'si olan bir dize
    • mirror_urls: Kaynak arşivin yansıtma URL'lerinin bulunduğu bir dize listesi. URL'ler, url sonrasında yedek olarak sırayla denenir.
    • integrity: Arşivin Subresource Integrity denetim toplamı olan bir dize
    • strip_prefix: Kaynak arşivi çıkarılırken kaldırılacak dizin öneki dizesi
    • overlay: Çıkarılan arşivin üzerine katman oluşturmak için yer paylaşımı dosyalarını içeren bir JSON nesnesi. Yama dosyaları /modules/$MODULE/$VERSION/overlay dizininde bulunur. Anahtarlar, yer paylaşımı dosyalarının adları, değerler ise yer paylaşımı dosyalarının bütünlük sağlama değeridir. Yer paylaşımları, yama dosyalarından önce uygulanır.
    • patches: Çıkarılan arşive uygulanacak yama dosyalarını içeren bir JSON nesnesi. Yama dosyaları /modules/$MODULE/$VERSION/patches dizininde bulunur. Anahtarlar yama dosyası adları, değerler ise yama dosyalarının bütünlük sağlama toplamıdır. Yamalar, yer paylaşımı dosyalarından sonra ve patches içinde göründükleri sırayla uygulanır.
    • patch_strip: Bir sayı; Unix patch öğesinin --strip bağımsız değişkeniyle aynıdır.
    • archive_type: İndirilen dosyanın arşiv türünü belirten bir dize (http_archive üzerindeki type ile aynıdır).
  • type git_repository ise bu modül sürümü bir git_repository depo kuralı tarafından desteklenir ve Git deposu klonlanarak getirilir.
    • Aşağıdaki alanlar desteklenir ve doğrudan temel git_repository depo kuralına yönlendirilir: remote, commit, shallow_since, tag, init_submodules, verbose ve strip_prefix.
  • type local_path ise bu modül sürümü bir local_repository depo kuralıyla desteklenir; yerel diskteki bir dizine sembolik olarak bağlanır. Aşağıdaki alanı destekler:
    • path: Deponun yerel yolu, aşağıdaki gibi hesaplanır:
      • path mutlak bir yol ise olduğu gibi kalır.
      • path göreli bir yol ve module_base_path mutlak bir yol ise <module_base_path>/<path> olarak çözümlenir.
      • Hem path hem de module_base_path göreli yolsa <registry_path>/<module_base_path>/<path> olarak çözümlenir. Kayıt defteri yerel olarak barındırılmalı ve --registry=file://<registry_path> tarafından kullanılmalıdır. Aksi takdirde Bazel hata verir.

Bazel Central Registry

https://bcr.bazel.build/ adresindeki Bazel Central Registry (BCR), bazelbuild/bazel-central-registry GitHub deposu tarafından desteklenen içeriklere sahip bir dizin kayıt defteridir. İçeriklerine https://registry.bazel.build/ adresindeki web ön ucu üzerinden göz atabilirsiniz.

BCR, Bazel topluluğu tarafından yönetilir ve katkıda bulunanlar çekme istekleri gönderebilir. BCR katkı yönergelerini inceleyin.

BCR, normal bir dizin kaydının biçimine uymanın yanı sıra her modül sürümü için bir presubmit.yml dosyası da gerektirir (/modules/$MODULE/$VERSION/presubmit.yml). Bu dosya, bu modül sürümünün geçerliliğini kontrol etmek için kullanabileceğiniz birkaç temel derleme ve test hedefini belirtir. BCR'nin CI işlem hatları, modüller arasında birlikte çalışabilirliği sağlamak için de bu özelliği kullanır.

Kayıtları seçme

Modül isteğinde bulunulacak kayıt listesini belirtmek için tekrarlanabilir Bazel işareti --registry kullanılabilir. Böylece projenizi, bağımlılıkları üçüncü taraf veya dahili bir kayıt defterinden getirecek şekilde ayarlayabilirsiniz. Daha önceki kayıtlar önceliklidir. Kolaylık sağlaması için --registry işaretlerinin listesini projenizin .bazelrc dosyasına ekleyebilirsiniz.

Kayıt defteriniz GitHub'da barındırılıyorsa (ör. bazelbuild/bazel-central-registry'ın bir çatalı olarak) --registry değeriniz raw.githubusercontent.com altında ham bir GitHub adresi gerektirir. Örneğin, main dalında my-org çatalı için --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/ değerini ayarlarsınız.

--registry işaretini kullandığınızda Bazel Central Registry'nin varsayılan olarak kullanılması durdurulur ancak --registry=https://bcr.bazel.build ekleyerek bu özelliği tekrar ekleyebilirsiniz.