Worker em Node
oren init worker minha-task --template nodeimport { task } from '@oren-sh/sdk';
type Inputs = { defaultChange: 'major' | 'minor' | 'patch' | 'none' };type Outputs = { change: string; commitCount: number };
await task<Inputs, Outputs>(async ({ inputs, path, log }) => { const source = path('source'); log('analisando', source);
return { change: inputs.defaultChange, commitCount: 3 };});O que a função devolver vira a saída da task. Lançar aborta o step com código de saída 1 — a CLI trata o resto.
O contexto
Seção intitulada “O contexto”inputs |
entradas validadas contra o contrato, com defaults aplicados |
execution |
pipeline, step, task, dependências montadas |
path(nome) |
caminho onde uma dependência foi montada |
log(...) |
escreve em stderr |
TaskError tem a mensagem exibida sem stack trace — ela é para quem escreveu o
pipeline, não para quem escreveu o worker.
import { task, TaskError } from '@oren-sh/sdk';
await task(async ({ path }) => { const source = path('source'); if (!existsSync(join(source, '.git'))) { throw new TaskError(`${source} não contém um repositório git`); } // ...});O custo
Seção intitulada “O custo”Um worker em shell fica em cerca de 34 MB; o mesmo em Node, 283 MB — o runtime. Em troca você tem tipos nas entradas e saídas, erros estruturados e lógica testável fora do container.
As duas satisfazem o mesmo contrato e pedem exatamente as mesmas dependências, então a escolha é de manutenção, não de privilégio.
O SDK é opcional
Seção intitulada “O SDK é opcional”O protocolo é ler um arquivo e escrever outro. Um worker em Go, Python ou Rust funciona igual, sem nada do Node envolvido. Este pacote existe para você não reimplementar leitura de caminho e tratamento de erro em cada worker.