Bzlmod menemukan dependensi dengan meminta informasinya dari registri 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
dari setiap versi, dan cara mengambil sumber setiap
versi. Perlu diperhatikan bahwa tidak perlu menayangkan arsip sumber itu sendiri.
Registry indeks harus mengikuti format di bawah ini:
/bazel_registry.json
: File JSON yang berisi metadata untuk registry seperti:mirrors
: menentukan daftar mirror yang akan digunakan untuk arsip sumber. URL yang dicerminkan adalah penyambungan mirror itu sendiri, dan URL sumber modul yang ditentukan oleh filesource.json
-nya tanpa protokol. Misalnya, jika URL sumber modul adalahhttps://foo.com/bar/baz
, danmirrors
berisi["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_repository
dalam 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 selalu sama dengan penulis projectversions
: Daftar semua versi modul ini yang dapat ditemukan di registry iniyanked_versions
: Peta 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
/modules/$MODULE/$VERSION
: Direktori yang berisi file berikut:MODULE.bazel
: FileMODULE.bazel
dari 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 Integrity Subresource dari arsipstrip_prefix
: Awalan direktori yang akan dihapus saat mengekstrak arsip sumberpatches
: Peta 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 patchpatch_strip
: Sama dengan argumen--strip
dari Unixpatch
.archive_type
: Jenis arsip file yang didownload (Sama dengantype
dihttp_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 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 ini dapat diubah untuk menggunakan jalur lokal, yang mewakili
repo
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 itu - Jika
path
adalah jalur relatif danmodule_base_path
adalah jalur absolut, jalur tersebut akan di-resolve ke<module_base_path>/<path>
- Jika
path
danmodule_base_path
adalah 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.json
memiliki jenis "archive"
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 --registry
yang dapat diulang 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, pada 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
.