Pular para o conteúdo

Contrato e implementação

Terminal window
oren init worker minha-task --template shell

Gera contrato, implementação, worker e um pipeline para exercitá-la. Se você só quer usar tasks existentes, o caminho é outro — veja Primeiro pipeline.

É a decisão central do Oren, e a mais fácil de errar.

Pertence à Task Pertence à Implementation
“preciso de um repositório git” “monto em /source
“vou escrever nele”
“preciso de uma credencial GCP” “ela vai em /keys/gcp-credential.json
“recebo defaultChange, devolvo change “leio de /oren/input.json
“uso a imagem ghcr.io/...
“e preciso do socket do Docker”

Repare na última linha. O contrato de build-docker-image não exige daemon Docker: construir imagem sem ele é possível (kaniko, buildah). Exigir é decisão de quem implementou — e uma que custa privilégio crítico.

A Task declara o piso: o que qualquer implementação vai precisar. A Implementation declara o que ela adiciona.

Duas implementações do mesmo contrato só são comparáveis porque o piso é idêntico — o que sobra é escolha de engenharia. É isso que o catálogo ranqueia.

  • Versão da Task descreve o contrato. Remover um output ou tornar um input obrigatório é major. Adicionar input opcional é minor.
  • Versão da Implementation descreve o worker, e evolui sozinha. Ela declara o range de contrato que satisfaz (^1.0.0).

Se eu trocar de implementação e esse valor sumir, o output muda?

Se muda, é contrato. Se não muda — um cacheKey, um nível de verbosidade — é configuração de implementação.