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

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