Worker em shell
oren init worker minha-task --template shellGera o contrato, a implementação, o Dockerfile e o worker. oren run dev
funciona em seguida, sem nenhum comando Docker.
Os auxiliares
Seção intitulada “Os auxiliares”O template inclui worker/oren.sh:
oren_input() { jq -r "$1" "$OREN_INPUT_PATH"; }oren_output() { cat > "$OREN_OUTPUT_PATH"; }oren_log() { echo "$@" >&2; }oren_fail() { echo "$@" >&2; exit 1; }oren_path() { jq -r ".dependencies.\"$1\".path" "$OREN_CONTEXT_PATH"; }Dez linhas. Para shell, a unidade de distribuição de um SDK é a imagem, não um gerenciador de pacotes — e isso generaliza para qualquer linguagem, inclusive as sem registry conveniente.
O worker
Seção intitulada “O worker”#!/bin/shset -eu. /worker/oren.sh
mensagem=$(oren_input '.mensagem')source_dir=$(oren_path 'source')
oren_log "processando $source_dir"arquivos=$(find "$source_dir" -type f | wc -l | tr -d ' ')
jq -n --arg r "$mensagem" --argjson a "$arquivos" \ '{resultado: $r, arquivos: $a}' | oren_outputUma armadilha comum
Seção intitulada “Uma armadilha comum”Este padrão quebra com qualquer valor que contenha espaço:
# ERRADOfor pair in $(jq -r '.vars | to_entries[] | "\(.key)=\(.value)"' "$INPUT"); do args="$args -var=$pair"doneconteudo: "criado pelo oren" vira três argumentos separados. O for ... in $(...) faz word splitting.
Use argumentos posicionais, que preservam espaços:
set --while IFS= read -r pair; do [ -n "$pair" ] && set -- "$@" "-var=$pair"done <<FIM$(jq -r '.vars | to_entries[] | "\(.key)=\(.value)"' "$INPUT")FIM
terraform plan "$@"Esse bug existiu em três workers oficiais antes de ser notado — vale conferir ao escrever qualquer worker em shell.