कार्रवाइयां

कार्रवाइयां बनाने के लिए फ़ंक्शन उपलब्ध कराने वाला मॉड्यूल. ctx.actions का इस्तेमाल करके, इस मॉड्यूल को ऐक्सेस करें.

सदस्य

args

Args actions.args()

यह Args ऑब्जेक्ट दिखाता है. इसका इस्तेमाल, कम मेमोरी इस्तेमाल करने वाली कमांड लाइन बनाने के लिए किया जा सकता है.

declare_directory

File actions.declare_directory(filename, *, sibling=None)

यह एलान करता है कि नियम या पहलू, मौजूदा पैकेज में दिए गए नाम की डायरेक्ट्री बनाता है. आपको एक ऐसा ऐक्शन बनाना होगा जो डायरेक्ट्री जनरेट करे. डायरेक्ट्री के कॉन्टेंट को सीधे तौर पर Starlark से ऐक्सेस नहीं किया जा सकता. हालांकि, Args.add_all() की मदद से, इसे ऐक्शन कमांड में बड़ा किया जा सकता है. declare_directory के कॉन्टेंट में सिर्फ़ सामान्य फ़ाइलें और डायरेक्ट्री हो सकती हैं.

पैरामीटर

पैरामीटर ब्यौरा
filename string; required
अगर कोई 'सिबलिंग' नहीं दी गई है, तो मौजूदा पैकेज के हिसाब से नई डायरेक्ट्री का पाथ. इसके अलावा, फ़ाइल के लिए कोई बेस नेम ('सिबलिंग' किसी डायरेक्ट्री को तय करता है).
sibling फ़ाइल; या None; डिफ़ॉल्ट वैल्यू None
है यह फ़ाइल, नई डायरेक्ट्री के साथ उसी डायरेक्ट्री में मौजूद होती है. फ़ाइल, मौजूदा पैकेज में होनी चाहिए.

declare_file

File actions.declare_file(filename, *, sibling=None)

इससे यह पता चलता है कि नियम या पहलू, दिए गए फ़ाइल नाम वाली फ़ाइल बनाता है. अगर sibling नहीं दिया गया है, तो फ़ाइल का नाम पैकेज डायरेक्ट्री के हिसाब से होता है. इसके अलावा, फ़ाइल उसी डायरेक्ट्री में होती है जिसमें sibling होता है. फ़ाइलों को मौजूदा पैकेज के बाहर नहीं बनाया जा सकता.

ध्यान रखें कि फ़ाइल का एलान करने के साथ-साथ, आपको एक ऐसी कार्रवाई भी बनानी होगी जो फ़ाइल को जनरेट करे. उस कार्रवाई को बनाने के लिए, कार्रवाई के कंस्ट्रक्शन फ़ंक्शन में दिखाए गए File ऑब्जेक्ट को पास करना होगा.

ध्यान दें कि पहले से तय की गई आउटपुट फ़ाइलों को इस फ़ंक्शन का इस्तेमाल करके, तय करने की ज़रूरत नहीं होती. साथ ही, ऐसा नहीं किया जा सकता. इसके बजाय, ctx.outputs से उनके File ऑब्जेक्ट पाए जा सकते हैं. इस्तेमाल का उदाहरण देखें.

पैरामीटर

पैरामीटर ब्यौरा
filename string; required
अगर कोई 'सिबलिंग' नहीं दी गई है, तो नई फ़ाइल का पाथ, मौजूदा पैकेज के हिसाब से. इसके अलावा, किसी फ़ाइल के लिए बेस नेम ('सिबलिंग' से डायरेक्ट्री का पता चलता है).
sibling File; या None; डिफ़ॉल्ट वैल्यू None
है यह एक ऐसी फ़ाइल होती है जो नई फ़ाइल वाली डायरेक्ट्री में मौजूद होती है. फ़ाइल, मौजूदा पैकेज में होनी चाहिए.

File actions.declare_symlink(filename, *, sibling=None)

यह एलान करता है कि नियम या पहलू, मौजूदा पैकेज में दिए गए नाम के साथ एक सिमलंक बनाता है. आपको ऐसा ऐक्शन बनाना होगा जो इस सिमलंक को जनरेट करे. Bazel इस सिमलंक को कभी भी डीरेफ़रेंस नहीं करेगा. साथ ही, इसे सैंडबॉक्स या रिमोट एक्ज़ीक्यूटर को ट्रांसफ़र कर देगा. फ़िलहाल, ट्री आर्टफ़ैक्ट में सिंबॉलिक लिंक इस्तेमाल नहीं किए जा सकते.

पैरामीटर

पैरामीटर ब्यौरा
filename string; required
अगर कोई 'सिबलिंग' नहीं दिया गया है, तो मौजूदा पैकेज के हिसाब से नए सिंबल लिंक का पाथ. इसके अलावा, फ़ाइल के लिए कोई बेस नेम ('सिबलिंग' किसी डायरेक्ट्री को तय करता है).
sibling फ़ाइल; या None; डिफ़ॉल्ट वैल्यू None
है यह एक ऐसी फ़ाइल होती है जो नई डिक्लेयर की गई सिंबॉलिक लिंक वाली डायरेक्ट्री में मौजूद होती है.

do_nothing

None actions.do_nothing(*, mnemonic, inputs=[])

यह एक खाली ऐक्शन बनाता है. यह न तो कोई कमांड लागू करता है और न ही कोई आउटपुट देता है. हालांकि, यह 'अतिरिक्त कार्रवाइयां' डालने के लिए काम का है.

पैरामीटर

पैरामीटर ब्यौरा
mnemonic string; required
कार्रवाई के बारे में एक शब्द में जानकारी. उदाहरण के लिए, CppCompile या GoLink.
inputs File का sequence या depset; डिफ़ॉल्ट रूप से []
होता है कार्रवाई के इनपुट फ़ाइलों की सूची.

expand_template

None actions.expand_template(*, template, output, substitutions={}, is_executable=False, computed_substitutions=unbound)

यह टेंप्लेट एक्सपैंशन ऐक्शन बनाता है. कार्रवाई पूरी होने पर, यह टेंप्लेट के आधार पर एक फ़ाइल जनरेट करेगा. टेम्प्लेट के कुछ हिस्सों को substitutions डिक्शनरी का इस्तेमाल करके बदला जाएगा. बदलाव उसी क्रम में किए जाएंगे जिस क्रम में उन्हें तय किया गया है. जब भी डिक्शनरी की कोई कुंजी, टेंप्लेट में दिखती है (या पिछले बदलाव का कोई नतीजा दिखता है), तो उसे उससे जुड़ी वैल्यू से बदल दिया जाता है. कुंजियों के लिए कोई खास सिंटैक्स नहीं है. उदाहरण के लिए, टकराव से बचने के लिए कर्ली ब्रेसिज़ का इस्तेमाल किया जा सकता है (जैसे, {KEY}). इस्तेमाल का उदाहरण देखें.

पैरामीटर

पैरामीटर ब्यौरा
template फ़ाइल; ज़रूरी है
यह टेंप्लेट फ़ाइल है. इसे UTF-8 कोड वाली टेक्स्ट फ़ाइल में बदला गया है.
output फ़ाइल; ज़रूरी है
यह आउटपुट फ़ाइल है. यह UTF-8 कोड में बदली गई टेक्स्ट फ़ाइल होती है.
substitutions dict; डिफ़ॉल्ट रूप से {}
होता है टेंप्लेट को बड़ा करते समय किए जाने वाले बदलाव.
is_executable bool; डिफ़ॉल्ट रूप से False
होता है यह तय करता है कि आउटपुट फ़ाइल को एक्ज़ीक्यूट किया जा सकता है या नहीं.
computed_substitutions TemplateDict; डिफ़ॉल्ट रूप से unbound
होता है टेंप्लेट को बड़ा करते समय किए जाने वाले बदलाव.

map_directory

None actions.map_directory(*, input_directories, additional_inputs={}, output_directories, tools, additional_params={}, execution_requirements=None, exec_group=None, toolchain=None, use_default_shell_env=False, env=None, mnemonic=None, implementation)

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

पैरामीटर

पैरामीटर ब्यौरा
input_directories File ऑब्जेक्ट का dict; ज़रूरी है
यह एक डिक्शनरी है, जो स्ट्रिंग को इनपुट डायरेक्ट्री पर मैप करती है. इसे ctx.actions.declare_directory() ने तय किया है. यहां सिर्फ़ डायरेक्ट्री को वैल्यू के तौर पर इस्तेमाल किया जा सकता है. इन वैल्यू से उन डायरेक्ट्री के बारे में पता चलता है जिन्हें हम लागू करने वाले फ़ंक्शन में उनकी फ़ाइलों को ऐक्सेस करने के लिए बड़ा करना चाहते हैं. कुंजियां (स्ट्रिंग), आइडेंटिफ़ायर के तौर पर काम करती हैं. इनकी मदद से, लागू करने वाले फ़ंक्शन में किसी डायरेक्ट्री को आसानी से रेफ़रंस किया जा सकता है.
additional_inputs dict; डिफ़ॉल्ट रूप से {}
होता है स्ट्रिंग को अतिरिक्त इनपुट के साथ मैप करने वाली डिक्शनरी. यहाँ सिर्फ़ फ़ाइलों, FilesToRunProvider(s), और Depset(s) को अनुमति है. इन वैल्यू से, हमें ऐसे अतिरिक्त इनपुट के बारे में पता चलता है जिन्हें हम लागू करने वाले फ़ंक्शन से बनाई गई कार्रवाइयों के लिए उपलब्ध कराना चाहते हैं. कुंजियां (स्ट्रिंग), आइडेंटिफ़ायर के तौर पर काम करती हैं. इनसे लागू करने वाले फ़ंक्शन में किसी खास इनपुट को आसानी से रेफ़रंस किया जा सकता है.
output_directories dict of Files; required
एक डिक्शनरी, जो ctx.actions.declare_directory() के ज़रिए तय की गई आउटपुट डायरेक्ट्री को स्ट्रिंग पर मैप करती है. इन वैल्यू से, उन आउटपुट डायरेक्ट्री के बारे में पता चलता है जिन्हें हमें लागू करने वाले फ़ंक्शन से बनाई गई कार्रवाइयों के ज़रिए जनरेट करना है. कुंजियां (स्ट्रिंग), आइडेंटिफ़ायर के तौर पर काम करती हैं. इनकी मदद से, लागू करने वाले फ़ंक्शन में किसी खास आउटपुट डायरेक्ट्री को आसानी से रेफ़रंस किया जा सकता है.
tools dict; required
यह एक डिक्शनरी है, जिसमें स्ट्रिंग को टूल के साथ मैप किया जाता है. यहाँ सिर्फ़ फ़ाइलों, FilesToRunProvider(s), और Depset(s) की अनुमति है. इन वैल्यू से उन टूल के बारे में पता चलता है जिन्हें हम लागू करने वाले फ़ंक्शन से बनाई गई कार्रवाइयों के लिए उपलब्ध कराना चाहते हैं. कुंजियां (स्ट्रिंग), आइडेंटिफ़ायर के तौर पर काम करती हैं. इनकी मदद से, लागू करने वाले फ़ंक्शन में किसी टूल को आसानी से रेफ़रंस किया जा सकता है.
additional_params dict; डिफ़ॉल्ट रूप से {}
होता है यह डिक्शनरी, स्ट्रिंग को अतिरिक्त पैरामीटर से मैप करती है. यहां सिर्फ़ स्ट्रिंग, बूलियन, और पूर्णांक वैल्यू इस्तेमाल की जा सकती हैं. इन वैल्यू से, हमें उन अतिरिक्त पैरामीटर के बारे में पता चलता है जिन्हें हम लागू करने वाले फ़ंक्शन के लिए ऐक्सेस करना चाहते हैं. इनका इस्तेमाल, फ़ंक्शन के व्यवहार को बेहतर बनाने के लिए किया जा सकता है. कुंजी (स्ट्रिंग) आइडेंटिफ़ायर के तौर पर काम करती हैं. इससे, लागू करने वाले फ़ंक्शन में किसी खास पैरामीटर को आसानी से रेफ़रंस किया जा सकता है.
execution_requirements dict; या None; डिफ़ॉल्ट तौर पर None
होता है बनाई गई कार्रवाइयों को शेड्यूल करने के लिए जानकारी. काम की कुंजियों के लिए, टैग देखें.
exec_group string या None; डिफ़ॉल्ट रूप से None
होता है बनाई गई कार्रवाइयों को दिए गए एक्ज़ीक्यूशन ग्रुप के एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर चलाएं. अगर कोई भी नहीं है, तो टारगेट के डिफ़ॉल्ट एक्ज़ीक्यूशन प्लैटफ़ॉर्म का इस्तेमाल करता है.
toolchain Label; या string; या None; डिफ़ॉल्ट रूप से None
होता है

बनाई गई कार्रवाइयों के लिए इस्तेमाल किए गए एक्ज़ीक्यूटेबल या टूल का टूलचेन टाइप.

अगर एक्ज़ीक्यूटेबल और टूल, टूलचेन से नहीं आ रहे हैं, तो इस पैरामीटर को None पर सेट करें.

अगर एक्ज़ीक्यूटेबल और टूल, टूलचेन से आ रहे हैं, तो टूलचेन का टाइप सेट करना ज़रूरी है. इससे बनाई गई कार्रवाइयां, सही एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर काम करेंगी.

ध्यान दें कि इन कार्रवाइयों को बनाने वाले नियम को, अपने 'rule()' फ़ंक्शन में इस टूलचेन को तय करना होगा.

toolchain और exec_group, दोनों पैरामीटर सेट होने पर, exec_group का इस्तेमाल किया जाएगा. अगर exec_group में एक ही टूलचेन के बारे में नहीं बताया गया है, तो गड़बड़ी का मैसेज दिखता है.

use_default_shell_env bool; डिफ़ॉल्ट तौर पर False
होता है क्या बनाई गई कार्रवाइयों को डिफ़ॉल्ट शेल एनवायरमेंट का इस्तेमाल करना चाहिए. इसमें ओएस पर निर्भर कुछ वैरिएबल के साथ-साथ --action_env के ज़रिए सेट किए गए वैरिएबल भी शामिल होते हैं.

अगर use_default_shell_env और env, दोनों को True पर सेट किया गया है, तो env में सेट की गई वैल्यू, डिफ़ॉल्ट शेल एनवायरमेंट को बदल देंगी.

env dict; या None; डिफ़ॉल्ट तौर पर None
होता है यह एनवायरमेंट वैरिएबल की डिक्शनरी सेट करता है.

अगर use_default_shell_env और env, दोनों को True पर सेट किया गया है, तो env में सेट की गई वैल्यू, डिफ़ॉल्ट शेल एनवायरमेंट को बदल देंगी.

mnemonic string; या None; डिफ़ॉल्ट रूप से None
होता है बनाई गई कार्रवाइयों के बारे में एक शब्द में जानकारी. उदाहरण के लिए, CppCompile या GoLink.
implementation function; ज़रूरी है
यह एक Starlark फ़ंक्शन है, जिसे इनपुट डायरेक्ट्री बनाने के बाद कॉल किया जाता है. इसका इस्तेमाल, ऐसे ऐक्शन जनरेट करने के लिए किया जाता है जो आउटपुट फ़ाइलों को तय की गई आउटपुट डायरेक्ट्री में भेजते हैं. इस फ़ंक्शन को ये आर्ग्युमेंट पास किए जाते हैं:
  • template_ctx (पोज़ीशनल): यह एक template_ctx ऑब्जेक्ट है. इसका इस्तेमाल कार्रवाइयां बनाने के लिए किया जा सकता है.
  • input_directories (सिर्फ़ कीवर्ड): यह एक डिक्शनरी मैपिंग है. इसमें actions.map_directory() के input_directories आर्ग्युमेंट की स्ट्रिंग कुंजियों को उनकी वैल्यू के ExpandedDirectory ऑब्जेक्ट से मैप किया जाता है.
  • output_directories (सिर्फ़ कीवर्ड): actions.map_directory() के output_directories आर्ग्युमेंट की वैल्यू; यह एक डिक्शनरी है, जो स्ट्रिंग को आउटपुट डायरेक्ट्री पर मैप करती है.
  • additional_inputs (सिर्फ़ कीवर्ड): यह actions.map_directory() फ़ंक्शन के additional_inputs आर्ग्युमेंट की वैल्यू होती है. यह स्ट्रिंग से इनपुट फ़ाइलों तक मैप करने वाली डिक्शनरी होती है.
  • tools (सिर्फ़ कीवर्ड): actions.map_directory() के tools आर्ग्युमेंट की वैल्यू; यह एक डिक्शनरी है, जो स्ट्रिंग को टूल पर मैप करती है.
  • additional_params (सिर्फ़ कीवर्ड): actions.map_directory() के additional_params आर्ग्युमेंट की वैल्यू; यह एक ऐसा डिक्शनरी मैपिंग है जिसमें स्ट्रिंग को स्ट्रिंग, बूलियन या पूर्णांक से मैप किया जाता है.
यह फ़ंक्शन टॉप-लेवल का होना चाहिए. इसका मतलब है कि इसमें लैम्डा और नेस्ट किए गए फ़ंक्शन इस्तेमाल नहीं किए जा सकते.

रन

None actions.run(*, outputs, inputs=[], unused_inputs_list=None, executable, tools=unbound, arguments=[], mnemonic=None, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=unbound)

यह एक ऐसा ऐक्शन बनाता है जो किसी एक्ज़ीक्यूटेबल को चलाता है. इस्तेमाल का उदाहरण देखें.

पैरामीटर

पैरामीटर ब्यौरा
outputs sequence of Files; ज़रूरी है
कार्रवाई की आउटपुट फ़ाइलों की सूची.
inputs sequence of Files; या depset; डिफ़ॉल्ट रूप से []
होता है कार्रवाई के इनपुट फ़ाइलों की सूची या depset.
unused_inputs_list File या None; डिफ़ॉल्ट तौर पर None
होता है ऐसी फ़ाइल जिसमें कार्रवाई के लिए इस्तेमाल नहीं किए गए इनपुट की सूची होती है.

इस फ़ाइल का कॉन्टेंट, आम तौर पर कार्रवाई के आउटपुट में से एक होता है. यह उन इनपुट फ़ाइलों की सूची से मेल खाता है जिनका इस्तेमाल, कार्रवाई पूरी होने तक नहीं किया गया था. उन फ़ाइलों में किए गए किसी भी बदलाव से, कार्रवाई के आउटपुट पर कोई असर नहीं पड़ना चाहिए.

executable File या string या FilesToRunProvider; ज़रूरी है
यह वह एक्ज़ीक्यूटेबल फ़ाइल है जिसे कार्रवाई के ज़रिए कॉल किया जाना है.
tools sequence; या depset; डिफ़ॉल्ट तौर पर unbound
होता है कार्रवाई के लिए ज़रूरी टूल की सूची या depset. टूल, ऐसे इनपुट होते हैं जिन्हें एक्ज़ीक्यूट किया जा सकता है. इनमें अपनी रनफ़ाइलें हो सकती हैं. ये रनफ़ाइलें, कार्रवाई के लिए अपने-आप उपलब्ध हो जाती हैं.

सूची में अलग-अलग तरह के ये आइटम शामिल हो सकते हैं:

  • File सेकंड
  • FilesToRunProviderइंस्टेंस
  • depset से File तक
ctx.executable और सूची में सीधे तौर पर मौजूद FilesToRunProvider के File में, रनफ़ाइल अपने-आप जुड़ जाएंगी. सभी टूल को इनपुट के तौर पर अपने-आप जोड़ दिया जाता है.

arguments sequence; डिफ़ॉल्ट तौर पर []
होता है ऐक्शन के कमांड लाइन आर्ग्युमेंट. यह स्ट्रिंग या actions.args() ऑब्जेक्ट की सूची होनी चाहिए.
mnemonic string या None; डिफ़ॉल्ट रूप से None
होता है कार्रवाई के बारे में एक शब्द में जानकारी. उदाहरण के लिए, CppCompile या GoLink.
progress_message string या None; डिफ़ॉल्ट तौर पर None
होता है बिल्ड के दौरान उपयोगकर्ता को दिखाने के लिए प्रोग्रेस मैसेज. उदाहरण के लिए, "foo.cc को foo.o बनाने के लिए कंपाइल किया जा रहा है". मैसेज में %{label}, %{input} या %{output} पैटर्न शामिल हो सकते हैं. इन्हें लेबल स्ट्रिंग, पहले इनपुट या आउटपुट के पाथ से बदल दिया जाता है. स्टैटिक स्ट्रिंग के बजाय पैटर्न का इस्तेमाल करें, क्योंकि ये ज़्यादा असरदार होते हैं.
use_default_shell_env bool; डिफ़ॉल्ट रूप से False
होता है कार्रवाई को डिफ़ॉल्ट शेल एनवायरमेंट का इस्तेमाल करना चाहिए या नहीं. इसमें ओएस पर निर्भर कुछ वैरिएबल के साथ-साथ, --action_env के ज़रिए सेट किए गए वैरिएबल भी शामिल होते हैं.

अगर use_default_shell_env और env, दोनों को True पर सेट किया गया है, तो env में सेट की गई वैल्यू, डिफ़ॉल्ट शेल एनवायरमेंट को बदल देंगी.

env dict; या None; डिफ़ॉल्ट तौर पर None
होता है यह एनवायरमेंट वैरिएबल की डिक्शनरी सेट करता है.

अगर use_default_shell_env और env, दोनों को True पर सेट किया गया है, तो env में सेट की गई वैल्यू, डिफ़ॉल्ट शेल एनवायरमेंट को बदल देंगी.

execution_requirements dict; या None; डिफ़ॉल्ट रूप से None
होता है कार्रवाई को शेड्यूल करने के लिए जानकारी. काम की कुंजियों के लिए, टैग देखें.
input_manifests sequence या None; डिफ़ॉल्ट तौर पर None
होता है लेगसी आर्ग्युमेंट. ध्यान नहीं दिया गया.
exec_group string या None; डिफ़ॉल्ट रूप से None
होता है यह दिए गए एक्ज़ीक्यूशन ग्रुप के एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर कार्रवाई करता है. अगर कोई भी नहीं है, तो टारगेट के डिफ़ॉल्ट एक्ज़ीक्यूशन प्लैटफ़ॉर्म का इस्तेमाल करता है.
shadowed_action Action; डिफ़ॉल्ट तौर पर None
होता है यह कार्रवाई, शैडो ऐक्शन के दिए गए इनपुट और एनवायरमेंट का इस्तेमाल करके की जाती है. इनपुट और एनवायरमेंट को ऐक्शन के इनपुट की सूची और एनवायरमेंट में जोड़ा जाता है. ऐक्शन एनवायरमेंट, शैडो ऐक्शन के किसी भी एनवायरमेंट वैरिएबल को ओवरराइट कर सकता है. अगर कोई भी इनपुट नहीं दिया गया है, तो सिर्फ़ कार्रवाई के इनपुट और दिए गए एनवायरमेंट का इस्तेमाल करता है.
resource_set कॉलेबल; या None; डिफ़ॉल्ट तौर पर None
होता है यह एक कॉलबैक फ़ंक्शन है, जो संसाधन सेट डिक्शनरी दिखाता है. इसका इस्तेमाल, एक्ज़ीक्यूशन के समय संसाधन के इस्तेमाल का अनुमान लगाने के लिए किया जाता है. ऐसा तब होता है, जब यह कार्रवाई स्थानीय तौर पर की जाती है.

यह फ़ंक्शन, दो पोज़ीशनल आर्ग्युमेंट स्वीकार करता है: ओएस के नाम को दिखाने वाली स्ट्रिंग (जैसे, "osx") और कार्रवाई के लिए इनपुट की संख्या को दिखाने वाला पूर्णांक. डिक्शनरी में ये एंट्री हो सकती हैं. इनमें से हर एंट्री, फ़्लोट या पूर्णांक हो सकती है:

  • "cpu": सीपीयू की संख्या; डिफ़ॉल्ट रूप से 1
  • "memory": MB में; डिफ़ॉल्ट रूप से 250
  • "local_test": स्थानीय टेस्ट की संख्या; डिफ़ॉल्ट रूप से 1

अगर इस पैरामीटर को None पर सेट किया जाता है , तो डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जाता है.

कॉलबैक, टॉप-लेवल का होना चाहिए. Lambda और नेस्ट किए गए फ़ंक्शन की अनुमति नहीं है.

toolchain Label; या string; या None; डिफ़ॉल्ट रूप से unbound
होता है

इस कार्रवाई में इस्तेमाल किए गए एक्ज़ीक्यूटेबल या टूल का टूलचेन टाइप.

अगर एक्ज़ीक्यूटेबल और टूल, टूलचेन से नहीं आ रहे हैं, तो इस पैरामीटर को `None` पर सेट करें.

अगर एक्ज़ीक्यूटेबल और टूल, टूलचेन से आ रहे हैं, तो टूलचेन का टाइप सेट होना चाहिए, ताकि कार्रवाई सही एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर हो.

ध्यान दें कि इस कार्रवाई को बनाने वाले नियम को, अपने 'rule()' फ़ंक्शन में इस टूलचेन को तय करना होगा.

`toolchain` और `exec_group` पैरामीटर, दोनों सेट होने पर `exec_group` का इस्तेमाल किया जाएगा. अगर `exec_group` में एक ही टूलचेन के बारे में नहीं बताया गया है, तो गड़बड़ी का मैसेज दिखता है.

run_shell

None actions.run_shell(*, outputs, inputs=[], tools=unbound, arguments=[], mnemonic=None, command, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=unbound)

यह एक ऐसी कार्रवाई बनाता है जो शेल कमांड चलाती है. इस्तेमाल का उदाहरण देखें.

पैरामीटर

पैरामीटर ब्यौरा
outputs sequence of Files; ज़रूरी है
कार्रवाई की आउटपुट फ़ाइलों की सूची.
inputs sequence of Files; या depset; डिफ़ॉल्ट रूप से []
होता है कार्रवाई के इनपुट फ़ाइलों की सूची या depset.
tools sequence of Files; या depset; डिफ़ॉल्ट रूप से unbound
होता है कार्रवाई के लिए ज़रूरी टूल की सूची या depset. टूल, ऐसे इनपुट होते हैं जिन्हें एक्ज़ीक्यूट किया जा सकता है. इनमें अपनी रनफ़ाइलें हो सकती हैं. ये रनफ़ाइलें, कार्रवाई के लिए अपने-आप उपलब्ध हो जाती हैं.

सूची में अलग-अलग तरह के ये आइटम शामिल हो सकते हैं:

  • File सेकंड
  • FilesToRunProviderइंस्टेंस
  • depset से File तक
ctx.executable और सूची में सीधे तौर पर मौजूद FilesToRunProvider के File में, रनफ़ाइल अपने-आप जुड़ जाएंगी. सभी टूल को इनपुट के तौर पर अपने-आप जोड़ दिया जाता है.

arguments sequence; डिफ़ॉल्ट तौर पर []
होता है ऐक्शन के कमांड लाइन आर्ग्युमेंट. यह स्ट्रिंग या actions.args() ऑब्जेक्ट की सूची होनी चाहिए.

Bazel, इस एट्रिब्यूट में मौजूद एलिमेंट को कमांड के लिए आर्ग्युमेंट के तौर पर पास करता है. कमांड, शेल वैरिएबल सब्स्टिट्यूशन जैसे कि $1, $2 वगैरह का इस्तेमाल करके इन आर्ग्युमेंट को ऐक्सेस कर सकती है. ध्यान दें कि इंडेक्सिंग से पहले Args ऑब्जेक्ट को फ़्लैट किया जाता है. इसलिए, अगर किसी Args ऑब्जेक्ट का साइज़ पता नहीं है, तो बाद की सभी स्ट्रिंग का इंडेक्स अनुमान नहीं लगाया जा सकेगा. अनिश्चित साइज़ के Args ऑब्जेक्ट के साथ $@ (सभी आर्ग्युमेंट वापस पाने के लिए) का इस्तेमाल करना फ़ायदेमंद हो सकता है.

अगर command स्ट्रिंग की सूची है, तो इस पैरामीटर का इस्तेमाल नहीं किया जा सकता.

mnemonic string या None; डिफ़ॉल्ट रूप से None
होता है कार्रवाई के बारे में एक शब्द में जानकारी. उदाहरण के लिए, CppCompile या GoLink.
command string; या sequence of strings; ज़रूरी है
यह शेल कमांड को एक्ज़ीक्यूट करने के लिए होता है. यह स्ट्रिंग (सुझाया गया) या स्ट्रिंग का क्रम (अब इस्तेमाल नहीं किया जा सकता) हो सकता है.

अगर command एक स्ट्रिंग है, तो इसे sh -c <command> "" <arguments> की तरह ही एक्ज़ीक्यूट किया जाता है. इसका मतलब है कि arguments में मौजूद एलिमेंट, कमांड को $1, $2 (या Windows बैच का इस्तेमाल करने पर %1, %2) के तौर पर उपलब्ध कराए जाते हैं. अगर arguments में कोई actions.args() ऑब्जेक्ट शामिल है, तो उसके कॉन्टेंट को कमांड लाइन में एक-एक करके जोड़ा जाता है. इसलिए, $i, Args ऑब्जेक्ट में मौजूद अलग-अलग स्ट्रिंग का रेफ़रंस दे सकता है. ध्यान दें कि अगर अज्ञात साइज़ का कोई Args ऑब्जेक्ट, arguments के हिस्से के तौर पर पास किया जाता है, तो स्ट्रिंग अज्ञात इंडेक्स पर होंगी. इस मामले में, $@ शेल सब्स्टिट्यूशन (सभी आर्ग्युमेंट वापस पाएं) काम आ सकता है.

(अब इस्तेमाल नहीं किया जा सकता) अगर command स्ट्रिंग का क्रम है, तो पहला आइटम चलाने लायक फ़ाइल है और बाकी आइटम इसके तर्क हैं. अगर इस फ़ॉर्म का इस्तेमाल किया जाता है, तो arguments पैरामीटर की वैल्यू नहीं दी जानी चाहिए. ध्यान दें कि यह फ़ॉर्म अब काम नहीं करता. इसे जल्द ही हटा दिया जाएगा. इसे `--incompatible_run_shell_command_string` के साथ बंद कर दिया गया है. इस फ़्लैग का इस्तेमाल करके पुष्टि करें कि आपका कोड काम करता है.

Bazel, कमांड को उसी शेल में एक्ज़ीक्यूट करता है जिसका इस्तेमाल वह genrules के लिए करता है.

progress_message string या None; डिफ़ॉल्ट तौर पर None
होता है बिल्ड के दौरान उपयोगकर्ता को दिखाने के लिए प्रोग्रेस मैसेज. उदाहरण के लिए, "foo.cc को foo.o बनाने के लिए कंपाइल किया जा रहा है". मैसेज में %{label}, %{input} या %{output} पैटर्न शामिल हो सकते हैं. इन्हें लेबल स्ट्रिंग, पहले इनपुट या आउटपुट के पाथ से बदल दिया जाता है. स्टैटिक स्ट्रिंग के बजाय पैटर्न का इस्तेमाल करें, क्योंकि ये ज़्यादा असरदार होते हैं.
use_default_shell_env bool; डिफ़ॉल्ट रूप से False
होता है कार्रवाई को डिफ़ॉल्ट शेल एनवायरमेंट का इस्तेमाल करना चाहिए या नहीं. इसमें ओएस पर निर्भर कुछ वैरिएबल के साथ-साथ, --action_env के ज़रिए सेट किए गए वैरिएबल भी शामिल होते हैं.

अगर use_default_shell_env और env, दोनों को True पर सेट किया गया है, तो env में सेट की गई वैल्यू, डिफ़ॉल्ट शेल एनवायरमेंट को बदल देंगी.

env dict; या None; डिफ़ॉल्ट तौर पर None
होता है यह एनवायरमेंट वैरिएबल की डिक्शनरी सेट करता है.

अगर use_default_shell_env और env, दोनों को True पर सेट किया गया है, तो env में सेट की गई वैल्यू, डिफ़ॉल्ट शेल एनवायरमेंट को बदल देंगी.

execution_requirements dict; या None; डिफ़ॉल्ट रूप से None
होता है कार्रवाई को शेड्यूल करने के लिए जानकारी. काम की कुंजियों के लिए, टैग देखें.
input_manifests sequence या None; डिफ़ॉल्ट तौर पर None
होता है लेगसी आर्ग्युमेंट. ध्यान नहीं दिया गया.
exec_group string या None; डिफ़ॉल्ट रूप से None
होता है यह दिए गए एक्ज़ीक्यूशन ग्रुप के एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर कार्रवाई करता है. अगर कोई भी नहीं है, तो टारगेट के डिफ़ॉल्ट एक्ज़ीक्यूशन प्लैटफ़ॉर्म का इस्तेमाल करता है.
shadowed_action कार्रवाई; डिफ़ॉल्ट रूप से None
होता है यह कार्रवाई, शैडो ऐक्शन के खोजे गए इनपुट का इस्तेमाल करके की जाती है. इन इनपुट को ऐक्शन के इनपुट की सूची में जोड़ा जाता है. अगर कोई भी इनपुट नहीं है, तो सिर्फ़ कार्रवाई के इनपुट का इस्तेमाल करता है.
resource_set कॉलेबल; या None; डिफ़ॉल्ट तौर पर None
होता है अगर इसे स्थानीय तौर पर चलाया जाता है, तो संसाधन के इस्तेमाल का अनुमान लगाने के लिए कॉलबैक फ़ंक्शन. ctx.actions.run() देखें.
toolchain Label; या string; या None; डिफ़ॉल्ट रूप से unbound
होता है

इस कार्रवाई में इस्तेमाल किए गए एक्ज़ीक्यूटेबल या टूल का टूलचेन टाइप.

अगर एक्ज़ीक्यूटेबल और टूल, टूलचेन से नहीं आ रहे हैं, तो इस पैरामीटर को `None` पर सेट करें.

अगर एक्ज़ीक्यूटेबल और टूल, टूलचेन से आ रहे हैं, तो टूलचेन का टाइप सेट होना चाहिए, ताकि कार्रवाई सही एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर हो.

ध्यान दें कि इस कार्रवाई को बनाने वाले नियम को, अपने 'rule()' फ़ंक्शन में इस टूलचेन को तय करना होगा.

`toolchain` और `exec_group` पैरामीटर, दोनों सेट होने पर `exec_group` का इस्तेमाल किया जाएगा. अगर `exec_group` में एक ही टूलचेन के बारे में नहीं बताया गया है, तो गड़बड़ी का मैसेज दिखता है.

None actions.symlink(*, output, target_file=None, target_path=None, is_executable=False, progress_message=None)

यह एक ऐसा ऐक्शन बनाता है जो फ़ाइल सिस्टम में सिमलिंक लिखता है.

इस फ़ंक्शन को कॉल करते समय, target_file या target_path में से किसी एक को तय करना ज़रूरी है.

target_file का इस्तेमाल करते समय, declare_file() या declare_directory() के साथ output एट्रिब्यूट की वैल्यू दें. साथ ही, target_file एट्रिब्यूट की वैल्यू से output एट्रिब्यूट की वैल्यू का टाइप मेल खाना चाहिए. इससे सिमलिंक, target_file पर पॉइंट करता है. सिमलिंक के टारगेट या उसके कॉन्टेंट में बदलाव होने पर, Bazel इस कार्रवाई के आउटपुट को अमान्य कर देता है.

इसके अलावा, target_path का इस्तेमाल करते समय, declare_symlink() के साथ output का एलान करें. इस मामले में, सिमलंक target_path की ओर इशारा करता है. Bazel कभी भी सिमलंक को हल नहीं करता है. इस कार्रवाई का आउटपुट सिर्फ़ तब अमान्य होता है, जब सिमलंक के टेक्स्ट कॉन्टेंट (यानी कि readlink() की वैल्यू) में बदलाव होता है. खास तौर पर, इसका इस्तेमाल डैंगलिंग सिमलंक बनाने के लिए किया जा सकता है.

पैरामीटर

पैरामीटर ब्यौरा
output फ़ाइल; ज़रूरी है
यह इस कार्रवाई का आउटपुट है.
target_file File; या None; डिफ़ॉल्ट तौर पर None
होता है वह फ़ाइल जिस पर आउटपुट सिंबल लिंक पॉइंट करेगा.
target_path string; या None; डिफ़ॉल्ट तौर पर None
होता है वह सटीक पाथ जिस पर आउटपुट सिंबल लिंक पॉइंट करेगा. इसमें कोई बदलाव या अन्य प्रोसेसिंग नहीं की जाती है.
is_executable bool; डिफ़ॉल्ट रूप से False
होता है इसका इस्तेमाल सिर्फ़ target_file के साथ किया जा सकता है, target_path के साथ नहीं. अगर यह वैल्यू 'सही है' पर सेट है, तो कार्रवाई पूरी होने पर target_file के पाथ की जांच की जाती है. इससे यह पुष्टि की जाती है कि इसे एक्ज़ीक्यूट किया जा सकता है. अगर ऐसा नहीं होता है, तो गड़बड़ी की सूचना दी जाती है. is_executable को 'गलत है' पर सेट करने का मतलब यह नहीं है कि टारगेट को लागू नहीं किया जा सकता. इसका मतलब सिर्फ़ यह है कि पुष्टि नहीं की जाती.

target_path के लिए इस सुविधा का कोई मतलब नहीं है, क्योंकि हो सकता है कि बिल्ड टाइम में डैंगलिंग सिमलंक मौजूद न हों.

progress_message string; या None; डिफ़ॉल्ट तौर पर None
है बिल्ड के दौरान उपयोगकर्ता को दिखाने के लिए प्रोग्रेस मैसेज.

template_dict

TemplateDict actions.template_dict()

यह फ़ंक्शन, मेमोरी का कम इस्तेमाल करने वाले टेंप्लेट को बड़ा करने के लिए, TemplateDict ऑब्जेक्ट दिखाता है.

मेरी मदद करो

None actions.write(output, content, is_executable=False, *, mnemonic=None)

फ़ाइल में लिखने की कार्रवाई बनाता है. इस कार्रवाई के पूरा होने पर, दिए गए कॉन्टेंट को फ़ाइल में लिख दिया जाएगा. इसका इस्तेमाल, विश्लेषण के चरण में उपलब्ध जानकारी का इस्तेमाल करके फ़ाइलें जनरेट करने के लिए किया जाता है. अगर फ़ाइल का साइज़ बड़ा है और उसमें बहुत ज़्यादा स्टैटिक कॉन्टेंट है, तो expand_template का इस्तेमाल करें.

पैरामीटर

पैरामीटर ब्यौरा
output File; required
यह आउटपुट फ़ाइल है.
content string; or Args; ज़रूरी है
फ़ाइल का कॉन्टेंट. यह एक स्ट्रिंग या actions.args() ऑब्जेक्ट हो सकता है.
is_executable bool; डिफ़ॉल्ट रूप से False
होता है यह तय करता है कि आउटपुट फ़ाइल को एक्ज़ीक्यूट किया जा सकता है या नहीं.
mnemonic string या None; डिफ़ॉल्ट रूप से None
होता है कार्रवाई के बारे में एक शब्द में जानकारी. उदाहरण के लिए, CppCompile या GoLink.