รีจิสทรี Bazel

รายงานปัญหา ดูแหล่งที่มา

Bzlmod ค้นพบทรัพยากร Dependency ด้วยการขอข้อมูลจากรีจิสทรีของ 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 ที่มีข้อมูลเกี่ยวกับวิธีดึงข้อมูลแหล่งที่มาของโมดูลเวอร์ชันนี้
      • ประเภทเริ่มต้นคือ "เก็บถาวร" ซึ่งแสดงถึงที่เก็บ http_archive พร้อมช่องต่อไปนี้
        • url: URL ของที่เก็บถาวรแหล่งที่มา
        • integrity: ผลรวมตรวจสอบของ ทรัพยากรย่อย ความสมบูรณ์ ของที่เก็บถาวร
        • strip_prefix: คำนำหน้าไดเรกทอรีของ Strip เมื่อแตกไฟล์ที่เก็บถาวรต้นทาง
        • patches: แผนที่ที่มีไฟล์แพตช์เพื่อใช้กับที่เก็บถาวรที่แตกออกมา ไฟล์แพตช์จะอยู่ภายใต้ไดเรกทอรี /modules/$MODULE/$VERSION/patches คีย์คือชื่อไฟล์แพตช์ และค่าคือการตรวจสอบความสมบูรณ์ของไฟล์แพตช์
        • patch_strip: เหมือนกับอาร์กิวเมนต์ --strip ของ Unix patch
        • 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 เป็นเส้นทางแบบสัมพัทธ์ทั้ง 2 เส้นทาง ค่านั้นจะแปลงเป็น <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 จากรีจิสทรีของบุคคลที่สามหรือรีจิสทรีภายในได้ รีจิสทรีก่อนหน้านี้ จะมีความสำคัญเหนือกว่า คุณใส่รายการแฟล็ก --registry ในไฟล์ .bazelrc ของโปรเจ็กต์ได้เพื่อความสะดวก

หากรีจิสทรีโฮสต์อยู่บน GitHub (เช่น เป็น Fork ของ 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