รีจิสทรี Bazel

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 8.0 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bzlmod จะค้นหาข้อมูลพึ่งพาโดยขอข้อมูลจาก registries ของ 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 ของที่เก็บถาวรของแหล่งที่มา
        • integrity: Checksum Subresource 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"
      • คุณสามารถเปลี่ยนประเภทให้ใช้ที่เก็บ 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 (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 ยังใช้ข้อมูลนี้เพื่อตรวจสอบความสามารถในการทำงานร่วมกันระหว่างโมดูลด้วย

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

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

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