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

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

  1. यह नियम, आने वाले समय में रिलीज़ होने वाले LTS वर्शन के साथ काम नहीं करता, क्योंकि इस नियम के काम करने के लिए ज़रूरी सुविधा को 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 LTS रिलीज़ के साथ काम करना चाहिए.
  5. नियम का नया मेजर वर्शन, Bazel के उस एलटीएस वर्शन के साथ काम करना चाहिए जिस पर नियम के पिछले मेजर वर्शन काम करता था.

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

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

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

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