नियम के साथ काम करना

समस्या की शिकायत करें सोर्स देखें

Bazel Starlark के नियम, दो मामलों में Bazel LTS के रिलीज़ होने की सुविधा पर काम करना बंद कर सकते हैं:

  1. यह नियम, आने वाले समय में एलटीएस रिलीज़ के साथ सही से काम नहीं करेगा. इसकी वजह यह है कि जिस सुविधा पर निर्भर होना होता है उसे HEAD में Bazel से हटा दिया जाता है.
  2. यह नियम, मौजूदा या पुराने एलटीएस रिलीज़ के साथ काम नहीं करता है. ऐसा इसलिए है, क्योंकि जिस सुविधा पर निर्भर है वह सिर्फ़ नई बेज़ल एलटीएस रिलीज़ में उपलब्ध है.

इस दौरान, यह नियम उपयोगकर्ताओं के लिए भी ऐसे बदलाव कर सकता है जो काम नहीं करते. Bazel में टूटे हुए बदलावों के साथ, नियम वर्शन को अपग्रेड करने और Bazel वर्शन को अपग्रेड करने से, बेज़ल उपयोगकर्ताओं को अक्सर निराशा हो सकती है. इस पेज में यह बताया गया है कि नियम बनाने वालों को किस तरह Bazel से नियमों का पालन करना चाहिए, ताकि उपयोगकर्ता बेज़ल और नियमों को आसानी से अपग्रेड कर सकें.

मैनेज करने लायक माइग्रेशन की प्रोसेस

हालांकि, बैज़ल के हर वर्शन और नियम के हर वर्शन के साथ काम करने की गारंटी नहीं दी जा सकती, लेकिन हमारा मकसद यह पक्का करना है कि Bazel उपयोगकर्ताओं के लिए माइग्रेशन की प्रोसेस मैनेज की जा सके. मैनेज की जा सकने वाली माइग्रेशन की प्रोसेस को एक ऐसी प्रक्रिया कहा जाता है जिसमें उपयोगकर्ताओं को नियम के मुख्य वर्शन और Bazel के मुख्य वर्शन को एक साथ अपग्रेड करने पर ज़ोर नहीं दिया जाता. इसकी मदद से, उपयोगकर्ता एक बार में एक स्रोत से किए गए बदलावों को मैनेज कर सकते हैं.

उदाहरण के लिए, यहां दिए गए डाइमेंशन के साथ काम करने वाला मैट्रिक्स:

  • Rules_foo 1.x + Bazel 4.x से Rules_foo 2.x + Bazel 5.x पर माइग्रेट करना, मैनेज करने लायक नहीं माना जाता है. ऐसा इसलिए है, क्योंकि उपयोगकर्ताओं को एक ही समय में, Rules_foo और Bazel के मेजर वर्शन को अपग्रेड करना होता है.
  • Rules_foo 2.x + Bazel 5.x से Rules_foo 3.x + Bazel 6.x पर माइग्रेट करना, मैनेजमेंट के लायक माना जाता है. उपयोगकर्ता सबसे पहले Bazel वर्शन को बदले बिना, policies_foo को 2.x से 3.x पर अपग्रेड कर सकते हैं. इसके बाद, Bazel को 5.x से 6.x पर अपग्रेड कर सकते हैं.
नियम_फ़ू 1.x Rules_foo 2.x Rules_foo 3.x शीर्ष
बेज़ल 4.x
बेज़ल 5.x
बेज़ल 6.x
शीर्ष

❌: मेजर नियम के वर्शन का कोई भी वर्शन Bazel LTS रिलीज़ के साथ काम नहीं करता.

✅: नियमों का कम से कम एक वर्शन, {0}Bazel LTS रिलीज़ के सबसे नए वर्शन पर काम करता है.

सबसे सही तरीके

बेज़ल के लिए लेखक के तौर पर बने इन तरीकों को अपनाकर, यह पक्का किया जा सकता है कि उपयोगकर्ताओं के लिए, डेटा को दूसरी जगह भेजने की प्रोसेस आसान हो:

  1. नियम का SemanticVersioning का पालन करना ज़रूरी है: एक ही मेजर वर्शन के छोटे वर्शन, पुराने सिस्टम के साथ काम करते हैं.
  2. HEAD में दिया गया नियम, Bazel LTS के नए वर्शन के मुताबिक होना चाहिए.
  3. HEAD में नियम, HEAD में Bazel से मेल खाना चाहिए. इस लक्ष्य को हासिल करने के लिए,
    • HEAD में Ba आवाज़ की मदद से, CI टेस्टिंग सेट अप करें
    • Bazel डाउनस्ट्रीम टेस्टिंग में अपना प्रोजेक्ट जोड़ें. अगर बेज़ल में बदलावों की वजह से आपके प्रोजेक्ट पर असर पड़ता है, तो Bazel की टीम आपके प्रोजेक्ट में समस्याएं दर्ज करेगी. साथ ही, समस्याओं को समय पर हल करने के लिए आपको हमारी डाउनस्ट्रीम प्रोजेक्ट की नीतियों का पालन करना होगा.
  4. इस नियम का सबसे नया और नया वर्शन, Bazel LTS रिलीज़ के साथ काम करना चाहिए.
  5. नियम का एक नया मेजर वर्शन, आखिरी Bazel LTS रिलीज़ के साथ काम करना चाहिए, जो इस नियम के पिछले मेजर वर्शन पर काम करता है.

2. और 3. हासिल करना सबसे अहम काम है, क्योंकि यह 4. और 5 हासिल करना है. बिलकुल स्वाभाविक था.

HEAD में Bazel और सबसे नए Bazel LTS रिलीज़, दोनों के साथ काम करते रहने के लिए, लेखकों के पास ये नियम हैं:

  • पुराने वर्शन के साथ काम करने वाली सुविधाओं का अनुरोध करें और उन्हें नए एलटीएस रिलीज़ पर पीछे-पोर्ट करें. ज़्यादा जानकारी के लिए रिलीज़ प्रोसेस देखें.
  • Bazel की सुविधा का पता लगाने के लिए bazel_features का इस्तेमाल करें.

आम तौर पर, सुझाए गए तरीकों की मदद से, बैज के साथ काम न करने वाले बदलावों के लिए, नियम माइग्रेट किए जाने चाहिए. साथ ही, HEAD में नई Bazel LTS रिलीज़ के साथ काम किए बिना, HEAD में नई Bazel सुविधाओं का इस्तेमाल किया जाना चाहिए.