Registry Bazel

Bazel menemukan dependensi dengan meminta informasinya dari registri Bazel: database modul Bazel. Bazel hanya mendukung satu jenis registri — registri indeks — direktori lokal atau server HTTP statis yang mengikuti format tertentu.

Registry indeks

Registry indeks adalah direktori lokal atau server HTTP statis yang berisi informasi tentang daftar modul — termasuk halaman beranda, pengelola, file MODULE.bazel setiap versi, dan cara mengambil sumber setiap versi. Khususnya, tidak perlu menayangkan arsip sumber itu sendiri.

Registry indeks harus memiliki format berikut:

  • /bazel_registry.json: File JSON opsional yang berisi metadata untuk registri.
  • /modules: Direktori yang berisi subdirektori untuk setiap modul dalam registri ini
  • /modules/$MODULE: Direktori yang berisi subdirektori untuk setiap versi modul yang bernama $MODULE, serta file metadata.json yang berisi metadata untuk modul ini.
  • /modules/$MODULE/$VERSION: Direktori yang berisi file berikut:
    • MODULE.bazel: File MODULE.bazel dari versi modul ini. Perhatikan bahwa ini adalah file MODULE.bazel yang dibaca selama penyelesaian dependensi eksternal Bazel, bukan file dari arsip sumber (kecuali ada penggantian non-registry). Perhatikan juga bahwa sebaiknya gunakan file ini untuk menyetel versi rilis dan hindari melakukannya di file MODULE.bazel arsip sumber. Untuk mempelajari lebih lanjut pembuatan versi modul, lihat FAQ.
    • source.json: File JSON yang berisi informasi tentang cara mengambil sumber versi modul ini
    • patches/: Direktori opsional yang berisi file patch, hanya digunakan saat source.json memiliki jenis "archive"
    • overlay/: Direktori opsional yang berisi file overlay, hanya digunakan jika source.json memiliki jenis "archive"

bazel_registry.json

bazel_registry.json adalah file opsional yang menentukan metadata yang berlaku untuk seluruh registri. Objek ini dapat berisi kolom berikut:

  • mirrors: array string, yang menentukan daftar mirror yang akan digunakan untuk arsip sumber.
    • URL yang dicerminkan adalah gabungan dari cermin itu sendiri, dan URL sumber modul yang ditentukan oleh file source.json-nya tanpa protokol. Misalnya, jika URL sumber modul adalah https://foo.com/bar/baz, dan mirrors berisi ["https://mirror1.com/", "https://example.com/mirror2/"], maka URL yang akan dicoba Bazel secara berurutan adalah https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz, dan terakhir URL sumber aslinya sendiri https://foo.com/bar/baz.
  • module_base_path: string, yang menentukan jalur dasar untuk modul dengan jenis local_path dalam file source.json

metadata.json

metadata.json adalah file JSON opsional yang berisi informasi tentang modul, dengan kolom berikut:

  • versions: Array string, yang masing-masing menunjukkan versi modul yang tersedia di registry ini. Array ini harus cocok dengan turunan dari direktori modul.
  • yanked_versions: Objek JSON yang menentukan versi dibatalkan dari modul ini. Kuncinya harus berupa versi yang akan dibatalkan, dan nilainya harus berupa deskripsi mengapa versi tersebut dibatalkan, idealnya berisi link ke informasi selengkapnya.

Perhatikan bahwa BCR memerlukan informasi lebih lanjut dalam file metadata.json.

source.json

source.json adalah file JSON wajib diisi yang berisi informasi tentang cara mengambil versi tertentu dari sebuah modul. Skema file ini bergantung pada kolom type, yang secara default adalah archive.

  • Jika type adalah archive (default), versi modul ini didukung oleh aturan repo http_archive; versi ini diambil dengan mendownload arsip dari URL tertentu dan mengekstrak isinya. API ini mendukung kolom berikut:
    • url: String, URL arsip sumber
    • mirror_urls: Daftar string, URL duplikat arsip sumber. URL dicoba secara berurutan setelah url sebagai cadangan.
    • integrity: String, checksum Subresource Integrity arsip
    • strip_prefix: String, awalan direktori yang akan dihapus saat mengekstrak arsip sumber
    • overlay: Objek JSON yang berisi file overlay untuk ditumpuk di atas arsip yang diekstrak. File patch terletak di direktori /modules/$MODULE/$VERSION/overlay. Kuncinya adalah nama file overlay, dan nilainya adalah checksum integritas file overlay. Overlay diterapkan sebelum file patch.
    • patches: Objek JSON yang berisi file patch untuk diterapkan ke arsip yang diekstrak. File patch terletak di direktori /modules/$MODULE/$VERSION/patches. Kuncinya adalah nama file patch, dan nilainya adalah checksum integritas file patch. Patch diterapkan setelah file overlay dan dalam urutan yang muncul di patches.
    • patch_strip: Angka; sama dengan argumen --strip dari Unix patch.
    • archive_type: String, jenis arsip file yang didownload (Sama dengan type di http_archive).
  • Jika type adalah git_repository, versi modul ini didukung oleh aturan repo git_repository; versi ini diambil dengan meng-clone repositori Git.
    • Kolom berikut didukung, dan diteruskan langsung ke aturan repositori git_repository yang mendasarinya: remote, commit, shallow_since, tag, init_submodules, verbose, dan strip_prefix.
  • Jika type adalah local_path, versi modul ini didukung oleh aturan repo local_repository; modul ini ditautkan secara simbolis ke direktori di disk lokal. Kolom ini mendukung berikut:
    • path: Jalur lokal ke repo, dihitung sebagai berikut:
      • Jika path adalah jalur absolut, jalur tersebut akan tetap seperti apa adanya
      • Jika path adalah jalur relatif dan module_base_path adalah jalur absolut, maka akan diselesaikan ke <module_base_path>/<path>
      • Jika path dan module_base_path adalah jalur relatif, maka akan diselesaikan ke <registry_path>/<module_base_path>/<path>. Registry harus dihosting secara lokal dan digunakan oleh --registry=file://<registry_path>. Jika tidak, Bazel akan menampilkan error

Bazel Central Registry

Bazel Central Registry (BCR) di https://bcr.bazel.build/ adalah indeks registri dengan konten yang didukung oleh repositori GitHub bazelbuild/bazel-central-registry. Anda dapat menjelajahi isinya menggunakan frontend web di https://registry.bazel.build/.

Komunitas Bazel mengelola BCR, dan kontributor dipersilakan untuk mengirimkan permintaan pull. Lihat panduan kontribusi BCR.

Selain mengikuti format registry indeks normal, BCR memerlukan file presubmit.yml untuk setiap versi modul (/modules/$MODULE/$VERSION/presubmit.yml). File ini menentukan beberapa target build dan pengujian penting yang dapat Anda gunakan untuk memeriksa validitas versi modul ini. Pipeline CI BCR juga menggunakan ini untuk memastikan interoperabilitas antar-modul.

Memilih registry

Flag Bazel yang dapat diulang --registry dapat digunakan untuk menentukan daftar registry untuk meminta modul, sehingga Anda dapat menyiapkan project untuk mengambil dependensi dari registry pihak ketiga atau internal. Pendaftaran sebelumnya lebih diutamakan. Untuk mempermudah, Anda dapat memasukkan daftar tanda --registry dalam file .bazelrc project Anda.

Jika registri Anda dihosting di GitHub (misalnya, sebagai fork dari bazelbuild/bazel-central-registry), maka nilai --registry Anda memerlukan alamat GitHub mentah di raw.githubusercontent.com. Misalnya, di cabang main fork my-org, Anda akan menetapkan --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/.

Menggunakan tanda --registry akan menghentikan penggunaan Bazel Central Registry secara default, tetapi Anda dapat menambahkannya kembali dengan menambahkan --registry=https://bcr.bazel.build.