De la séquence au flux de travail : laisser `.lil` prendre des décisions
Un script linéaire suffit tant que la réponse reste « faire A, puis B, puis C ». Dès qu’il faut vérifier un répertoire, réutiliser un chemin, conserver un résultat ou s’arrêter avec une raison claire, vous construisez un flux de travail plutôt qu’une simple liste.
Utiliser le plus petit langage d’automatisation adapté à la tâche
Un fichier commençant par #lil appartient au exécution linéaire du Core : les commandes ordinaires s’exécutent dans l’ordre, et cette simplicité est un avantage. Il convient très bien aux listes d’installation, diagnostics répétables et procédures courtes.
install runhelp runLes variables transforment des chemins copiés en intentions nommées
set root lil-playground donne un rôle à un chemin. Ensuite $root, $source et $archive disent ce que les valeurs signifient au lieu de forcer à modifier le même littéral à cinq endroits.
De bons noms rendent un script portable. Gardez les valeurs spécifiques à l’environnement en haut, les secrets à l’extérieur, et préférez quelques variables claires à une construction de chaînes ingénieuse.
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zipUne condition doit protéger une hypothèse
if dir "$source" n’est pas décoratif : le test empêche l’étape d’archivage de travailler silencieusement sur la mauvaise cible. Les conditions sont surtout utiles autour d’hypothèses dont l’échec deviendrait destructeur ou déroutant.
exists, file, empty, eq, ne, ok, fail et command, avec not pour inverser. Gardez les branches assez courtes pour qu’un lecteur comprenne toujours pourquoi chaque chemin existe.
if dir "$source"
stat "$source"
else
stop "Project directory is missing"
endCapturez la sortie lorsque la décision suivante en dépend
capture name <command> exécute une commande lil ordinaire et stocke son résultat texte dans une variable. Les built-ins $last, $status, $cwd et $line exposent l’état courant utile.
Ne capturez pas tout simplement parce que c’est possible. Le texte terminal est utile s’il est petit et stable ; des fichiers structurés ou commandes de format dédiées sont préférables lorsque les données doivent survivre entre outils ou dans le temps.
capture current pwd -s
if empty "$current"
stop "Current directory is unavailable"
endDécider ce qu’un échec signifie avant d’automatiser
Par défaut, stop permet de terminer avec une raison compréhensible.
Exécutez les flux de travail inconnus avec -n d’abord. Le exécution à blanc valide et développe les commandes sans les exécuter ; -v montre ensuite l’résultat complet d’un vrai lancement. La prelecture n’est pas de la bureaucratie : elle garde l’automatisation lisible.
run workflow.lil -nrun workflow.lil -vDécouper les gros flux de travail par responsabilité, pas par nombre de lignes
Un flux de travail peut appeler
.lil packed n’est pas du chiffrement : il protège format et intégrité contre les modifications accidentelles, pas la confidentialité ni l’auteur.
run -p workflow.lil workflow.packed.lilrun workflow.packed.lilL’automatisation a volontairement moins de privilèges qu’un humain interactif
Les commandes UI interactives sont bloquées dans les flux de travail ordinaires et les commandes non interactives privilégiées comme @command est également refusé dans les scripts
Cette friction est intentionnelle. Un flux de travail reproductible doit déclarer ses dépendances de modules avant l’exécution et ne doit pas installer du code, demander un secret ou détruire le terminal de manière inattendue au milieu du run.
Conservez ceci comme script
Enregistrez ceci sous workflow.lil, créez lil-playground/project si vous voulez tester la branche de succès et lancez d’abord
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip
if not dir "$root"
stop "lil-playground is missing"
end
if dir "$source"
capture current pwd -s
zip "$source" "$archive" -f
stat "$archive"
else
stop "Project directory is missing"
end