Pular para o conteúdo

O que é o Oren

Toda equipe reescreve as mesmas dez pipelines. Build, tag, push, deploy — o mesmo trabalho, copiado entre projetos e empresas, e depois traduzido de novo para o YAML de cada CI.

“Analisar commits e decidir a próxima versão” é a mesma tarefa em qualquer repositório do mundo. Mas cada equipe a reescreve do zero, presa às primitivas do seu CI, sem forma de dizer o que ela recebe e o que devolve.

Sem contrato não há substituição possível — trocar a implementação significa reescrever o pipeline. Não há comparação possível: duas soluções para o mesmo problema não são comparáveis se nem descrevem o mesmo problema.

O Oren separa o que uma task faz de como ela é feita.

Peça Responde Quem escreve
Task o que entra, o que sai, de que recursos precisa autor do contrato
Implementation qual imagem faz o trabalho, onde monta cada recurso autor do worker
Pipeline quais tasks executar, com quais valores você, no oren.yaml

Uma Task pode ter várias Implementations. O pipeline referencia a task, não a imagem — é o que permite trocar de implementação sem reescrever nada.

# o contrato: publicado uma vez, implementado por qualquer um
spec:
inputs:
type: object
properties:
defaultChange: { type: string, enum: [major, minor, patch, none] }
outputs:
type: object
required: [change]
properties:
change: { type: string }
dependencies:
source:
type: git-repository
# o pipeline, no seu repositório
steps:
- id: analyze
task: techlite/analyze-commits@^1.0.0
implementation: techlite/analyze-commits-alpine
inputs:
defaultChange: minor
dependencies:
source: "."

Implementações intercambiáveis. O mesmo contrato pode ter uma implementação em shell e outra em Node, produzindo saída idêntica. Você troca por uma linha.

Custo visível. Cada recurso que uma task exige do seu ambiente é declarado e tipado, com um nível de privilégio. Uma implementação que exige o socket do Docker aparece como mais cara que uma que usa kaniko — e a escolha passa a ser informada.

Independência de plataforma. O pipeline é um arquivo só. Rodar localmente ou gerar a configuração nativa do seu CI são decisões separadas.

A documentação segue duas trilhas, e vale saber em qual você está:

Se você quer Comece por
rodar pipelines com tasks que já existem Primeiro pipeline e Usar tasks
escrever uma task nova, para você ou para publicar Criar tasks

Quem só usa tasks nunca precisa saber o que é o protocolo v1 ou como um worker é empacotado.

Não é um CI. Ele não agenda, não escuta webhook, não tem interface de execução. Ele define o que uma task é e a executa — no seu terminal ou dentro do CI que você já usa.