Bzlmod, Bazel रजिस्ट्रियों से उनकी जानकारी का अनुरोध करके, डिपेंडेंसी का पता लगाता है. ये रजिस्ट्रियां, Bazel मॉड्यूल के डेटाबेस होती हैं. फ़िलहाल, Bzlmod सिर्फ़ इंडेक्स रजिस्ट्रियों के साथ काम करता है. ये स्थानीय डायरेक्ट्री या स्टैटिक एचटीटीपी सर्वर होते हैं, जो किसी खास फ़ॉर्मेंट में काम करते हैं.
इंडेक्स रजिस्ट्री
इंडेक्स रजिस्ट्री, स्थानीय डायरेक्ट्री या स्टैटिक एचटीटीपी सर्वर होती है. इसमें मॉड्यूल की सूची के बारे में जानकारी होती है. जैसे, उनका होम पेज, उन्हें मैनेज करने वाले लोग या कंपनियां, हर वर्शन की MODULE.bazel फ़ाइल, और हर वर्शन का सोर्स पाने का तरीका. ध्यान दें कि इसके लिए, सोर्स संग्रहों को खुद उपलब्ध कराने की ज़रूरत नहीं होती.
इंडेक्स रजिस्ट्री, इस फ़ॉर्मैट में होनी चाहिए:
/bazel_registry.json: यह JSON फ़ाइल होती है. इसमें रजिस्ट्री के लिए मेटाडेटा होता है. जैसे:mirrors: इसमें सोर्स संग्रहों के लिए इस्तेमाल किए जाने वाले मिरर की सूची दी जाती है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 फ़ाइल होती है. इसमें इस मॉड्यूल वर्शन का सोर्स पाने के तरीके के बारे में जानकारी होती है- डिफ़ॉल्ट टाइप "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 जोड़कर, इसे वापस जोड़ा जा सकता है.