नियम के साथ काम करने से जुड़ा नियम

Bazel Starlark के नियम, इन दो स्थितियों में Bazel LTS रिलीज़ के साथ काम नहीं कर सकते:

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

  1. नियम सिमेंटिक वर्शनिंग के मुताबिक होना चाहिए: एक ही मेजर वर्शन के माइनर वर्शन, पुराने वर्शन के साथ काम करते हैं.
  2. HEAD पर मौजूद नियम, Bazel के एलटीएस वर्शन की नई रिलीज़ के साथ काम करना चाहिए.
  3. HEAD पर मौजूद नियम, HEAD पर मौजूद Bazel के साथ काम करना चाहिए. इसके लिए,
  4. नियम का सबसे नया मुख्य वर्शन, Bazel के एलटीएस वर्शन के साथ काम करना चाहिए.
  5. नियम के नए मेजर वर्शन को, Bazel के उस एलटीएस वर्शन के साथ काम करना चाहिए जो नियम के पिछले मेजर वर्शन के साथ काम करता था.

दूसरे और तीसरे चरण को पूरा करना सबसे ज़रूरी है, क्योंकि इससे चौथे और पांचवें चरण को पूरा किया जा सकता है. नैचुरल तरीके से.

नियमों के लेखकों के पास ये विकल्प होते हैं, ताकि वे Bazel के HEAD वर्शन और Bazel के एलटीएस वर्शन, दोनों के साथ आसानी से काम कर सकें:

  • पिछली रिलीज़ के साथ काम करने वाली सुविधाओं को एलटीएस की नई रिलीज़ में वापस लाने का अनुरोध करें. ज़्यादा जानकारी के लिए, रिलीज़ प्रोसेस देखें.
  • Bazel की सुविधा का पता लगाने के लिए, bazel_features का इस्तेमाल करें.

आम तौर पर, सुझाए गए तरीकों से, Bazel के साथ काम न करने वाले बदलावों के लिए नियमों को माइग्रेट किया जा सकता है. साथ ही, Bazel के HEAD वर्शन में मौजूद नई सुविधाओं का इस्तेमाल किया जा सकता है. ऐसा, Bazel के एलटीएस वर्शन के साथ काम करने की सुविधा को बंद किए बिना किया जा सकता है.