Bazel จะค้นหาการขึ้นต่อกันโดยการขอข้อมูลจากรีจิสทรีของ Bazel ซึ่งเป็นฐานข้อมูลของโมดูล Bazel Bazel รองรับรีจิสทรีเพียงประเภทเดียว ซึ่งก็คือรีจิสทรีดัชนี ไดเรกทอรีในเครื่อง หรือเซิร์ฟเวอร์ HTTP แบบคงที่ที่ใช้รูปแบบที่เฉพาะเจาะจง
รีจิสทรีดัชนี
รีจิสทรีดัชนีคือไดเรกทอรีในเครื่องหรือเซิร์ฟเวอร์ HTTP แบบคงที่ที่มีข้อมูลเกี่ยวกับรายการโมดูล ซึ่งรวมถึงหน้าแรก ผู้ดูแล MODULE.bazel
ของแต่ละเวอร์ชัน และวิธีดึงข้อมูลแหล่งที่มาของแต่ละเวอร์ชัน โปรดทราบว่าไม่จำเป็นต้องแสดงที่เก็บถาวรของแหล่งที่มา
รีจิสทรีดัชนีต้องมีรูปแบบต่อไปนี้
/bazel_registry.json
: ไฟล์ JSON ที่ไม่บังคับ ซึ่งมีข้อมูลเมตาสำหรับรีจิสทรี/modules
: ไดเรกทอรีที่มีไดเรกทอรีย่อยสำหรับแต่ละโมดูลในรีจิสทรีนี้/modules/$MODULE
: ไดเรกทอรีที่มีไดเรกทอรีย่อยสำหรับโมดูลแต่ละเวอร์ชัน ชื่อ$MODULE
รวมถึงไฟล์metadata.json
ที่มีข้อมูลเมตาสำหรับโมดูลนี้/modules/$MODULE/$VERSION
: ไดเรกทอรีที่มีไฟล์ต่อไปนี้MODULE.bazel
: ไฟล์MODULE.bazel
ของโมดูลเวอร์ชันนี้ โปรดทราบ ว่านี่คือไฟล์MODULE.bazel
ที่อ่านระหว่างการแก้ปัญหา การอ้างอิงภายนอกของ Bazel ไม่ใช่ไฟล์จากที่เก็บถาวรของแหล่งที่มา (เว้นแต่จะมีการลบล้าง ที่ไม่ใช่รีจิสทรี) นอกจากนี้ โปรดทราบว่า ควรใช้ไฟล์นี้เพื่อตั้งค่าเวอร์ชันของรุ่นและหลีกเลี่ยงการตั้งค่าใน ไฟล์เก็บถาวรของแหล่งที่มาMODULE.bazel
ดูข้อมูลเพิ่มเติมเกี่ยวกับการควบคุมเวอร์ชันของโมดูลได้ที่คำถามที่พบบ่อยsource.json
: ไฟล์ JSON ที่มีข้อมูลเกี่ยวกับวิธี ดึงข้อมูลแหล่งที่มาของโมดูลเวอร์ชันนี้patches/
: ไดเรกทอรีที่ไม่บังคับซึ่งมีไฟล์แพตช์ ใช้เฉพาะเมื่อsource.json
มีประเภท "archive"overlay/
: ไดเรกทอรีที่ไม่บังคับซึ่งมีไฟล์ซ้อนทับ ใช้เฉพาะเมื่อsource.json
มีประเภทเป็น "archive"
bazel_registry.json
bazel_registry.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
- URL ที่มิเรอร์คือการต่อกันของมิเรอร์เองและ
URL แหล่งที่มาของโมดูลที่ระบุโดยไฟล์
module_base_path
: สตริงที่ระบุเส้นทางฐานสำหรับโมดูลที่มีประเภทlocal_path
ในไฟล์source.json
metadata.json
metadata.json
เป็นไฟล์ JSON ที่ไม่บังคับซึ่งมีข้อมูลเกี่ยวกับโมดูล โดยมีช่องต่อไปนี้
versions
: อาร์เรย์ของสตริง ซึ่งแต่ละสตริงจะระบุเวอร์ชันของโมดูล ที่พร้อมใช้งานในรีจิสทรีนี้ อาร์เรย์นี้ควรตรงกับโฟลเดอร์ย่อยของ ไดเรกทอรีโมดูลyanked_versions
: ออบเจ็กต์ JSON ที่ระบุเวอร์ชันที่ถูกระงับ ของโมดูลนี้ คีย์ ควรเป็นเวอร์ชันที่จะยกเลิก และค่าควรเป็นคำอธิบาย ว่าทำไมจึงยกเลิกเวอร์ชันนั้น โดยควรมีลิงก์ไปยังข้อมูลเพิ่มเติม ด้วย
โปรดทราบว่า BCR ต้องการข้อมูลเพิ่มเติมในไฟล์ metadata.json
source.json
source.json
เป็นไฟล์ JSON ที่จำเป็นซึ่งมีข้อมูลเกี่ยวกับวิธีดึงข้อมูล
โมดูลเวอร์ชันที่เฉพาะเจาะจง สคีมาของไฟล์นี้ขึ้นอยู่กับฟิลด์ type
ซึ่งค่าเริ่มต้นคือ archive
- หาก
type
เป็นarchive
(ค่าเริ่มต้น) เวอร์ชันโมดูลนี้จะได้รับการสนับสนุนโดยกฎของที่เก็บhttp_archive
โดยจะมีการดึงข้อมูลด้วยการดาวน์โหลดที่เก็บถาวรจาก URL ที่ระบุและแยกเนื้อหา โดย รองรับฟิลด์ต่อไปนี้url
: สตริง ซึ่งเป็น URL ของที่เก็บถาวรของแหล่งที่มาmirror_urls
: รายการสตริง ซึ่งเป็น URL แบบมิเรอร์ของที่เก็บถาวรต้นฉบับ ระบบจะลองใช้ URL ตามลำดับหลังจากurl
เป็นข้อมูลสำรองintegrity
: สตริง เช็คซัม Subresource Integrity ของที่เก็บถาวรstrip_prefix
: สตริง คำนำหน้าไดเรกทอรีที่จะนำออกเมื่อแตกไฟล์ ที่เก็บต้นฉบับoverlay
: ออบเจ็กต์ JSON ที่มีไฟล์ซ้อนทับเพื่อวางซ้อนทับบน ไฟล์ที่แยกออกมา ไฟล์แพตช์จะอยู่ในไดเรกทอรี/modules/$MODULE/$VERSION/overlay
คีย์คือชื่อไฟล์ซ้อนทับ และค่าคือผลรวมตรวจสอบความสมบูรณ์ของไฟล์ซ้อนทับ โดยจะใช้การวางซ้อนก่อนไฟล์แพตช์patches
: ออบเจ็กต์ JSON ที่มีไฟล์แพตช์ที่จะใช้กับ ที่เก็บถาวรที่แยกออกมา ไฟล์แพตช์จะอยู่ในไดเรกทอรี/modules/$MODULE/$VERSION/patches
คีย์คือชื่อไฟล์แพตช์ และค่าคือผลรวมตรวจสอบความสมบูรณ์ของ ไฟล์แพตช์ ระบบจะใช้แพตช์หลังจากไฟล์ซ้อนทับและตามลำดับที่ปรากฏในpatches
patch_strip
: ตัวเลข ซึ่งเหมือนกับอาร์กิวเมนต์--strip
ของ Unixpatch
archive_type
: สตริง ประเภทการเก็บถาวรของไฟล์ที่ดาวน์โหลด (เหมือนกับtype
ในhttp_archive
)
- หาก
type
เป็นgit_repository
แสดงว่ากฎของที่เก็บgit_repository
รองรับโมดูลเวอร์ชันนี้ ซึ่งจะดึงข้อมูลโดยการโคลนที่เก็บ Git- ระบบรองรับช่องต่อไปนี้และจะส่งต่อช่องเหล่านี้ไปยังกฎ
git_repository
ของที่เก็บข้อมูลพื้นฐานโดยตรง:remote
,commit
,shallow_since
,tag
,init_submodules
,verbose
และstrip_prefix
- ระบบรองรับช่องต่อไปนี้และจะส่งต่อช่องเหล่านี้ไปยังกฎ
- หาก
type
เป็นlocal_path
เวอร์ชันโมดูลนี้จะได้รับการสนับสนุนโดยกฎที่เก็บของlocal_repository
ซึ่งลิงก์สัญลักษณ์ไปยังไดเรกทอรีในดิสก์ในเครื่อง โดยรองรับฟิลด์ต่อไปนี้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 จะ แสดงข้อผิดพลาด
- หาก
รีจิสทรีกลางของ 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
) ไฟล์นี้จะระบุเป้าหมายการสร้างและการทดสอบที่จำเป็น 2-3 รายการ ซึ่งคุณสามารถใช้เพื่อตรวจสอบความถูกต้องของโมดูลเวอร์ชันนี้ได้ นอกจากนี้ ไปป์ไลน์ CI ของ BCR ยังใช้สิ่งนี้เพื่อให้มั่นใจถึงการทำงานร่วมกัน
ระหว่างโมดูล
การเลือกรีจิสทรี
คุณใช้แฟล็ก Bazel ที่ทำซ้ำได้ --registry
เพื่อระบุรายการรีจิสทรีที่จะขอโมดูลได้ เพื่อให้คุณตั้งค่าโปรเจ็กต์เพื่อดึงข้อมูลการอ้างอิงจากรีจิสทรีของบุคคลที่สามหรือรีจิสทรีภายในได้ รีจิสทรีที่อยู่ก่อนหน้าจะมี
ลำดับความสำคัญสูงกว่า คุณสามารถใส่รายการ--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 Central Registry ถูกใช้โดยค่าเริ่มต้น แต่คุณสามารถเพิ่มกลับได้โดยเพิ่ม --registry=https://bcr.bazel.build