Bzlmod ค้นพบทรัพยากร Dependency ด้วยการขอข้อมูลจากรีจิสทรีของ Bazel ซึ่งเป็นฐานข้อมูลของโมดูล Bazel ปัจจุบัน Bzlmod รองรับเฉพาะรีจิสทรีดัชนี เช่น ไดเรกทอรีในเครื่องหรือเซิร์ฟเวอร์ HTTP แบบคงที่ตามรูปแบบที่เฉพาะเจาะจง
รีจิสทรีดัชนี
รีจิสทรีดัชนีคือไดเรกทอรีในเครื่องหรือเซิร์ฟเวอร์ HTTP แบบคงที่ที่มีข้อมูลเกี่ยวกับรายการโมดูล ซึ่งรวมถึงหน้าแรก ผู้ดูแล ไฟล์ MODULE.bazel
ของแต่ละเวอร์ชัน และวิธีดึงข้อมูลแหล่งที่มาของแต่ละเวอร์ชัน ที่สำคัญคือ ไม่จำเป็นต้องแสดงที่เก็บซอร์สด้วยตัวเอง
รีจิสทรีดัชนีต้องเป็นไปตามรูปแบบด้านล่าง
/bazel_registry.json
: ไฟล์ JSON ที่มีข้อมูลเมตาสำหรับรีจิสทรี เช่นmirrors
: ระบุรายการมิเรอร์ที่จะใช้สำหรับที่เก็บถาวรของแหล่งที่มา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 ที่มีข้อมูลเกี่ยวกับวิธีดึงข้อมูลแหล่งที่มาของโมดูลเวอร์ชันนี้- ประเภทเริ่มต้นคือ "เก็บถาวร" ซึ่งแสดงถึงที่เก็บ
http_archive
โดยมีช่องต่อไปนี้url
: URL ของที่เก็บถาวรต้นทางintegrity
: ผลรวมตรวจสอบความสมบูรณ์ของทรัพยากรย่อยของที่เก็บถาวรstrip_prefix
: คำนำหน้าไดเรกทอรีที่จะตัดออกเมื่อแยกที่เก็บถาวรต้นทางpatches
: แผนที่ที่มีไฟล์แพตช์เพื่อใช้กับที่เก็บถาวรที่แยกออกมา ไฟล์แพตช์อยู่ในไดเรกทอรี/modules/$MODULE/$VERSION/patches
คีย์คือชื่อไฟล์แพตช์ และค่าต่างๆ จะเป็นการตรวจสอบความสมบูรณ์ของไฟล์แพตช์patch_strip
: เหมือนกับอาร์กิวเมนต์--strip
ของ Unixpatch
archive_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 จะแสดงข้อผิดพลาด
- หาก
- ประเภทเริ่มต้นคือ "เก็บถาวร" ซึ่งแสดงถึงที่เก็บ
patches/
: ไดเรกทอรีที่ไม่บังคับซึ่งมีไฟล์แพตช์ ใช้เมื่อsource.json
มีประเภท "เก็บถาวร" เท่านั้น
สำนักทะเบียน Bazel Central
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
) อีกด้วย ไฟล์นี้ระบุเป้าหมายการสร้างและทดสอบที่สำคัญ 2-3 รายการที่คุณสามารถใช้ตรวจสอบความถูกต้องของเวอร์ชันโมดูลนี้ได้ นอกจากนี้ ไปป์ไลน์ CI ของ BCR ยังใช้วิธีการนี้เพื่อให้แน่ใจว่าความสามารถในการทำงานร่วมกันระหว่างโมดูลต่างๆ ด้วย
การเลือกรีจิสทรี
คุณสามารถใช้แฟล็ก Bazel --registry
ที่ทำซ้ำได้เพื่อระบุรายการรีจิสทรีที่จะขอโมดูล ดังนั้นคุณจึงตั้งค่าโปรเจ็กต์ให้ดึงข้อมูลทรัพยากร Dependency จากบุคคลที่สามหรือรีจิสทรีภายในได้ รีจิสทรีเก่าๆ จะมีประสิทธิภาพกว่า เพื่อความสะดวก คุณสามารถใส่รายการ Flag --registry
ในไฟล์ .bazelrc
ของโปรเจ็กต์ได้
หากรีจิสทรีโฮสต์อยู่ใน GitHub (เช่น เป็นทางแยกของ bazelbuild/bazel-central-registry
) ค่า --registry
จะต้องมีที่อยู่ GitHub แบบข้อมูลดิบภายใต้ raw.githubusercontent.com
ตัวอย่างเช่น ในสาขา main
ของส้อม my-org
คุณต้องตั้งค่า --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
การใช้แฟล็ก --registry
จะหยุดไม่ให้ระบบใช้ Bazel Central Registry โดยค่าเริ่มต้น แต่คุณเพิ่มกลับเข้าไปได้ด้วยการเพิ่ม --registry=https://bcr.bazel.build