Registry Bazel

7/0.9/2.5. Lihat sumber Nightly {/3/}

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 dengan 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. 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 pencerminan 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 Bazel coba secara berurutan adalah https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz, dan terakhir URL sumber asli itu sendiri https://foo.com/bar/baz.
    • module_base_path: menentukan jalur dasar untuk modul dengan jenis local_repository dalam file source.json
  • /modules: Direktori yang berisi subdirektori untuk setiap modul di 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 project
      • maintainers: Daftar objek JSON, yang masing-masing sesuai dengan informasi pengelola modul di registry. Perhatikan bahwa ini belum tentu sama dengan penulis project
      • versions: Daftar semua versi modul ini yang dapat ditemukan di registry ini
      • yanked_versions: Peta versi yang diminta dari modul ini. Kunci harus berupa versi untuk melakukan yank dan nilainya harus berupa deskripsi mengapa versi ditarik, idealnya berisi link ke informasi selengkapnya
  • /modules/$MODULE/$VERSION: Direktori yang berisi file berikut:
    • MODULE.bazel: File MODULE.bazel versi modul ini
    • source.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 sumber
        • integrity: Checksum Subresource Integrity pada arsip
        • strip_prefix: Awalan direktori yang akan dihapus saat mengekstrak arsip sumber
        • patches: Peta yang berisi file patch yang akan diterapkan ke arsip yang diekstrak. File patch berada di direktori /modules/$MODULE/$VERSION/patches. Kuncinya adalah nama file patch, dan nilainya adalah checksum integritas dari file patch
        • patch_strip: Sama seperti argumen --strip dari patch Unix.
        • archive_type: Jenis arsip file yang didownload (Sama seperti type pada http_archive). Secara default, jenis arsip ditentukan dari ekstensi file URL. Jika file tidak memiliki 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 ini dapat diubah untuk menggunakan jalur lokal, yang mewakili repositori 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 dan module_base_path adalah jalur absolut, jalur tersebut akan di-resolve menjadi <module_base_path>/<path>
          • Jika path dan module_base_path adalah jalur relatif, parameter ini akan 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 menampilkan kesalahan
    • patches/: Direktori opsional yang berisi file patch, yang hanya digunakan jika source.json memiliki jenis "arsip"

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 mempertahankan 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 registri yang menjadi asal permintaan modul, sehingga Anda dapat menyiapkan project untuk mengambil dependensi dari registry pihak ketiga atau internal. Registry sebelumnya menjadi prioritas. Untuk memudahkan, Anda dapat menempatkan daftar tanda --registry dalam file .bazelrc project Anda.

Jika registry Anda dihosting di GitHub (misalnya, sebagai fork bazelbuild/bazel-central-registry), nilai --registry memerlukan alamat GitHub mentah di raw.githubusercontent.com. Misalnya, pada cabang main dari 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.