Introdução

Parte 11

De uma sequência para um fluxo de trabalho: deixe o `.lil` tomar decisões

Um script linear é suficiente enquanto a resposta for sempre “faça A, depois B, depois C”. Quando é preciso verificar um diretório, reutilizar um caminho, guardar um resultado ou parar com um motivo claro, você já está construindo um fluxo de trabalho, não apenas uma lista.

Use a menor linguagem de automação que resolva a tarefa

Um arquivo que começa com #lil usa o executor linear do Core: comandos comuns são executados em ordem, e essa simplicidade é uma vantagem. Ele é ideal para listas de instalação, diagnósticos repetíveis e procedimentos curtos.

run é a camada seguinte. Ele acrescenta variáveis, condições, resultado capturado, scripts aninhados e política explícita de falha. Não transforme toda receita de três linhas em um programa; passe para run quando o fluxo de trabalho realmente precisar de estado ou decisões.

install run
help run

Variáveis transformam caminhos copiados em intenção nomeada

set root lil-playground dá um papel a um caminho. Depois, $root, $source e $archive explicam o significado dos valores em vez de obrigar você a editar o mesmo valor literal em cinco lugares.

Bons nomes de variável tornam o script portátil. Deixe valores específicos do ambiente perto do começo, mantenha segredos fora e prefira poucas variáveis claras a construções de string engenhosas.

Comece o arquivo com isto
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip

Uma condição deve proteger uma premissa

if dir "$source" não é decoração: ele impede que a etapa de compactação opere silenciosamente sobre o alvo errado. Condições são mais valiosas em torno de premissas que, sem proteção, virariam falhas destrutivas ou confusas.

run oferece exists, file, dir, empty, eq, ne, ok, fail e command, com not para inversão. Mantenha os branches curtos o bastante para que ainda seja óbvio por que cada caminho existe.

Comece o arquivo com isto
if dir "$source"
    stat "$source"
else
    stop "Project directory is missing"
end

Capture o resultado quando a próxima decisão depender dele

capture name <command> executa um comando lil comum e guarda seu resultado em texto simples numa variável. Built-ins como $last, $status, $cwd e $line expõem estados comuns da execução.

Não captura tudo só porque é possível. Texto do terminal é útil quando é pequeno e estável; arquivos estruturados ou comandos de formato dedicados são melhores quando os dados precisam sobreviver entre ferramentas ou ao longo do tempo.

Comece o arquivo com isto
capture current pwd -s
if empty "$current"
    stop "Current directory is unavailable"
end

Defina o que uma falha significa antes de automatizar

Por padrão, run é fail-fast: um comando que falha interrompe o fluxo de trabalho. -k continua depois das falhas e só pertence a jobs cujas etapas independentes sejam realmente seguras para continuar. stop permite encerrar com um motivo compreensível para uma pessoa.

Execute fluxos de trabalho desconhecidos primeiro com -n. O execução de teste valida e expande comandos sem executá-los; depois -v mostra o resultado completo durante uma execução real. A prévia não é burocracia — é como a automação continua compreensível.

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

Divida fluxos de trabalho grandes por responsabilidade, não por número de linhas

Um fluxo de trabalho pode executar run child.lil no mesmo contexto de variáveis, permitindo manter rotinas de backup, validação ou deploy independentes e reutilizáveis. Mantenha o aninhamento raso e dê uma finalidade a cada arquivo.

run -p cria uma representação compactada e protegida por checksum para transporte. Um .lil packed não é criptografia: protege formato e integridade contra edições acidentais, não confidencialidade nem autoria.

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

A automação tem, de propósito, menos privilégios que uma pessoa interativa

Comandos interativos de interface são bloqueados em fluxos comuns, e comandos privilegiados não interativos como php e ses exigem -x explícito. A instalação automática interativa com @command também não fica disponível dentro de scripts run.

Essa fricção é intencional. Um fluxo de trabalho reproduzível deve declarar suas dependências de módulos antes da execução e não deve instalar código inesperadamente, pedir segredos nem destruir o terminal no meio de um run.

Guarde isto como script

Salve isto como workflow.lil, crie o diretório lil-playground/project se quiser testar o caminho de sucesso e execute primeiro run workflow.lil -n. O script mostra a transição importante: ele verifica suas premissas antes de criar o arquivo compactado.

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