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

समस्या की शिकायत करें सोर्स देखें Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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