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
जोड़कर इसे फिर से जोड़ा जा सकता है.