Bazel Starlark के नियम, इन दो स्थितियों में Bazel LTS रिलीज़ के साथ काम नहीं कर सकते:
- यह नियम, आने वाले समय में एलटीएस रिलीज़ के साथ काम नहीं करेगा. ऐसा इसलिए, क्योंकि जिस सुविधा पर यह नियम निर्भर करता है उसे Bazel के HEAD से हटा दिया गया है.
- यह नियम, एलटीएस की मौजूदा या पुरानी रिलीज़ के साथ काम नहीं करता, क्योंकि जिस सुविधा पर यह नियम निर्भर करता है वह सिर्फ़ Bazel एलटीएस की नई रिलीज़ में उपलब्ध है.
इस बीच, नियम खुद भी अपने उपयोगकर्ताओं के लिए ऐसे बदलाव भेज सकता है जो काम नहीं करते. Bazel में बड़े बदलावों के साथ-साथ, नियम और Bazel के वर्शन को अपग्रेड करना, अक्सर Bazel का इस्तेमाल करने वाले लोगों के लिए परेशानी का सबब बन सकता है. इस पेज पर बताया गया है कि नियमों को बनाने वाले लोगों को, 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 के मुख्य वर्शन में बदलाव किए बिना, rules_foo को 2.x से 3.x पर अपग्रेड कर सकते हैं. इसके बाद, Bazel को 5.x से 6.x पर अपग्रेड कर सकते हैं.
| rules_foo 1.x | rules_foo 2.x | rules_foo 3.x | शीर्ष | |
|---|---|---|---|---|
| Bazel 4.x | ✅ | ❌ | ❌ | ❌ |
| Bazel 5.x | ❌ | ✅ | ✅ | ❌ |
| Bazel 6.x | ❌ | ❌ | ✅ | ✅ |
| शीर्ष | ❌ | ❌ | ❌ | ✅ |
❌: मेजर नियम के किसी भी वर्शन के साथ Bazel LTS रिलीज़ काम नहीं करती है.
✅: नियम का कम से कम एक वर्शन, Bazel के एलटीएस रिलीज़ के नए वर्शन के साथ काम करता है.
सबसे सही तरीके
Bazel के नियमों के लेखक के तौर पर, इन सबसे सही तरीकों को अपनाकर यह पक्का किया जा सकता है कि उपयोगकर्ताओं के लिए माइग्रेशन की प्रोसेस को मैनेज किया जा सके:
- नियम सिमेंटिक वर्शनिंग के मुताबिक होना चाहिए: एक ही मेजर वर्शन के माइनर वर्शन, पुराने वर्शन के साथ काम करते हैं.
- HEAD पर मौजूद नियम, Bazel के एलटीएस वर्शन के साथ काम करना चाहिए.
- HEAD पर मौजूद नियम, HEAD पर मौजूद Bazel के साथ काम करना चाहिए. इसके लिए,
- HEAD पर Bazel का इस्तेमाल करके, अपनी सीआई टेस्टिंग सेट अप करना
- अपने प्रोजेक्ट को Bazel डाउनस्ट्रीम टेस्टिंग में जोड़ें; अगर Bazel में हुए बड़े बदलावों से आपके प्रोजेक्ट पर असर पड़ता है, तो Bazel टीम आपके प्रोजेक्ट में समस्याएं फ़ाइल करती है. आपको समस्याओं को समय पर हल करने के लिए, डाउनस्ट्रीम प्रोजेक्ट की हमारी नीतियों का पालन करना होगा.
- नियम का नया मुख्य वर्शन, Bazel के एलटीएस वर्शन के साथ काम करना चाहिए.
- नियम के नए मेजर वर्शन को, Bazel के उस एलटीएस वर्शन के साथ काम करना चाहिए जो नियम के पिछले मेजर वर्शन के साथ काम करता था.
दूसरे और तीसरे चरण को पूरा करना सबसे ज़रूरी है, क्योंकि इससे चौथे और पांचवें चरण को पूरा किया जा सकता है. नैचुरल तरीके से बात करें.
नियमों के लेखकों के पास ये विकल्प होते हैं, ताकि वे Bazel के HEAD वर्शन और Bazel के एलटीएस वर्शन, दोनों के साथ आसानी से काम कर सकें:
- पिछली रिलीज़ के साथ काम करने वाली सुविधाओं को एलटीएस की नई रिलीज़ में वापस लाने का अनुरोध करें. ज़्यादा जानकारी के लिए, रिलीज़ करने की प्रोसेस देखें.
- Bazel की सुविधा का पता लगाने के लिए, bazel_features का इस्तेमाल करें.
आम तौर पर, सुझाए गए तरीकों से, Bazel के साथ काम न करने वाले बदलावों के लिए नियमों को माइग्रेट किया जा सकता है. साथ ही, Bazel की नई सुविधाओं का इस्तेमाल HEAD पर किया जा सकता है. इसके लिए, Bazel के एलटीएस के नए वर्शन के साथ काम करने की सुविधा को बंद करने की ज़रूरत नहीं होती.