बेज़ल रजिस्ट्री

7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bzlmod, Bazel रजिस्ट्री से उनकी जानकारी का अनुरोध करके, डिपेंडेंसी का पता लगाता है: ये Bazel मॉड्यूल के डेटाबेस होते हैं. फ़िलहाल, Bzlmod सिर्फ़ इंडेक्स रजिस्ट्री के साथ काम करता है. ये रजिस्ट्री, किसी खास फ़ॉर्मैट का इस्तेमाल करने वाली लोकल डायरेक्ट्री या स्टैटिक एचटीटीपी सर्वर होती हैं.

इंडेक्स रजिस्ट्री

इंडेक्स रजिस्ट्री, एक लोकल डायरेक्ट्री या स्टैटिक एचटीटीपी सर्वर होती है. इसमें मॉड्यूल की सूची के बारे में जानकारी होती है. जैसे, उनका होम पेज, उन्हें मैनेज करने वाले लोग, हर वर्शन की MODULE.bazel फ़ाइल, और हर वर्शन का सोर्स फ़ेच करने का तरीका. खास तौर पर, इसे सोर्स संग्रह को दिखाने की ज़रूरत नहीं होती.

इंडेक्स रजिस्ट्री इस फ़ॉर्मैट में होनी चाहिए:

  • /bazel_registry.json: रजिस्ट्री का मेटाडेटा वाली JSON फ़ाइल, जैसे कि:
    • mirrors: सोर्स संग्रह के लिए इस्तेमाल किए जाने वाले मिरर की सूची तय करना. मिरर किया गया यूआरएल, मिरर को आपस में जोड़ता है. साथ ही, मॉड्यूल का सोर्स यूआरएल, जिसे इसकी source.json फ़ाइल Sans प्रोटोकॉल ने तय किया है. उदाहरण के लिए, अगर किसी मॉड्यूल का सोर्स यूआरएल https://foo.com/bar/baz है और mirrors में ["https://mirror1.com/", "https://example.com/mirror2/"] शामिल है, तो Bazel इन यूआरएल को क्रम से आज़माएगा: https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz, और आखिर में ओरिजनल सोर्स यूआरएल https://foo.com/bar/baz.
    • module_base_path: source.json फ़ाइल में local_repository टाइप वाले मॉड्यूल के लिए, बेस पाथ तय करना
  • /modules: इस डायरेक्ट्री में, रजिस्ट्री के हर मॉड्यूल के लिए एक सबडायरेक्ट्री होती है
  • /modules/$MODULE: एक डायरेक्ट्री, जिसमें इस मॉड्यूल के हर वर्शन के लिए एक सबडायरेक्ट्री शामिल है. साथ ही:
    • metadata.json: एक JSON फ़ाइल जिसमें मॉड्यूल के बारे में जानकारी होती है. इस फ़ाइल में ये फ़ील्ड शामिल होते हैं:
      • homepage: प्रोजेक्ट के होम पेज का यूआरएल
      • maintainers: JSON ऑब्जेक्ट की एक सूची, जिसमें से हर एक रजिस्ट्री में मॉड्यूल के मेंटेनर की जानकारी से मेल खाता है. ध्यान दें कि यह ज़रूरी नहीं है कि यह प्रोजेक्ट के लेखकों के नाम से मेल खाए
      • versions: इस रजिस्ट्री में मिलने वाले इस मॉड्यूल के सभी वर्शन की सूची
      • yanked_versions: इस मॉड्यूल के यंक किए गए वर्शन का मैप. पासकोड, वर्शन होने चाहिए और वैल्यू में यह जानकारी होनी चाहिए कि वर्शन को क्यों जैंक किया गया है. ऐसा आम तौर पर, ज़्यादा जानकारी देने वाले लिंक के साथ होना चाहिए.
  • /modules/$MODULE/$VERSION: एक डायरेक्ट्री, जिसमें ये फ़ाइलें शामिल हैं:
    • MODULE.bazel: इस मॉड्यूल वर्शन की MODULE.bazel फ़ाइल
    • source.json: यह एक JSON फ़ाइल है, जिसमें इस मॉड्यूल वर्शन के सोर्स को फ़ेच करने का तरीका बताया गया है
      • डिफ़ॉल्ट टाइप "संग्रह" होता है, जो यहां दिए गए फ़ील्ड के साथ, http_archive डेटा स्टोर करने की जगह दिखाता है:
        • url: सोर्स संग्रह का यूआरएल
        • integrity: संग्रह का सब-रिसोर्स इंटिग्रिटी चेकसम
        • strip_prefix: सोर्स संग्रह को निकालते समय, स्ट्रिप करने के लिए डायरेक्ट्री का प्रीफ़िक्स
        • patches: एक मैप, जिसमें पैच फ़ाइलें होती हैं. इन्हें, निकाले गए संग्रह पर लागू किया जाता है. पैच फ़ाइलें, /modules/$MODULE/$VERSION/patches डायरेक्ट्री में मौजूद होती हैं. कुंजियां, पैच फ़ाइल के नाम हैं और वैल्यू, पैच फ़ाइलों के इंटिग्रिटी चेकसम हैं
        • patch_strip: यह यूनिक्स patch के --strip आर्ग्युमेंट जैसा ही है.
        • archive_type: डाउनलोड की गई फ़ाइल का संग्रह टाइप (http_archive पर type जैसा ही). डिफ़ॉल्ट रूप से, संग्रह का टाइप, यूआरएल के फ़ाइल एक्सटेंशन से तय होता है. अगर फ़ाइल का कोई एक्सटेंशन नहीं है, तो इनमें से किसी एक को साफ़ तौर पर बताया जा सकता है: "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", "tar.zst", "tzst", tar.bz2, "ar" या "deb".
      • टाइप को बदलकर, git रिपॉज़िटरी का इस्तेमाल किया जा सकता है. इसके लिए, इन फ़ील्ड का इस्तेमाल करें:
        • type: git_repository
        • इन फ़ील्ड के बारे में https://baaz.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> को करना चाहिए. ऐसा नहीं करने पर, Basel एक गड़बड़ी को आगे बढ़ाएगा
    • patches/: पैच फ़ाइलों वाली वैकल्पिक डायरेक्ट्री. इसका इस्तेमाल सिर्फ़ तब किया जाता है, जब source.json का टाइप "संग्रह" हो

बेज़ल सेंट्रल रजिस्ट्री

https://bcr.bazel.build/ में मौजूद Basel Central Registry (BCR) एक इंडेक्स रजिस्ट्री है. इस रजिस्ट्री में, GitHub रेपो के साथ मिला कॉन्टेंट होता है bazelbuild/bazel-central-registry. https://registry.bazel.build/ पर जाकर, वेब फ़्रंटएंड का इस्तेमाल करके इसके कॉन्टेंट को ब्राउज़ किया जा सकता है.

Bazel कम्यूनिटी, बीसीआर को मैनेज करती है. योगदान देने वाले लोग, पुश अनुरोध सबमिट कर सकते हैं. बीसीआर योगदान से जुड़े दिशा-निर्देश देखें.

सामान्य इंडेक्स रजिस्ट्री के फ़ॉर्मैट के अलावा, बीसीआर को हर मॉड्यूल वर्शन (/modules/$MODULE/$VERSION/presubmit.yml) के लिए presubmit.yml फ़ाइल की ज़रूरत होती है. इस फ़ाइल में कुछ ऐसे बिल्ड और टेस्ट टारगेट के बारे में बताया गया है जिनका इस्तेमाल करके इस मॉड्यूल के वर्शन की वैधता की जांच की जा सकती है. बीसीआर की सीआई पाइपलाइन भी इसका इस्तेमाल यह पक्का करने के लिए करती हैं कि मॉड्यूल के बीच इंटरऑपरेबिलिटी (दूसरे सिस्टम के साथ काम करना) हो.

रजिस्ट्री चुनना

बार-बार इस्तेमाल किए जा सकने वाले बेज़ल फ़्लैग --registry का इस्तेमाल, रजिस्ट्री की सूची बनाने के लिए किया जा सकता है. इससे मॉड्यूल का अनुरोध करने के लिए, अपने प्रोजेक्ट को किसी तीसरे पक्ष या इंटरनल रजिस्ट्री से डिपेंडेंसी फ़ेच करने के लिए सेट अप किया जा सकता है. पिछली रजिस्ट्री को प्राथमिकता मिलती है. सुविधा के लिए, अपने प्रोजेक्ट की .bazelrc फ़ाइल में --registry फ़्लैग की एक सूची बनाई जा सकती है.

अगर आपकी रजिस्ट्री को GitHub पर होस्ट किया गया है (उदाहरण के लिए, bazelbuild/bazel-central-registry के फ़ोर्क के तौर पर), तो raw.githubusercontent.com में आपके --registry वैल्यू के लिए बिना किसी GitHub पते का होना ज़रूरी है. उदाहरण के लिए, my-org फ़ोर्क की main ब्रांच पर, --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/ को सेट किया जाएगा.

--registry फ़्लैग का इस्तेमाल करने पर, Bazel Central Registry का इस्तेमाल डिफ़ॉल्ट रूप से नहीं किया जा सकता. हालांकि, --registry=https://bcr.bazel.build जोड़कर इसे फिर से जोड़ा जा सकता है.