รีจิสทรี Bazel

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

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 ของ 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"
      • ประเภทอาจเปลี่ยนไปใช้เส้นทางภายในซึ่งเป็นตัวแทนของที่เก็บ 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