รีจิสทรี Bazel

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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/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 ที่มีข้อมูลเกี่ยวกับวิธีดึงข้อมูล แหล่งที่มาของโมดูลเวอร์ชันนี้
      • ประเภทเริ่มต้นคือ "archive" ซึ่งแสดงถึงที่เก็บ http_archive โดยมีฟิลด์ต่อไปนี้
        • url: URL ของที่เก็บแหล่งที่มา
        • mirror_urls: รายการสตริง ซึ่งเป็น URL แบบมิเรอร์ของที่เก็บถาวรต้นฉบับ ระบบจะลองใช้ URL ตามลำดับหลังจาก url เป็นข้อมูลสำรอง
        • integrity: ผลรวมตรวจสอบ Subresource Integrity ของที่เก็บถาวร
        • strip_prefix: คำนำหน้าไดเรกทอรีที่จะนำออกเมื่อแตกไฟล์ ที่เก็บต้นฉบับ
        • patches: แผนที่ที่มีไฟล์แพตช์ที่จะใช้กับ ที่เก็บถาวรที่แยกออกมา ไฟล์แพตช์จะอยู่ในไดเรกทอรี /modules/$MODULE/$VERSION/patches คีย์คือ ชื่อไฟล์แพตช์ และค่าคือผลรวมตรวจสอบความสมบูรณ์ของ ไฟล์แพตช์
        • patch_strip: เหมือนกับอาร์กิวเมนต์ --strip ของ patch ใน Unix
        • 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 เป็นเส้นทางแบบสัมพัทธ์ ระบบจะ เปลี่ยนเป็น <registry_path>/<module_base_path>/<path> รีจิสทรีต้องโฮสต์ในเครื่องและใช้โดย --registry=file://<registry_path> ไม่เช่นนั้น Bazel จะ แสดงข้อผิดพลาด
    • patches/: ไดเรกทอรีที่ไม่บังคับซึ่งมีไฟล์แพตช์ ใช้เฉพาะเมื่อ source.json มีประเภท "archive"

รีจิสทรีกลางของ 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) ไฟล์นี้จะระบุเป้าหมายการสร้างและการทดสอบที่จำเป็นบางอย่าง ซึ่งคุณสามารถใช้เพื่อตรวจสอบความถูกต้องของโมดูลเวอร์ชันนี้ได้ นอกจากนี้ ไปป์ไลน์ CI ของ BCR ยังใช้สิ่งนี้เพื่อให้มั่นใจถึงการทำงานร่วมกัน ระหว่างโมดูล

การเลือกรีจิสทรี

คุณใช้แฟล็ก --registry ของ Bazel ที่ทำซ้ำได้เพื่อระบุรายการรีจิสทรีที่จะขอโมดูลจากได้ จึงตั้งค่าโปรเจ็กต์ให้ดึงข้อมูลการอ้างอิงจากรีจิสทรีของบุคคลที่สามหรือรีจิสทรีภายในได้ โดยรีจิสทรีที่เก่ากว่าจะมี ลำดับความสำคัญสูงกว่า คุณสามารถใส่รายการ--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 โดยค่าเริ่มต้น แต่คุณจะเพิ่มกลับได้โดยเพิ่ม --registry=https://bcr.bazel.build