Bzlmod จะค้นหาการขึ้นต่อกันโดยการขอข้อมูลจากรีจิสทรีของ Bazel ซึ่งเป็นฐานข้อมูลของโมดูล Bazel ปัจจุบัน Bzlmod รองรับเฉพาะรีจิสทรีดัชนี ซึ่งเป็นไดเรกทอรีในเครื่องหรือเซิร์ฟเวอร์ HTTP แบบคงที่ ที่ใช้รูปแบบที่เฉพาะเจาะจง
รีจิสทรีดัชนี
รีจิสทรีดัชนีคือไดเรกทอรีในเครื่องหรือเซิร์ฟเวอร์ HTTP แบบคงที่ที่มีข้อมูลเกี่ยวกับรายการโมดูล ซึ่งรวมถึงหน้าแรก ผู้ดูแล MODULE.bazel
ของแต่ละเวอร์ชัน และวิธีดึงข้อมูลแหล่งที่มาของแต่ละเวอร์ชัน โปรดทราบว่าไม่จำเป็นต้องแสดงที่เก็บถาวรของแหล่งที่มา
รีจิสทรีดัชนีต้องเป็นไปตามรูปแบบด้านล่าง
/bazel_registry.json
: ไฟล์ JSON ที่มีข้อมูลเมตาสำหรับรีจิสทรี เช่นmirrors
: ระบุรายการมิเรอร์ที่จะใช้สำหรับที่เก็บถาวรของแหล่งที่มา URL ที่มิเรอร์คือการต่อกันของมิเรอร์เองและ URL แหล่งที่มาของโมดูลที่ระบุโดยไฟล์source.json
โดยไม่มี โปรโตคอล ตัวอย่างเช่น หาก URL แหล่งที่มาของโมดูลคือhttps://foo.com/bar/baz
และmirrors
มี["https://mirror1.com/", "https://example.com/mirror2/"]
URL ที่ Bazel จะลองตามลำดับคือhttps://mirror1.com/foo.com/bar/baz
,https://example.com/mirror2/foo.com/bar/baz
และสุดท้ายคือ URL แหล่งที่มาเดิมhttps://foo.com/bar/baz
module_base_path
: ระบุเส้นทางฐานสำหรับโมดูลที่มีประเภทlocal_repository
ในไฟล์source.json
/modules
: ไดเรกทอรีที่มีไดเรกทอรีย่อยสำหรับแต่ละโมดูลในรีจิสทรีนี้/modules/$MODULE
: ไดเรกทอรีที่มีไดเรกทอรีย่อยสำหรับแต่ละเวอร์ชัน ของโมดูลนี้ รวมถึงmetadata.json
: ไฟล์ JSON ที่มีข้อมูลเกี่ยวกับโมดูล โดยมีฟิลด์ต่อไปนี้homepage
: URL ของหน้าแรกของโปรเจ็กต์maintainers
: รายการออบเจ็กต์ JSON ซึ่งแต่ละรายการสอดคล้องกับ ข้อมูลของผู้ดูแลรักษามอดูลในรีจิสทรี โปรดทราบว่าบุคคลนี้ไม่จำเป็นต้องเป็นผู้เขียนของ โปรเจ็กต์versions
: รายการเวอร์ชันทั้งหมดของโมดูลนี้ที่อยู่ในรีจิสทรีนี้yanked_versions
: แผนที่ของโมดูลเวอร์ชันที่ถูกถอนออก คีย์ ควรเป็นเวอร์ชันที่จะยกเลิก และค่าควรเป็นคำอธิบาย เหตุผลที่ยกเลิกเวอร์ชันนั้น โดยควรมีลิงก์ไปยังข้อมูลเพิ่มเติม
/modules/$MODULE/$VERSION
: ไดเรกทอรีที่มีไฟล์ต่อไปนี้MODULE.bazel
: ไฟล์MODULE.bazel
ของโมดูลเวอร์ชันนี้source.json
: ไฟล์ JSON ที่มีข้อมูลเกี่ยวกับวิธีดึงข้อมูล แหล่งที่มาของโมดูลเวอร์ชันนี้- ประเภทเริ่มต้นคือ "archive" ซึ่งแสดงถึงที่เก็บ
http_archive
โดยมีฟิลด์ต่อไปนี้url
: URL ของที่เก็บแหล่งที่มาmirror_urls
: รายการสตริง ซึ่งเป็น URL แบบมิเรอร์ของที่เก็บถาวรต้นฉบับ ระบบจะลองใช้ URL ตามลำดับหลังจากurl
เป็นข้อมูลสำรองintegrity
: ผลรวมตรวจสอบ Subresource Integrity ของที่เก็บถาวรstrip_prefix
: คำนำหน้าไดเรกทอรีที่จะนำออกเมื่อแตกไฟล์ ที่เก็บต้นฉบับpatches
: แผนที่ที่มีไฟล์แพตช์ที่จะใช้กับ ที่เก็บถาวรที่แยกออกมา ไฟล์แพตช์จะอยู่ในไดเรกทอรี/modules/$MODULE/$VERSION/patches
คีย์คือ ชื่อไฟล์แพตช์ และค่าคือผลรวมตรวจสอบความสมบูรณ์ของ ไฟล์แพตช์patch_strip
: เหมือนกับอาร์กิวเมนต์--strip
ของpatch
ใน Unixarchive_type
: ประเภทที่เก็บถาวรของไฟล์ที่ดาวน์โหลด (เหมือนกับtype
ในhttp_archive
) โดยค่าเริ่มต้น ระบบจะกำหนดประเภทที่เก็บถาวรจากนามสกุลไฟล์ของ URL หากไฟล์ไม่มีนามสกุล คุณสามารถระบุอย่างชัดเจนได้ดังนี้"zip"
,"jar"
,"war"
,"aar"
,"tar"
,"tar.gz"
,"tgz"
,"tar.xz"
,"txz"
,"tar.zst"
,"tzst"
,tar.bz2
,"ar"
หรือ"deb"
- คุณเปลี่ยนประเภทเพื่อใช้ที่เก็บ Git ได้โดยมีฟิลด์ต่อไปนี้
type
:git_repository
- ฟิลด์ต่อไปนี้ตามที่อธิบายไว้ที่ https://bazel.build/rules/lib/repo/git
remote
commit
shallow_since
tag
init_submodules
verbose
strip_prefix
- คุณเปลี่ยนประเภทเพื่อใช้เส้นทางในเครื่องได้ ซึ่งแสดงถึงที่เก็บ
local_repository
โดยมีฟิลด์ต่อไปนี้type
:local_path
path
: เส้นทางในเครื่องไปยังที่เก็บ ซึ่งคำนวณได้ดังนี้- หาก
path
เป็นเส้นทางแบบสัมบูรณ์ ระบบจะคงเส้นทางไว้ตามเดิม - หาก
path
เป็นเส้นทางแบบสัมพัทธ์และmodule_base_path
เป็นเส้นทางแบบ สัมบูรณ์ ระบบจะเปลี่ยนเป็น<module_base_path>/<path>
- หากทั้ง
path
และmodule_base_path
เป็นเส้นทางแบบสัมพัทธ์ ระบบจะ เปลี่ยนเป็น<registry_path>/<module_base_path>/<path>
รีจิสทรีต้องโฮสต์ในเครื่องและใช้โดย--registry=file://<registry_path>
ไม่เช่นนั้น Bazel จะ แสดงข้อผิดพลาด
- หาก
- ประเภทเริ่มต้นคือ "archive" ซึ่งแสดงถึงที่เก็บ
patches/
: ไดเรกทอรีที่ไม่บังคับซึ่งมีไฟล์แพตช์ ใช้เฉพาะเมื่อsource.json
มีประเภท "archive"
รีจิสทรีกลางของ Bazel
Bazel Central Registry (BCR) ที่ https://bcr.bazel.build/ เป็นดัชนี
รีจิสทรีที่มีเนื้อหาซึ่งได้รับการสนับสนุนจากที่เก็บ GitHub
bazelbuild/bazel-central-registry
คุณสามารถเรียกดูเนื้อหาได้โดยใช้ส่วนหน้าของเว็บที่
https://registry.bazel.build/
ชุมชน Bazel เป็นผู้ดูแล BCR และเรายินดีรับ คำขอพุลจากผู้มีส่วนร่วม ดูหลักเกณฑ์การมีส่วนร่วมใน BCR
นอกเหนือจากการทำตามรูปแบบของรีจิสทรีดัชนีปกติแล้ว BCR ยังกำหนดให้มีpresubmit.yml
ไฟล์สำหรับโมดูลแต่ละเวอร์ชัน
(/modules/$MODULE/$VERSION/presubmit.yml
) ไฟล์นี้จะระบุเป้าหมายการสร้างและการทดสอบที่จำเป็นบางอย่าง ซึ่งคุณสามารถใช้เพื่อตรวจสอบความถูกต้องของโมดูลเวอร์ชันนี้ได้ นอกจากนี้ ไปป์ไลน์ CI ของ BCR ยังใช้สิ่งนี้เพื่อให้มั่นใจถึงการทำงานร่วมกัน
ระหว่างโมดูล
การเลือกรีจิสทรี
คุณใช้แฟล็ก --registry
ของ Bazel ที่ทำซ้ำได้เพื่อระบุรายการรีจิสทรีที่จะขอโมดูลจากได้ จึงตั้งค่าโปรเจ็กต์ให้ดึงข้อมูลการอ้างอิงจากรีจิสทรีของบุคคลที่สามหรือรีจิสทรีภายในได้ โดยรีจิสทรีที่เก่ากว่าจะมี
ลำดับความสำคัญสูงกว่า คุณสามารถใส่รายการ--registry
แฟล็กในไฟล์
.bazelrc
ของโปรเจ็กต์เพื่อความสะดวก
หากรีจิสทรีโฮสต์อยู่ใน GitHub (เช่น เป็น Fork ของ
bazelbuild/bazel-central-registry
) ค่า --registry
จะต้องมีที่อยู่ GitHub แบบดิบ
ภายใต้ raw.githubusercontent.com
เช่น ในmain
สาขาของmy-org
Fork คุณจะต้องตั้งค่า
--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
การใช้แฟล็ก --registry
จะหยุดไม่ให้ใช้รีจิสทรีกลางของ Bazel โดยค่าเริ่มต้น แต่คุณจะเพิ่มกลับได้โดยเพิ่ม --registry=https://bcr.bazel.build