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 के एलटीएस वर्शन के साथ काम करने की सुविधा को बंद किए बिना किया जा सकता है.