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