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
इस रजिस्ट्री में मिलने वाले मॉड्यूल के सभी वर्शन की सूची- इस मॉड्यूल के यांक किए गए वर्शन का मैप. कुंजियां, यांक के वर्शन और वैल्यू इस बात का ब्यौरा होनी चाहिए कि वर्शन यैं क्यों किया जा रहा है. इसमें, ज़्यादा जानकारी के लिए एक लिंक शामिल होना चाहिए
/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
तर्क की तरह है.- डाउनलोड की गई फ़ाइल का संग्रह प्रकार (
http_archive
परtype
के जैसा). डिफ़ॉल्ट रूप से, संग्रह प्रकार को URL के फ़ाइल एक्सटेंशन से तय किया जाता है. अगर फ़ाइल में कोई एक्सटेंशन नहीं है, तो इनमें से किसी एक को साफ़ तौर पर बताया जा सकता है:"zip"
,"jar"
,"war"
,"aar"
,"tar"
,"tar.gz"
,"tgz"
,"tar.xz"
,"txz"
,"tar.zst"
,"tzst"
,tar.bz2
,"ar"
या"deb"
.
- टाइप को किसी लोकल पाथ का इस्तेमाल करने के लिए बदला जा सकता है. यह फ़ील्ड इन फ़ील्ड के साथ
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>
इसका इस्तेमाल कर सकती है. अगर ऐसा नहीं है, तो बज़ल आपकी साइट पर कोई गड़बड़ी
- अगर
- डिफ़ॉल्ट प्रकार "संग्रह" है, जो
patches/
: पैच फ़ाइलों वाली वैकल्पिक डायरेक्ट्री, जिसका इस्तेमाल सिर्फ़ तब किया जाता है, जबsource.json
में "संग्रहित करें" टाइप हो
Bazel Central रजिस्ट्री
https://bcr.bazel.build/ में बैजल सेंट्रल रजिस्ट्री (बीसीआर), इंडेक्स
रजिस्ट्री है. इसमें GitHub की इमेज
bazelbuild/bazel-central-registry
का इस्तेमाल किया जाता है.
आप https://registry.bazel.build/ पर वेब फ़्रंटएंड का इस्तेमाल करके इसकी सामग्री ब्राउज़ कर सकते हैं.
बीज़ल समुदाय में बीसीआर की देखरेख होती है और योगदान देने वाले लोग पुल अनुरोध सबमिट कर सकते हैं. बीसीआर के योगदान के लिए दिशा-निर्देश देखें.
सामान्य इंडेक्स रजिस्ट्री के फ़ॉर्मैट का पालन करने के अलावा, बीसीआर के लिए हर मॉड्यूल वर्शन (/modules/$MODULE/$VERSION/presubmit.yml
) के लिए एक presubmit.yml
फ़ाइल ज़रूरी होती है. इस फ़ाइल में कुछ ज़रूरी बिल्ड और टेस्ट टारगेट की जानकारी होती है. इनका इस्तेमाल करके आप इस मॉड्यूल वर्शन की वैधता की जांच कर सकते हैं. बीसीआर की सीआई पाइपलाइन इसका इस्तेमाल यह भी पक्का करने के लिए करती हैं कि
मॉड्यूल के बीच इंटरऑपरेबिलिटी (दूसरे सिस्टम के साथ काम करना) हो.
रजिस्ट्री चुनना
दोहराए जाने वाले Bazel फ़्लैग --registry
का इस्तेमाल, मॉड्यूल का अनुरोध करने के लिए रजिस्ट्री की सूची तय करने के लिए किया जा सकता है.
इससे आप अपने प्रोजेक्ट को किसी तीसरे पक्ष या अंदरूनी रजिस्ट्री से डिपेंडेंसी पाने के लिए सेट अप कर सकते हैं. इससे पहले, रजिस्ट्री को प्राथमिकता दी जाती है. सुविधा के लिए, अपने प्रोजेक्ट की .bazelrc
फ़ाइल में --registry
फ़्लैग की सूची बनाई जा सकती है.
अगर आपकी रजिस्ट्री GitHub पर होस्ट की गई है (उदाहरण के लिए,
bazelbuild/bazel-central-registry
के फ़ोर्क की तरह), तो आपके --registry
मान को raw.githubusercontent.com
के तहत RAW
पते की ज़रूरत होगी. उदाहरण के लिए, my-org
फ़ोर्क की main
ब्रांच पर आप --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
सेट करेंगे.
--registry
फ़्लैग का इस्तेमाल करने पर, Bazel Central Registry का इस्तेमाल डिफ़ॉल्ट रूप से बंद हो जाता है. हालांकि, --registry=https://bcr.bazel.build
को जोड़कर, इसे वापस जोड़ा जा सकता है.