Bzlmod menemukan ketergantungan dengan meminta informasi dari Bazel registries: database modul Bazel. Saat ini, Bzlmod hanya mendukung registry indeks — direktori lokal atau server HTTP statis dengan mengikuti format tertentu.
Registry indeks
{i>Registry indeks<i} adalah direktori lokal
atau server HTTP statis yang berisi
informasi tentang daftar modul — termasuk beranda, pengelola,
MODULE.bazel
file dari setiap versi, dan cara mengambil sumber setiap versi
. Secara khusus, server ini tidak perlu menayangkan arsip sumber itu sendiri.
Registry indeks harus mengikuti format berikut:
/bazel_registry.json
: File JSON yang berisi metadata untuk registry seperti:mirrors
: menentukan daftar duplikasi yang akan digunakan untuk arsip sumber. URL yang dicerminkan adalah penyambungan dari cermin itu sendiri, dan URL sumber modul yang ditentukan oleh filesource.json
tanpa dan berperforma tinggi karena merupakan protokol biner. Misalnya, jika URL sumber modul adalahhttps://foo.com/bar/baz
, danmirrors
berisi["https://mirror1.com/", "https://example.com/mirror2/"]
, lalu URL yang akan dicoba Bazel secara berurutan adalahhttps://mirror1.com/foo.com/bar/baz
,https://example.com/mirror2/foo.com/bar/baz
, dan akhirnya versi asli URL sumber itu sendirihttps://foo.com/bar/baz
.module_base_path
: menentukan jalur dasar untuk modul dengan Jenislocal_repository
di filesource.json
/modules
: Direktori yang berisi subdirektori untuk setiap modul dalam ini daftar/modules/$MODULE
: Direktori yang berisi subdirektori untuk setiap versi di 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 belum tentu sama dengan penulis rencanaversions
: Daftar semua versi modul ini yang dapat ditemukan di registry iniyanked_versions
: Peta yang ditarik versi modul ini. Kunci harus versi untuk di-yank dan nilainya harus merupakan deskripsi dari mengapa versi itu ditarik, idealnya berisi tautan ke informasi
/modules/$MODULE/$VERSION
: Direktori yang berisi file berikut:MODULE.bazel
: FileMODULE.bazel
versi modul inisource.json
: File JSON yang berisi informasi tentang cara mengambil sumber versi modul ini- Jenis defaultnya adalah "archive", yang mewakili repo
http_archive
, dengan kolom berikut:url
: URL arsip sumberintegrity
: Subresource Integritas {i>checksum<i} 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 bagian Direktori/modules/$MODULE/$VERSION/patches
. Kunci tersebut adalah nama file patch, dan nilainya adalah {i>checksum<i} integritas dari file patchpatch_strip
: Sama seperti argumen--strip
daripatch
Unix.archive_type
: Jenis arsip file yang didownload (Sama sepertitype
padahttp_archive
). Secara default, jenis arsip ditentukan dari ekstensi file URL. Jika file berisi tanpa ekstensi, Anda dapat secara eksplisit menentukan salah satu dari hal berikut:"zip"
,"jar"
,"war"
,"aar"
,"tar"
,"tar.gz"
,"tgz"
,"tar.xz"
,"txz"
,"tar.zst"
,"tzst"
,tar.bz2
,"ar"
, atau"deb"
.
- Jenis ini dapat diubah untuk menggunakan repositori git, dengan kolom berikut:
type
:git_repository
- Kolom berikut seperti yang dijelaskan di https://bazel.build/rules/lib/repo/git:
remote
commit
shallow_since
tag
init_submodules
verbose
strip_prefix
- Jenis dapat diubah untuk menggunakan jalur lokal, yang mewakili
local_repository
, dengan kolom berikut:type
:local_path
path
: Jalur lokal ke repo, yang dihitung sebagai berikut:- Jika
path
adalah jalur absolut, jalur tersebut akan tetap seperti aslinya - Jika
path
adalah jalur relatif danmodule_base_path
adalah jalur jalur absolut, URL akan di-resolve menjadi<module_base_path>/<path>
- Jika
path
danmodule_base_path
adalah jalur relatif, maka di-resolve menjadi<registry_path>/<module_base_path>/<path>
. Registry harus dihosting secara lokal dan digunakan oleh--registry=file://<registry_path>
. Jika tidak, Bazel akan tampilkan error
- Jika
- Jenis defaultnya adalah "archive", yang mewakili repo
patches/
: Direktori opsional yang berisi file patch, hanya digunakan saatsource.json
memiliki "arsip" (jenis
Bazel Central Registry
Bazel Central Registry (BCR) di https://bcr.bazel.build/ adalah indeks
registry 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 dipersilakan untuk mengirimkan permintaan pull. Lihat kontribusi BCR pedoman kami.
Selain mengikuti format {i>registry<i} indeks
normal, BCR memerlukan
file presubmit.yml
untuk setiap versi modul
(/modules/$MODULE/$VERSION/presubmit.yml
). File ini menentukan beberapa hal penting
bangun dan uji target yang dapat Anda gunakan untuk memeriksa validitas modul ini
. Pipeline CI BCR juga menggunakan ini untuk memastikan interoperabilitas
antar-modul.
Memilih registry
Tanda Bazel berulang --registry
dapat digunakan untuk menentukan daftar
registry untuk meminta modul, sehingga Anda dapat menyiapkan project yang akan diambil
dependensi dari pihak ketiga
atau {i>registry<i} internal. Registri sebelumnya mengambil
prioritas tinggi. Untuk memudahkan, Anda dapat menempatkan daftar tanda --registry
di
.bazelrc
dari project Anda.
Jika {i>registry<i} Anda dihosting di GitHub (misalnya, sebagai garpu dari
bazelbuild/bazel-central-registry
) maka nilai --registry
Anda memerlukan
Alamat GitHub di bawah raw.githubusercontent.com
. Misalnya, di main
yang merupakan cabang dari garpu 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 oleh
default, tetapi Anda dapat menambahkannya kembali dengan menambahkan --registry=https://bcr.bazel.build
.