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

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

  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 HEAD
Bazel 4.x
Bazel 5.x
Bazel 6.x
HEAD

❌: नियम के मुख्य वर्शन का कोई भी वर्शन, Bazel के एलटीएस रिलीज़ के साथ कंपैटिबल नहीं है.

✅: नियम का कम से कम एक वर्शन, Bazel के एलटीएस रिलीज़ के सबसे नए वर्शन के साथ कंपैटिबल है.

सबसे सही तरीके

Bazel के नियम बनाने वाले लोग, इन सबसे सही तरीकों को अपनाकर, उपयोगकर्ताओं के लिए माइग्रेट करने की प्रोसेस को मैनेज कर सकते हैं:

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

दूसरे और तीसरे पॉइंट को पूरा करना सबसे ज़रूरी है, क्योंकि इससे चौथे और पांचवें पॉइंट को पूरा किया जा सकता है. अपने-आप.

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

  • बैकवर्ड कंपैटिबल सुविधाओं को एलटीएस के सबसे नए वर्शन में वापस लाने का अनुरोध करना. ज़्यादा जानकारी के लिए, रिलीज़ की प्रोसेस देखें.
  • Bazel की सुविधा की पहचान करने के लिए, bazel_features का इस्तेमाल करना.

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