Introducción

Parte 11

De secuencia a flujo de trabajo: deje que `.lil` tome decisiones

Un script lineal es perfecto mientras la respuesta sea siempre «haz A, luego B y luego C». Cuando necesita comprobar si existe un directorio, reutilizar una ruta, guardar un resultado o detenerse con una razón clara, ya está construyendo un flujo de trabajo y no una simple lista.

Use el lenguaje de automatización más pequeño que resuelva la tarea

Un archivo que comienza con #lil pertenece al ejecutor lineal del Core: los comandos normales se ejecutan en orden y esa simplicidad es una ventaja. Es ideal para listas de preparación, diagnósticos repetibles y procedimientos cortos.

run es la siguiente capa. Añade variables, condiciones, resultado capturado, scripts anidados y política explícita de fallos. No convierta cada receta de tres líneas en un programa; pase a run cuando el flujo de trabajo necesite estado o decisiones de verdad.

install run
help run

Las variables convierten rutas copiadas en intención con nombre

set root lil-playground da una función a una ruta. Después $root, $source y $archive explican qué significan los valores en vez de obligarle a editar el mismo literal en cinco lugares.

Los buenos nombres hacen portátil un script. Mantenga arriba los valores específicos del entorno, fuera los secretos y prefiera unas pocas variables claras a construcciones de texto ingeniosas.

Empieza el archivo con esto
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip

Una condición debe proteger un supuesto

if dir "$source" no es decoración: evita que el paso de archivado trabaje en silencio sobre el objetivo equivocado. Las condiciones son especialmente valiosas alrededor de supuestos cuyo fallo sería destructivo o confuso.

run admite exists, file, dir, empty, eq, ne, ok, fail y command, con not para invertir. Mantenga las ramas lo bastante cortas para que un lector entienda por qué existe cada camino.

Empieza el archivo con esto
if dir "$source"
    stat "$source"
else
    stop "Project directory is missing"
end

Capture la salida cuando la siguiente decisión dependa de ella

capture name <command> ejecuta un comando lil normal y guarda su resultado plano en una variable. Built-ins como $last, $status, $cwd y $line exponen estado común de ejecución.

No captura todo solo porque puede. El texto del terminal es útil cuando es pequeño y estable; archivos estructurados o comandos de formato dedicados son mejores cuando los datos deben sobrevivir entre herramientas o en el tiempo.

Empieza el archivo con esto
capture current pwd -s
if empty "$current"
    stop "Current directory is unavailable"
end

Decida qué significa un fallo antes de automatizar

Por defecto, run se detiene al primer error: un comando fallido detiene el flujo de trabajo. -k continúa tras los errores y solo debe usarse cuando los pasos independientes puedan seguir de forma segura. stop permite terminar con una razón comprensible para una persona.

Pruebe primero los flujos de trabajo desconocidos con -n. La simulación valida y expande los comandos sin ejecutarlos; -v muestra después la salida completa de una ejecución real. Esta vista previa permite entender la automatización antes de que haga cambios.

run workflow.lil -n
run workflow.lil -v

Divida flujos de trabajo grandes por responsabilidad, no por número de líneas

Un flujo de trabajo puede ejecutar run child.lil en el mismo contexto de variables, de modo que las rutinas de copia de seguridad, validación o despliegue permanezcan independientes y reutilizables. Mantén el anidamiento poco profundo y da una función clara a cada archivo.

run -p crea una representación comprimida protegida por checksum para transporte. Packed .lil no es cifrado: protege formato e integridad frente a ediciones accidentales, no confidencialidad ni autoría.

run -p workflow.lil workflow.packed.lil
run workflow.packed.lil

La automatización tiene deliberadamente menos privilegios que una persona interactiva

Los comandos interactivos de interfaz se bloquean en los flujos normales, y los comandos privilegiados no interactivos como php y ses requieren -x explícito. La instalación automática interactiva con @command tampoco está disponible dentro de scripts run.

Esa fricción es intencional. Un flujo de trabajo reproducible debe declarar sus dependencias de módulos antes de ejecutarse y no debería instalar código, pedir secretos o destruir el terminal de forma inesperada a mitad de la ejecución.

Guárdalo como script

Guarde esto como workflow.lil, cree lil-playground/project si quiere probar la rama de éxito y ejecútelo primero con run workflow.lil -n. El cambio importante es que el script verifica sus supuestos antes de crear el archivo comprimido.

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