Bzlmod menemukan dependensi dengan meminta informasinya dari registry Bazel: database modul Bazel. Saat ini, Bzlmod hanya mendukung registry 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. Perlu diperhatikan bahwa registry indeks tidak perlu menayangkan arsip sumber itu sendiri.
Registry indeks harus mengikuti format di bawah:
/bazel_registry.json: File JSON yang berisi metadata untuk registry seperti:mirrors: menentukan daftar mirror yang akan digunakan untuk arsip sumber. URL yang di-mirror adalah gabungan dari mirror itu sendiri, dan URL sumber modul yang ditentukan oleh filesource.jsontanpa 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.module_base_path: menentukan jalur dasar untuk modul dengan jenislocal_repositorydalam filesource.json
/modules: Direktori yang berisi subdirektori untuk setiap modul dalam registry ini/modules/$MODULE: Direktori yang berisi subdirektori untuk setiap versi modul ini, serta:metadata.json: File JSON yang berisi informasi tentang modul, dengan kolom berikut:homepage: URL halaman beranda projectmaintainers: Daftar objek JSON, yang masing-masing sesuai dengan informasi pengelola modul di registry. Perhatikan bahwa ini tidak harus sama dengan penulis projectversions: Daftar semua versi modul ini yang dapat ditemukan di registry iniyanked_versions: Peta versi modul ini yang ditarik . Kunci harus berupa versi yang akan ditarik dan nilainya harus berupa deskripsi alasan versi tersebut ditarik, sebaiknya berisi link ke informasi selengkapnya
/modules/$MODULE/$VERSION: Direktori yang berisi file berikut:MODULE.bazel: FileMODULE.bazeldari versi modul inisource.json: File JSON yang berisi informasi tentang cara mengambil sumber versi modul ini- Jenis default-nya adalah "archive", yang mewakili repo
http_archive, dengan kolom berikut:url: URL arsip sumberintegrity: Checksum Subresource Integrity Subresource Integrity arsipstrip_prefix: Awalan direktori yang akan dihapus saat mengekstrak arsip sumberpatches: Peta yang berisi file patch yang akan 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 patchpatch_strip: Sama dengan arg1--stripdaripatchUnix.archive_type: Jenis arsip file yang didownload (Sama dengantypedihttp_archive). Secara default, jenis arsip ditentukan dari ekstensi file URL. Jika file tidak memiliki ekstensi, Anda dapat menentukan salah satu dari yang berikut secara eksplisit:"zip","jar","war","aar","tar","tar.gz","tgz","tar.xz","txz","tar.zst","tzst",tar.bz2,"ar", atau"deb".
- Jenisnya dapat diubah untuk menggunakan repositori git, dengan kolom ini:
type:git_repository- Kolom berikut seperti yang dijelaskan di https://bazel.build/rules/lib/repo/git:
remotecommitshallow_sincetaginit_submodulesverbosestrip_prefix
- Jenisnya dapat diubah untuk menggunakan jalur lokal, yang mewakili repo
local_repository, dengan kolom ini:type:local_pathpath: 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
- Jenis default-nya adalah "archive", yang mewakili repo
patches/: Direktori opsional yang berisi file patch, hanya digunakan jikasource.jsonmemiliki jenis "archive"
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 modul ini yang ditarik ditarik. Kunci harus berupa versi yang akan ditarik, dan nilainya harus berupa deskripsi alasan versi tersebut ditarik, sebaiknya berisi link ke informasi selengkapnya.
Perhatikan bahwa BCR memerlukan informasi selengkapnya dalam file metadata.json.
source.json
source.json adalah file JSON yang diperlukan dan berisi informasi tentang cara mengambil versi modul tertentu. Skema file ini bergantung pada kolom type, yang secara default adalah archive.
- Jika
typeadalaharchive(default), versi modul ini didukung oleh aturan repohttp_archive; versi ini diambil dengan mendownload arsip dari URL tertentu dan mengekstrak kontennya. Versi 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 [Subresource Integrity][subresource-integrity] arsipstrip_prefix: String, awalan direktori yang akan dihapus saat mengekstrak arsip sumberoverlay: Objek JSON yang berisi file overlay yang akan ditambahkan ke 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 yang akan 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.patch_strip: Angka; sama dengan argumen--stripdari Unixpatch.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; versi ini di-symlink ke direktori di disk lokal. Versi 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 file ini untuk memastikan interoperabilitas antar-modul.
Memilih registry
Flag Bazel yang dapat diulang --registry dapat digunakan untuk menentukan daftar registry tempat meminta modul, sehingga Anda dapat menyiapkan project untuk mengambil dependensi dari registry pihak ketiga atau internal. Registry sebelumnya akan 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 main
cabang my-org fork, Anda akan menetapkan
--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/.
Penggunaan flag --registry akan menghentikan penggunaan Bazel Central Registry secara
default, tetapi Anda dapat menambahkannya kembali dengan menambahkan --registry=https://bcr.bazel.build.