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

समस्या की शिकायत करें सोर्स देखें

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

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

इस बीच, यह नियम अपने उपयोगकर्ताओं के लिए काम न करने वाले बदलाव भेज सकता है. Bazel में नुकसान पहुंचा सकने वाले बदलावों के साथ, नियम वर्शन और Bazel वर्शन को अपग्रेड करने से, अक्सर Bazel उपयोगकर्ताओं को परेशानी हो सकती है. इस पेज पर बताया गया है कि नियम बनाने वालों को Bazel के साथ नियम के मुताबिक काम करने को कैसे बनाए रखना चाहिए, ताकि उपयोगकर्ताओं के लिए Bazel और नियमों को अपग्रेड करना आसान हो.

माइग्रेशन की मैनेज की जा सकने वाली प्रोसेस

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

उदाहरण के लिए, नीचे दिए गए कम्पैटबिलटी मैट्रिक्स के साथ:

  • नियमों_foo 1.x + Bazel 4.x से नियमों_foo 2.x + Bazel 5.x पर माइग्रेट करना मैनेज नहीं किया जा सकता, क्योंकि उपयोगकर्ताओं को एक ही समय में Terms_foo और Bazel के मेजर वर्शन को अपग्रेड करना होगा.
  • नियमों_foo 2.x + Bazel 5.x से नियमों_foo 3.x + Bazel 6.x पर माइग्रेट करना मैनेज किया जा सकता है, क्योंकि उपयोगकर्ता पहले Bazel वर्शन को बदले बिना, नियमों_foo को 2.x से 3.x में अपग्रेड कर सकते हैं और फिर Bazel को 5.x से 6.x में अपग्रेड कर सकते हैं.
नियमों_foo 1.x नियमों_foo 2.x नियमों_foo 3.x HEAD
Bazel 4.x
Bazel 5.x
Bazel 6.x
HEAD

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

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

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

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

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

2. और 3. पाना सबसे ज़रूरी काम है, क्योंकि इससे 4 और 5 को हासिल किया जा सकता है. स्वाभाविक रूप से कर सकते हैं.

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

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

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