รีจิสทรี Bazel

รายงานปัญหา ดูแหล่งที่มา /3} /4} {3/4} {3/4} {3/4} {3/4} /4.

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