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 पर मौजूद नई सुविधाओं का इस्तेमाल किया जा सकता है.