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/bazmodule_base_path: ระบุเส้นทางฐานสำหรับโมดูลที่มีประเภทlocal_repositoryในไฟล์source.json
/modules: ไดเรกทอรีที่มีไดเรกทอรีย่อยสำหรับแต่ละโมดูลในรีจิสทรีนี้/modules/$MODULE: ไดเรกทอรีที่มีไดเรกทอรีย่อยสำหรับแต่ละเวอร์ชันของโมดูลนี้ รวมถึงmetadata.json: ไฟล์ JSON ที่มีข้อมูลเกี่ยวกับโมดูล โดยมีช่องต่อไปนี้homepage: URL ของหน้าแรกของโปรเจ็กต์maintainers: รายการออบเจ็กต์ JSON ซึ่งแต่ละรายการสอดคล้องกับข้อมูลของผู้ดูแลโมดูล ในรีจิสทรี โปรดทราบว่าข้อมูลนี้ไม่จำเป็นต้องเหมือนกับ ผู้เขียนโปรเจ็กต์versions: รายการเวอร์ชันทั้งหมดของโมดูลนี้ที่จะพบในรีจิสทรีนี้yanked_versions: แผนที่ของเวอร์ชัน yanked ของโมดูลนี้ คีย์ควรเป็นเวอร์ชันที่จะ yank และค่าควรเป็นคำอธิบายว่าทำไมจึง yank เวอร์ชันนั้น โดยควรมีลิงก์ไปยังข้อมูลเพิ่มเติม
/modules/$MODULE/$VERSION: ไดเรกทอรีที่มีไฟล์ต่อไปนี้MODULE.bazel: ไฟล์MODULE.bazelของโมดูลเวอร์ชันนี้source.json: ไฟล์ JSON ที่มีข้อมูลเกี่ยวกับวิธีดึงข้อมูลซอร์สของโมดูลเวอร์ชันนี้- ประเภทเริ่มต้นคือ "archive" ซึ่งแสดงถึง repo
http_archiveโดยมีช่องต่อไปนี้url: URL ของไฟล์เก็บถาวรของซอร์สintegrity: Subresource Integrity checksum ของไฟล์เก็บถาวรstrip_prefix: คำนำหน้าไดเรกทอรีที่จะนำออกเมื่อแยกไฟล์เก็บถาวรของซอร์สpatches: แผนที่ที่มีไฟล์แพตช์ที่จะใช้กับไฟล์เก็บถาวรที่แยกออกมา ไฟล์แพตช์จะอยู่ในไดเรกทอรี/modules/$MODULE/$VERSION/patchesคีย์คือชื่อไฟล์แพตช์ และค่าคือ Checksum ของ Integrity ของไฟล์แพตช์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
remotecommitshallow_sincetaginit_submodulesverbosestrip_prefix
- คุณสามารถเปลี่ยนประเภทเพื่อใช้เส้นทางในเครื่อง ซึ่งแสดงถึง repo
local_repositoryโดยมีช่องต่อไปนี้type:local_pathpath: เส้นทางในเครื่องไปยัง repo ซึ่งคำนวณได้ดังนี้- หาก
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" ซึ่งแสดงถึง repo
patches/: ไดเรกทอรีที่ไม่บังคับซึ่งมีไฟล์แพตช์ โดยจะใช้ก็ต่อเมื่อsource.jsonมีประเภท "archive"
รีจิสทรีกลางของ Bazel
รีจิสทรีกลางของ Bazel (BCR) ที่ https://bcr.bazel.build/ คือรีจิสทรีดัชนี
ที่มีเนื้อหาที่รองรับโดย repo GitHub
bazelbuild/bazel-central-registry
คุณสามารถเรียกดูเนื้อหาได้โดยใช้ส่วนหน้าเว็บที่
https://registry.bazel.build/.
ชุมชน Bazel เป็นผู้ดูแล BCR และยินดีรับผู้มีส่วนร่วมส่งคำขอ Pull ดูหลักเกณฑ์การมีส่วนร่วมใน 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
ของ Fork my-org คุณจะต้องตั้งค่า
--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
การใช้แฟล็ก --registry จะหยุดไม่ให้ใช้รีจิสทรีกลางของ Bazel โดยค่าเริ่มต้น แต่คุณสามารถเพิ่มกลับได้โดยเพิ่ม --registry=https://bcr.bazel.build