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

समस्या की शिकायत करें स्रोत देखें

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

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

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

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

  • /bazel_registry.json: एक JSON फ़ाइल जिसमें रजिस्ट्री का मेटाडेटा मौजूद हो. जैसे:
    • mirrors: सोर्स संग्रह के लिए इस्तेमाल किए जाने वाले मिरर की सूची तय करता है. मिरर किया गया यूआरएल, मिरर की स्ट्रिंग को जोड़कर बनाया जाता है. साथ ही, इसकी source.json फ़ाइल के ज़रिए बताए गए मॉड्यूल का सोर्स यूआरएल, प्रोटोकॉल से अलग होता है. उदाहरण के लिए, अगर मॉड्यूल के सोर्स यूआरएल में 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: Unix 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".
      • गिट रिपॉज़िटरी का इस्तेमाल करने के लिए, इस टाइप को बदला जा सकता है. ऐसा इन फ़ील्ड के साथ किया जा सकता है:
        • 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 का टाइप "संग्रह" होता है

Bazel सेंट्रल रजिस्ट्री

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

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

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

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

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

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

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