Bazel kayıt otoriteleri

Bzlmod, Bazel kayıtlarından (Bazel modüllerinin veritabanları) bilgi isteyerek bağımlılıkları keşfeder. Bzlmod şu anda yalnızca belirli bir biçime uyan dizin kayıtlarını (yerel dizinler veya statik HTTP sunucuları) desteklemektedir.

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 alınacağı dahil) içeren yerel bir dizin veya statik bir HTTP sunucusudur. Özellikle, kaynak arşivlerin kendisini sunması gerekmez.

Dizin kaydı aşağıdaki biçimde olmalıdır:

  • /bazel_registry.json: Kayıt defteri için meta veriler içeren bir JSON dosyası örneği:
    • mirrors: Kaynak arşivler için kullanılacak yansıtma listesini belirtme 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_repository türündeki modüller için temel yolu belirtme
  • /modules: Bu kayıt defterindeki her modül için bir alt dizin içeren bir dizin
  • /modules/$MODULE: Bu modülün her sürümü için bir alt dizin içeren bir dizin ve:
    • metadata.json: Modülle ilgili bilgileri içeren bir JSON dosyası. Aşağıdaki alanları içerir:
      • homepage: Projenin ana sayfasının URL'si
      • maintainers: Her biri kayıt defterindeki modülün bakım sorumlusunun bilgilerine karşılık gelen JSON nesnelerinin listesi. Bunun, projenin yazarlarıyla aynı olması gerekmediğini unutmayın.
      • versions: Bu kayıt defterinde bulunacak bu modülün tüm sürümlerinin listesi
      • yanked_versions: Bu modülün kaldırılmış sürümlerinin haritası. Anahtarlar, geri çekilecek sürümler olmalı ve değerler, sürümün neden geri çekildiğine dair açıklamalar içermelidir. İdeal olarak, daha fazla bilgiye bağlantı da eklenmelidir.
  • /modules/$MODULE/$VERSION: Aşağıdaki dosyaları içeren bir dizin:
    • MODULE.bazel: Bu modül sürümünün MODULE.bazel dosyası
    • source.json: Bu modül sürümünün kaynağının nasıl getirileceğiyle ilgili bilgileri içeren bir JSON dosyası
      • Varsayılan tür, aşağıdaki alanları içeren bir http_archive deposunu temsil eden "archive"dır:
        • url: Kaynak arşivin URL'si
        • integrity: Arşivin Subresource Integrity sağlama toplamı
        • strip_prefix: Kaynak arşivi çıkarılırken kaldırılacak bir dizin öneki
        • patches: Ayıklanan arşive uygulanacak yama dosyalarını içeren bir harita. 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.
        • patch_strip: Unix patch'ın --strip bağımsız değişkeniyle aynıdır.
        • archive_type: İndirilen dosyanın arşiv türü (http_archive üzerindeki type ile aynı). Varsayılan olarak, arşiv türü URL'nin dosya uzantısından belirlenir. Uzantısı olmayan dosyalar için aşağıdakilerden birini açıkça belirtebilirsiniz: "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", "tar.zst", "tzst", tar.bz2, "ar" veya "deb".
      • Tür, aşağıdaki alanlarla birlikte bir Git deposu kullanacak şekilde değiştirilebilir:
        • type: git_repository
        • https://bazel.build/rules/lib/repo/git adresinde açıklanan aşağıdaki alanlar:
          • remote
          • commit
          • shallow_since
          • tag
          • init_submodules
          • verbose
          • strip_prefix
      • Tür, aşağıdaki alanlarla birlikte local_repository deposunu temsil eden yerel bir yol kullanacak şekilde değiştirilebilir:
        • type: local_path
        • path: Deponun yerel yolu. Aşağıdaki şekilde 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.
          • path ve module_base_path göreli yollarsa <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.
    • patches/: Yalnızca source.json "archive" türüne sahip olduğunda kullanılan, yama dosyalarını içeren isteğe bağlı bir dizin

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][subresource-integrity] sağlama 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 uygulanır.
    • patch_strip: Bir sayı; Unix'in --strip bağımsız değişkeniyle aynıdır. patch.
    • archive_type: İndirilen dosyanın arşiv türü olan bir dize (http_archive üzerindeki type ile aynıdır).
  • type, git_repository ise bu modül sürümü git_repository depo kuralıyla desteklenir. Bu sürüm, 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 ve yerel diskteki bir dizine sembolik olarak bağlanır. Aşağıdaki alanı destekler:
    • path: Deponun yerel yolu. Aşağıdaki şekilde 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.
      • path ve module_base_path göreli yollarsa <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.

Normal bir dizin kaydının biçimine uymanın yanı sıra BCR, her modül sürümü için bir presubmit.yml dosyası 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 hedefi 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 (örneğin, bazelbuild/bazel-central-registry'nın bir çatalı olarak) --registry değeriniz raw.githubusercontent.com altında ham bir GitHub adresi gerektirir. Örneğin, my-org çatalının main dalında --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.