- GitHub Actions में
run: ब्लॉक चलाते समय इस्तेमाल होने वाला shell, shell keyword से निर्धारित किया जा सकता है
- workflow में यह वैकल्पिक है, लेकिन individual action definition में यह अनिवार्य है
- डिफ़ॉल्ट मान OS के अनुसार अपने-आप तय होता है: Linux/macOS में
bash, Windows में pwsh
- अगर
shell: bash को स्पष्ट रूप से सेट किया जाए, तो इसमें ये डिफ़ॉल्ट flags भी शामिल होते हैं: --noprofile --norc -eo pipefail
किसी भी executable को shell के रूप में निर्धारित किया जा सकता है
- आम तौर पर यह मान लेना आसान है कि
shell में इस्तेमाल किए जा सकने वाले values सीमित होंगे
- वास्तव में,
$PATH में मौजूद हर executable को shell के रूप में इस्तेमाल किया जा सकता है
- अगर execution command file input स्वीकार नहीं करता, तो विशेष argument
{0} पास करना होता है
{0} को GitHub अपने-आप temporary file path से बदल देता है
प्रयोगात्मक उदाहरण
- C language compiler (tcc) को shell की तरह इस्तेमाल करके सीधे execute करना भी संभव है
$PATH को manipulate करके नकली bash shell बनाकर उसका इस्तेमाल करना भी संभव है
- GitHub को फ़र्क नहीं पड़ता कि
shell item में दिया गया मान वास्तव में कौन-सा executable है
सुरक्षा संबंधी संकेत
- GitHub Actions में file write और execution के बीच की सीमा धुंधली है (
GITHUB_ENV, $GITHUB_PATH आदि के ज़रिए भी execution की संभावना रहती है)
shell: bash जैसे well-known values भी $PATH के ज़रिए resolve होते हैं, और fixed execution path (/bin/bash) का इस्तेमाल नहीं करते
- उम्मीद के विपरीत,
python जैसे values भी केवल tool cache reference नहीं हैं, बल्कि वास्तविक path-based execution हैं
2 टिप्पणियां
github/runner-image रेपो को ही देखें तो काफ़ी सारे ऐसे पैकेज पहले से इंस्टॉल मिलते हैं जिन्हें सीधे इस्तेमाल किया जा सकता है....
इमेज बनाते ही आराम से 1GB तो चला ही जाता है....
Hacker News की राय
-xफ़्लैग का उपयोग करके Actions workflow में चलने वाले हर command को प्रिंट करने के लिए मजबूर किया था। यह debugging में बहुत उपयोगी हैrepository_dispatchevent name को match करनाMake) का उपयोग करके उसे GitHub Actions से call करना, याScriptHandler.csमें process environment, arguments आदि तैयार करने वाला सारा code हैbashको चकमा देकर किसी भी program को चलाया जा सकता हैgoevalअभी सीधे file input support नहीं करताgoevalका लेखक हूँ