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: यह इस मॉड्यूल के yanked versions वर्शन का मैप है. कुंजियां, yank करने के लिए वर्शन होनी चाहिए. वहीं, वैल्यू में यह जानकारी होनी चाहिए कि वर्शन को yank क्यों किया गया है. इसमें ज़्यादा जानकारी का लिंक भी शामिल होना चाहिए
/modules/$MODULE/$VERSION: यह एक डायरेक्ट्री है. इसमें ये फ़ाइलें शामिल होती हैं:MODULE.bazel: यह इस मॉड्यूल वर्शन कीMODULE.bazelफ़ाइल हैsource.json: यह एक JSON फ़ाइल है. इसमें इस मॉड्यूल वर्शन का सोर्स पाने के तरीके के बारे में जानकारी होती है- डिफ़ॉल्ट टाइप "archive" होता है. यह
http_archiveरेपो को दिखाता है. इसमें ये फ़ील्ड शामिल होते हैं:url: यह सोर्स संग्रह का यूआरएल हैintegrity: यह संग्रह का सबरिसॉर्स इंटिग्रिटी चेकसम हैstrip_prefix: यह सोर्स संग्रह को एक्सट्रैक्ट करते समय हटाने के लिए डायरेक्ट्री प्रीफ़िक्स हैpatches: यह एक मैप है. इसमें एक्सट्रैक्ट किए गए संग्रह पर लागू करने के लिए, पैच फ़ाइलें शामिल होती हैं. पैच फ़ाइलें,/modules/$MODULE/$VERSION/patchesडायरेक्ट्री में मौजूद होती हैं. कुंजियां, पैच फ़ाइल के नाम होती हैं. वहीं, वैल्यू, पैच फ़ाइल का इंटिग्रिटी चेकसम होती हैंpatch_strip: यह Unixpatchके--stripआर्ग्युमेंट जैसा ही होता है.archive_type: यह डाउनलोड की गई फ़ाइल का संग्रह टाइप है. यहtypeपर मौजूदhttp_archiveजैसा ही होता है. डिफ़ॉल्ट रूप से, संग्रह टाइप, यूआरएल के फ़ाइल एक्सटेंशन से तय होता है. अगर फ़ाइल का कोई एक्सटेंशन नहीं है, तो इनमें से कोई एक एक्सटेंशन साफ़ तौर पर बताया जा सकता है:"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 पर बताए गए तरीके के मुताबिक होते हैं:
remotecommitshallow_sincetaginit_submodulesverbosestrip_prefix
- टाइप को बदलकर, लोकल पाथ का इस्तेमाल किया जा सकता है. यह
local_repositoryरेपो को दिखाता है. इसमें ये फ़ील्ड शामिल होते हैं:type:local_pathpath: यह रेपो का लोकल पाथ है. इसकी गिनती इस तरह की जाती है:- अगर
pathएक ऐब्सलूट पाथ है, तो यह वैसा ही रहता है - अगर
pathएक रिलेटिव पाथ है औरmodule_base_pathएक ऐब्सलूट पाथ है, तो यह<module_base_path>/<path>पर रिज़ॉल्व होता है - अगर
pathऔरmodule_base_path, दोनों रिलेटिव पाथ हैं, तो यह<registry_path>/<module_base_path>/<path>पर रिज़ॉल्व होता है. रजिस्ट्री को स्थानीय तौर पर होस्ट किया जाना चाहिए और--registry=file://<registry_path>का इस्तेमाल करके ऐक्सेस किया जाना चाहिए. ऐसा न करने पर, Bazel एक गड़बड़ी दिखाएगा
- अगर
- डिफ़ॉल्ट टाइप "archive" होता है. यह
patches/: यह एक ज़रूरी डायरेक्ट्री नहीं है. इसमें पैच फ़ाइलें शामिल होती हैं. इसका इस्तेमाल सिर्फ़ तब किया जाता है, जबsource.jsonका टाइप "archive" हो
Bazel Central Registry
Bazel Central Registry (बीसीआर), https://bcr.bazel.build/ पर मौजूद एक इंडेक्स
रजिस्ट्री है. इसका कॉन्टेंट, GitHub रेपो
bazelbuild/bazel-central-registry से लिया गया है.
इसके कॉन्टेंट को,
https://registry.bazel.build/ पर मौजूद वेब फ़्रंटएंड का इस्तेमाल करके ब्राउज़ किया जा सकता है.
बीसीआर को Bazel कम्यूनिटी मैनेज करती है. इसमें पुल अनुरोध सबमिट करने के लिए, योगदान देने वाले लोगों का स्वागत है. बीसीआर में योगदान देने के लिए दिशा-निर्देश देखें.
बीसीआर के लिए, सामान्य इंडेक्स रजिस्ट्री के फ़ॉर्मैट के अलावा, हर मॉड्यूल वर्शन
के लिए presubmit.yml फ़ाइल की ज़रूरत होती है
(/modules/$MODULE/$VERSION/presubmit.yml). इस फ़ाइल में, कुछ ज़रूरी
बिल्ड और टेस्ट टारगेट शामिल होते हैं. इनका इस्तेमाल, इस मॉड्यूल
वर्शन की पुष्टि करने के लिए किया जा सकता है. बीसीआर की सीआई पाइपलाइन भी इसका इस्तेमाल, मॉड्यूल के बीच इंटरऑपरेबिलिटी पक्का करने के लिए करती है.
रजिस्ट्रियां चुनना
Bazel के --registry फ़्लैग का इस्तेमाल, उन रजिस्ट्रियों की सूची तय करने के लिए किया जा सकता है जिनसे मॉड्यूल का अनुरोध किया जाना है. इस फ़्लैग को एक से ज़्यादा बार इस्तेमाल किया जा सकता है. इससे, अपने प्रोजेक्ट को तीसरे पक्ष या इंटरनल रजिस्ट्री से डिपेंडेंसी फ़ेच करने के लिए सेट अप किया जा सकता है. पहले की रजिस्ट्रियों को प्राथमिकता दी जाती है. सुविधा के लिए, अपने प्रोजेक्ट की .bazelrc फ़ाइल में --registry फ़्लैग की सूची शामिल की जा सकती है.
अगर आपकी रजिस्ट्री GitHub पर होस्ट की गई है (उदाहरण के लिए, bazelbuild/bazel-central-registry के फ़ोर्क के तौर पर), तो --registry की वैल्यू के लिए, raw.githubusercontent.com में मौजूद GitHub के रॉ पते की ज़रूरत होती है. उदाहरण के लिए, main
ब्रांच पर my-org फ़ोर्क, आपको सेट करना होगा
--registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/.
--registry फ़्लैग का इस्तेमाल करने पर, Bazel Central Registry का इस्तेमाल डिफ़ॉल्ट रूप से नहीं किया जा सकेगा. हालांकि, --registry=https://bcr.bazel.build जोड़कर, इसे वापस जोड़ा जा सकता है.