Bzlmod, डिपेंडेंसी का पता लगाने के लिए, Bazel रजिस्ट्री से उनकी जानकारी का अनुरोध करता है: ये Bazel मॉड्यूल के डेटाबेस होते हैं. Bazel सिर्फ़ एक तरह की रजिस्ट्री के साथ काम करता है — इंडेक्स रजिस्ट्री — स्थानीय डायरेक्ट्री या किसी खास फ़ॉर्मैट का इस्तेमाल करने वाले स्टैटिक एचटीटीपी सर्वर.
इंडेक्स रजिस्ट्री
इंडेक्स रजिस्ट्री, एक लोकल डायरेक्ट्री या स्टैटिक एचटीटीपी सर्वर होती है. इसमें मॉड्यूल की सूची के बारे में जानकारी होती है. जैसे, उनका होम पेज, उन्हें मैनेज करने वाले लोग, हर वर्शन की MODULE.bazel
फ़ाइल, और हर वर्शन का सोर्स फ़ेच करने का तरीका. ध्यान दें, इसे सोर्स के संग्रह खुद उपलब्ध कराने की ज़रूरत नहीं है.
इंडेक्स रजिस्ट्री का फ़ॉर्मैट इस तरह होना चाहिए:
/bazel_registry.json
: रजिस्ट्री के मेटाडेटा वाली वैकल्पिक JSON फ़ाइल./modules
: इस डायरेक्ट्री में, रजिस्ट्री के हर मॉड्यूल के लिए एक सबडायरेक्ट्री होती है/modules/$MODULE
: यह एक डायरेक्ट्री है, जिसमें$MODULE
नाम के मॉड्यूल के हर वर्शन के लिए एक सबडायरेक्ट्री होती है. साथ ही, इसमें इस मॉड्यूल का मेटाडेटा शामिल करने वालीmetadata.json
फ़ाइल भी होती है./modules/$MODULE/$VERSION
: ऐसी डायरेक्ट्री जिसमें ये फ़ाइलें शामिल हैं:MODULE.bazel
: इस मॉड्यूल वर्शन कीMODULE.bazel
फ़ाइल. ध्यान दें कि यहMODULE.bazel
फ़ाइल, Bazel की बाहरी डिपेंडेंसी रिज़ॉल्यूशन के दौरान पढ़ी जाती है, न कि सोर्स संग्रह से (जब तक कि कोई नॉन-रजिस्ट्री बदलाव न किया गया हो).source.json
: इस मॉड्यूल वर्शन के सोर्स को फ़ेच करने के तरीके के बारे में जानकारी देने वाली JSON फ़ाइलpatches/
: पैच फ़ाइलों वाली वैकल्पिक डायरेक्ट्री. इसका इस्तेमाल सिर्फ़ तब किया जाता है, जबsource.json
का टाइप "संग्रह" होoverlay/
: ओवरले फ़ाइलों वाली वैकल्पिक डायरेक्ट्री. इसका इस्तेमाल सिर्फ़ तब किया जाता है, जबsource.json
का टाइप "संग्रह" हो
bazel_registry.json
bazel_registry.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_path
टाइप वाले मॉड्यूल के लिए, बेस पाथ बताने वाली स्ट्रिंग
metadata.json
metadata.json
एक वैकल्पिक JSON फ़ाइल है, जिसमें मॉड्यूल के बारे में जानकारी होती है. इसमें ये फ़ील्ड होते हैं:
versions
: स्ट्रिंग का कलेक्शन, जिसमें से हर स्ट्रिंग इस रजिस्ट्री में मौजूद मॉड्यूल के वर्शन को दिखाती है. यह कलेक्शन, मॉड्यूल डायरेक्ट्री के चाइल्ड से मैच करना चाहिए.yanked_versions
: यह एक JSON ऑब्जेक्ट है, जिसमें इस मॉड्यूल के हटाए गए वर्शन की जानकारी दी गई है. कुंजियों में, हटाए जाने वाले वर्शन होने चाहिए. साथ ही, वैल्यू में यह जानकारी होनी चाहिए कि वर्शन को क्यों हटाया गया है. साथ ही, ज़्यादा जानकारी के लिए लिंक भी होना चाहिए.
ध्यान दें कि बीसीआर के लिए, metadata.json
फ़ाइल में ज़्यादा जानकारी देनी होगी.
source.json
source.json
एक ज़रूरी JSON फ़ाइल है. इसमें किसी मॉड्यूल के किसी खास वर्शन को फ़ेच करने के तरीके के बारे में जानकारी होती है. इस फ़ाइल का स्कीमा, इसके type
फ़ील्ड पर निर्भर करता है. यह डिफ़ॉल्ट रूप से archive
पर सेट होता है.
- अगर
type
की वैल्यूarchive
(डिफ़ॉल्ट) है, तो इस मॉड्यूल वर्शन कोhttp_archive
रिपॉज़िटरी नियम के तहत बैक अप किया जाता है. इसे किसी दिए गए यूआरएल से संग्रह डाउनलोड करके और उसके कॉन्टेंट को निकालकर फ़ेच किया जाता है. यह इन फ़ील्ड के साथ काम करता है:url
: सोर्स संग्रह का यूआरएल, एक स्ट्रिंगintegrity
: स्ट्रिंग, संग्रह का सब-रिसोर्स इंटिग्रिटी चेकसमstrip_prefix
: एक स्ट्रिंग, सोर्स संग्रह को निकालते समय डायरेक्ट्री का प्रीफ़िक्स हटाने के लिएoverlay
: एक JSON ऑब्जेक्ट, जिसमें एक्सट्रैक्ट किए गए संग्रह के ऊपर लेयर करने के लिए ओवरले फ़ाइलें होती हैं. पैच फ़ाइलें,/modules/$MODULE/$VERSION/overlay
डायरेक्ट्री में मौजूद होती हैं. कुंजियां, ओवरले फ़ाइल के नाम होती हैं और वैल्यू, ओवरले फ़ाइलों की पूरी सुरक्षा से जुड़ा चेकसम होता है. ओवरले, पैच फ़ाइलों से पहले लागू किए जाते हैं.patches
: एक JSON ऑब्जेक्ट, जिसमें पैच फ़ाइलें होती हैं. इन्हें, निकाले गए संग्रह पर लागू किया जाता है. पैच फ़ाइलें,/modules/$MODULE/$VERSION/patches
डायरेक्ट्री में मौजूद होती हैं. कुंजियां, पैच फ़ाइल के नाम होती हैं और वैल्यू, पैच फ़ाइलों की पूरी सुरक्षा से जुड़ा चेकसम होता है. पैच, ओवरले फ़ाइलों के बाद लागू किए जाते हैं.patch_strip
: कोई संख्या; यह यूनिक्सpatch
के--strip
आर्ग्युमेंट जैसी ही होती है.archive_type
: स्ट्रिंग, डाउनलोड की गई फ़ाइल का संग्रह टाइप (http_archive
परtype
जैसा ही).
- अगर
type
git_repository
है, तो इस मॉड्यूल वर्शन का बैक अप,git_repository
डेटा स्टोर करने की जगह के नियम से लिया जाता है. इसे Git डेटा स्टोर करने की जगह को क्लोन करके फ़ेच किया जाता है.- ये फ़ील्ड इस्तेमाल किए जा सकते हैं और इन्हें सीधे
git_repository
repo नियम पर भेजा जाता है:remote
,commit
,shallow_since
,tag
,init_submodules
,verbose
, औरstrip_prefix
.
- ये फ़ील्ड इस्तेमाल किए जा सकते हैं और इन्हें सीधे
- अगर
type
local_path
है, तो इस मॉड्यूल वर्शन का बैक अप, रेपो केlocal_repository
नियम से लिया जाता है. साथ ही, इसे लोकल डिस्क पर मौजूद डायरेक्ट्री से लिंक किया जाता है. यह इन फ़ील्ड के साथ काम करता है: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 एक गड़बड़ी का मैसेज दिखाएगा
- अगर
Bazel सेंट्रल रजिस्ट्री
https://bcr.bazel.build/ पर मौजूद Bazel Central Registry (BCR), एक इंडेक्स रजिस्ट्री है. इसमें GitHub के डेटा स्टोर करने की जगह bazelbuild/bazel-central-registry
से मिले कॉन्टेंट का इस्तेमाल किया जाता है. https://registry.bazel.build/ पर वेब फ़्रंटएंड का इस्तेमाल करके, इसके कॉन्टेंट को ब्राउज़ किया जा सकता है.
Bazel कम्यूनिटी, बीसीआर को मैनेज करती है. योगदान देने वाले लोग, पुश अनुरोध सबमिट कर सकते हैं. बीसीआर में योगदान देने के दिशा-निर्देश देखें.
सामान्य इंडेक्स रजिस्ट्री के फ़ॉर्मैट का पालन करने के अलावा, बीसीआर के लिए हर मॉड्यूल वर्शन (/modules/$MODULE/$VERSION/presubmit.yml
) के लिए एक presubmit.yml
फ़ाइल ज़रूरी है. इस फ़ाइल में, कुछ ज़रूरी बिल्ड और टेस्ट टारगेट बताए गए हैं. इनका इस्तेमाल करके, इस मॉड्यूल वर्शन की पुष्टि की जा सकती है. BCR की सीआई पाइपलाइन भी इसका इस्तेमाल करती है, ताकि मॉड्यूल के बीच इंटरऑपरेबिलिटी की पुष्टि की जा सके.
रजिस्ट्री चुनना
बार-बार इस्तेमाल किए जा सकने वाले 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
जोड़कर इसे फिर से जोड़ा जा सकता है.