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 dari setiap versi, dan cara mengambil sumber setiap
versi. Perlu diperhatikan bahwa tidak perlu menayangkan arsip sumber itu sendiri.
Registry indeks harus memiliki format berikut:
/bazel_registry.json: File JSON opsional yang berisi metadata untuk registry./modules: Direktori yang berisi subdirektori untuk setiap modul dalam registry ini/modules/$MODULE: Direktori yang berisi subdirektori untuk setiap versi modul bernama$MODULE, serta filemetadata.jsonyang berisi metadata untuk modul ini./modules/$MODULE/$VERSION: Direktori yang berisi file berikut:MODULE.bazel: FileMODULE.bazeldari versi modul ini. Perhatikan bahwa ini adalah fileMODULE.bazelyang dibaca selama resolusi dependensi eksternal Bazel, bukan file dari arsip sumber (kecuali jika ada penggantian non-registry). Perhatikan juga bahwa sebaiknya gunakan file ini untuk menetapkan versi rilis dan hindari melakukannya dalam fileMODULE.bazelarsip sumber. Untuk mempelajari pembuatan versi modul secara lebih lanjut, lihat FAQ.source.json: File JSON yang berisi informasi tentang cara mengambil sumber versi modul inipatches/: Direktori opsional yang berisi file patch, hanya digunakan jikasource.jsonmemiliki jenis "archive"overlay/: Direktori opsional yang berisi file overlay, hanya digunakan jikasource.jsonmemiliki jenis "archive"
bazel_registry.json
bazel_registry.json adalah file opsional yang menentukan metadata yang berlaku untuk
seluruh registry. Kolom ini dapat berisi kolom berikut:
mirrors: array string, yang menentukan daftar mirror yang akan digunakan untuk arsip sumber.- URL yang dicerminkan adalah penyambungan mirror itu sendiri, dan
URL sumber modul yang ditentukan oleh file
source.json-nya tanpa protokol. Misalnya, jika URL sumber modul adalahhttps://foo.com/bar/baz, danmirrorsberisi["https://mirror1.com/", "https://example.com/mirror2/"], maka URL yang akan dicoba Bazel secara berurutan adalahhttps://mirror1.com/foo.com/bar/baz,https://example.com/mirror2/foo.com/bar/baz, dan terakhir URL sumber asli itu sendirihttps://foo.com/bar/baz.
- URL yang dicerminkan adalah penyambungan mirror itu sendiri, dan
URL sumber modul yang ditentukan oleh file
module_base_path: string, yang menentukan jalur dasar untuk modul dengan jenislocal_pathdalam filesource.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 direktori modul.yanked_versions: Objek JSON yang menentukan versi yang ditarik dari modul ini. Kunci harus berupa versi yang akan ditarik, dan nilainya harus berupa deskripsi alasan versi ditarik, idealnya berisi link ke informasi selengkapnya.
Perhatikan bahwa BCR memerlukan informasi selengkapnya dalam file metadata.json.
source.json
source.json adalah file JSON yang diperlukan yang berisi informasi tentang cara mengambil
versi modul tertentu. Skema file ini bergantung pada kolom type-nya, yang secara default ditetapkan ke archive.
- Jika
typeadalaharchive(default), versi modul ini didukung oleh aturan repohttp_archive; versi ini diambil dengan mendownload arsip dari URL tertentu dan mengekstrak kontennya. Fitur ini mendukung kolom berikut:url: String, URL arsip sumbermirror_urls: Daftar string, URL mirror arsip sumber. URL dicoba secara berurutan setelahurlsebagai cadangan.integrity: String, checksum Integrity Subresource dari arsipstrip_prefix: String, awalan direktori yang akan dihapus saat mengekstrak arsip sumberoverlay: 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 sesuai urutan yang muncul dipatches.patch_strip: Angka; sama dengan argumen--stripdaripatchUnix.archive_type: String, jenis arsip file yang didownload (Sama dengantypedihttp_archive).
- Jika
typeadalahgit_repository, versi modul ini didukung oleh aturan repogit_repository; versi ini diambil dengan meng-clone repositori Git.- Kolom berikut didukung, dan diteruskan langsung ke
aturan repo
git_repositoryyang mendasarinya:remote,commit,shallow_since,tag,init_submodules,verbose, danstrip_prefix.
- Kolom berikut didukung, dan diteruskan langsung ke
aturan repo
- Jika
typeadalahlocal_path, versi modul ini didukung oleh aturan repolocal_repository; symlink ke direktori di disk lokal. Kode ini mendukung kolom berikut:path: Jalur lokal ke repo, yang dihitung sebagai berikut:- Jika
pathadalah jalur absolut, jalur tersebut akan tetap seperti itu - Jika
pathadalah jalur relatif danmodule_base_pathadalah jalur absolut, jalur tersebut akan di-resolve ke<module_base_path>/<path> - Jika
pathdanmodule_base_pathadalah jalur relatif, jalur tersebut akan di-resolve 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
- Jika
Bazel Central Registry
Bazel Central Registry (BCR) di https://bcr.bazel.build/ adalah registry
indeks dengan konten yang didukung oleh repo GitHub
bazelbuild/bazel-central-registry. Anda dapat menjelajahi kontennya
menggunakan frontend web di https://registry.bazel.build/.
Komunitas Bazel mengelola BCR, dan kontributor dapat 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 tempat modul diminta, sehingga Anda dapat menyiapkan project untuk mengambil
dependensi dari registry internal atau pihak ketiga. Registry sebelumnya lebih
diprioritaskan. Untuk memudahkan, Anda dapat menempatkan daftar flag --registry dalam file .bazelrc project Anda.
Jika registry Anda dihosting di GitHub (misalnya, sebagai fork dari
bazelbuild/bazel-central-registry), nilai --registry Anda memerlukan alamat GitHub
mentah di bagian 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 flag --registry akan menghentikan penggunaan Bazel Central Registry secara
default, tetapi Anda dapat menambahkannya kembali dengan menambahkan --registry=https://bcr.bazel.build.