- Dans GitHub Actions, il est possible de définir via le mot-clé
shell le shell utilisé pour exécuter un bloc run:
- Dans un workflow, c’est facultatif, mais c’est obligatoire dans la définition d’une action individuelle
- La valeur par défaut est choisie automatiquement selon le système d’exploitation :
bash sur Linux/macOS, pwsh sur Windows
- Si l’on définit explicitement
shell: bash, les drapeaux par défaut suivants sont également inclus : --noprofile --norc -eo pipefail
N’importe quel exécutable peut être défini comme shell
- On a facilement tendance à penser que les valeurs utilisables pour
shell sont limitées
- En réalité, tout exécutable présent dans
$PATH peut être utilisé comme shell
- Si la commande exécutée n’accepte pas une entrée sous forme de fichier, il faut passer un argument spécial,
{0}
{0} est automatiquement remplacé par GitHub par le chemin d’un fichier temporaire
Exemples expérimentaux
- Il est même possible d’utiliser un compilateur C (
tcc) comme shell afin d’exécuter directement du code
- Il est aussi possible de manipuler
$PATH pour créer et utiliser un faux shell bash
- GitHub ne se préoccupe pas du fait que la valeur indiquée dans le champ
shell corresponde ou non à un exécutable particulier
Implications en matière de sécurité
- Dans GitHub Actions, la frontière entre écriture de fichiers et exécution est floue (avec des possibilités d’exécution via
GITHUB_ENV, $GITHUB_PATH, etc.)
- Même des valeurs bien connues comme
shell: bash sont résolues via $PATH, sans utiliser un chemin d’exécution fixe comme /bin/bash
- Contrairement à ce que l’on pourrait penser, une valeur comme
python n’est pas une simple référence au toolcache, mais bien une exécution basée sur un chemin réel
2 commentaires
Rien qu’en regardant le dépôt github/runner-image, on voit qu’un bon nombre de packages directement utilisables sont déjà installés....
Quand on crée une image, 1 Go partent facilement....
Avis Hacker News
-xde bash pour forcer l’affichage de toutes les commandes exécutées dans un workflow Actions. C’est très utile pour le débogagerepository_dispatchavec des jokersScriptHandler.cscontient tout le code qui prépare l’environnement du processus, les arguments, etc.bashpour exécuter n’importe quel programmegoevalne prend pas encore directement en charge l’entrée via fichier