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