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/"]
शामिल है, तो Bazelhttps://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
: Unixpatch
के--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
को जोड़कर, इसे फिर से इस्तेमाल किया जा सकता है.