รีจิสทรี Bazel

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: แผนที่ของเวอร์ชัน yanked ของโมดูลนี้ คีย์ควรเป็นเวอร์ชันที่จะ yank และค่าควรเป็นคำอธิบายว่าทำไมจึง yank เวอร์ชันนั้น โดยควรมีลิงก์ไปยังข้อมูลเพิ่มเติม
  • /modules/$MODULE/$VERSION: ไดเรกทอรีที่มีไฟล์ต่อไปนี้
    • MODULE.bazel: ไฟล์ MODULE.bazel ของโมดูลเวอร์ชันนี้
    • source.json: ไฟล์ JSON ที่มีข้อมูลเกี่ยวกับวิธีดึงข้อมูลต้นฉบับของโมดูลเวอร์ชันนี้
      • ประเภทเริ่มต้นคือ "archive" ซึ่งแสดงถึง repo http_archive โดยมีช่องต่อไปนี้
        • url: URL ของไฟล์เก็บถาวรต้นฉบับ
        • mirror_urls: รายการสตริง ซึ่งเป็น URL มิเรอร์ของไฟล์เก็บถาวรต้นฉบับ ระบบจะลองใช้ URL ตามลำดับหลังจาก url เป็นข้อมูลสำรอง
        • integrity: เช็กซัม Subresource Integrity ของไฟล์เก็บถาวร
        • strip_prefix: คำนำหน้าไดเรกทอรีที่จะนำออกเมื่อแยกไฟล์เก็บถาวรต้นฉบับ
        • patches: แผนที่ที่มีไฟล์แพตช์ที่จะใช้กับไฟล์เก็บถาวรที่แยกออกมา ไฟล์แพตช์จะอยู่ในไดเรกทอรี /modules/$MODULE/$VERSION/patches คีย์คือชื่อไฟล์แพตช์ และค่าคือเช็กซัม Integrity ของไฟล์แพตช์
        • 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
      • คุณสามารถเปลี่ยนประเภทเพื่อใช้เส้นทางในเครื่อง ซึ่งแสดงถึง repo local_repository โดยมีช่องต่อไปนี้
        • type: local_path
        • path: เส้นทางในเครื่องไปยัง repo ซึ่งคำนวณได้ดังนี้
          • หาก 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 (BCR) ที่ https://bcr.bazel.build/ คือรีจิสทรีดัชนี ที่มีเนื้อหาที่รองรับโดย repo GitHub bazelbuild/bazel-central-registry คุณสามารถเรียกดูเนื้อหาได้โดยใช้ส่วนหน้าเว็บที่ https://registry.bazel.build/.

ชุมชน Bazel เป็นผู้ดูแล BCR และยินดีรับผู้มีส่วนร่วมส่งคำขอ Pull ดูหลักเกณฑ์การมีส่วนร่วมใน 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 ของ Fork my-org คุณจะต้องตั้งค่า --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/

การใช้แฟล็ก --registry จะหยุดไม่ให้ใช้รีจิสทรีกลางของ Bazel โดยค่าเริ่มต้น แต่คุณสามารถเพิ่มกลับได้โดยเพิ่ม --registry=https://bcr.bazel.build