Dependências
Tudo que uma task exige do seu ambiente é declarado numa lista só, com tipo:
dependencies: source: "." # diretório gcpCredential: ./chaves/service-account.json # arquivo gitToken: ${env.OREN_GIT_TOKEN} # valor sensível docker: true # acesso concedidoA chave é definida pelo contrato — você não escolhe o nome, só como satisfazê-lo. O tipo de cada uma determina como o valor é entregue ao worker.
| Forma | Você fornece | O worker recebe |
|---|---|---|
directory |
caminho no host | diretório montado |
file |
caminho no host | arquivo montado, modo 0400 |
string |
valor ou ${env.OREN_VAR} |
variável de ambiente |
| socket | true | socket montado |
Privilégio
Seção intitulada “Privilégio”Cada tipo carrega um nível, e é isso que torna implementações comparáveis:
| Tipo | Privilégio |
|---|---|
git-repository, directory |
baixo |
secret/git-token, secret/registry-credentials |
médio |
secret/gcp-service-account, secret/coolify-token |
alto |
engine/docker |
crítico — acesso ao socket equivale a root no host |
Dois tokens, dois níveis: um secret/git-token pode ser emitido para um
repositório só, e por isso é médio; um secret/coolify-token é escopado por
time e não tem como ser estreitado até a única aplicação que o step implanta, e
por isso é alto. O nível descreve o que a credencial pode, não o que você
pretende fazer com ela.
Um diretório com mutable: true sobe um degrau: escrever no seu working dir
custa mais que ler.
Ele também é criado se não existir. Um diretório mutável é onde o worker
escreve, e exigir que ele já esteja lá quebraria toda primeira execução em cópia
limpa — o .oren/artefatos de um CI que acabou de clonar não existe, e git não
versiona diretório vazio.
Um diretório de leitura que não existe é o oposto: é engano de caminho, e o Oren recusa dizendo qual step e qual dependência. Criá-lo montaria um diretório vazio em silêncio, e o step falharia adiante, longe da causa.
Credenciais sem cadastrar nada
Seção intitulada “Credenciais sem cadastrar nada”Você não precisa guardar segredos em lugar nenhum novo. Se sua organização já usa Vault ou Secret Manager, buscar o segredo é só mais uma task:
- id: creds task: acme/fetch-vault-secrets@^1.0.0 implementation: acme/fetch-vault-secrets-sh inputs: paths: [secret/data/gcp/prod] dependencies: vaultToken: ${env.OREN_VAULT_TOKEN}
- id: push task: techlite/push-docker-image@^1.0.0 implementation: techlite/push-docker-image-skopeo dependencies: registryCredential: ${outputs['creds'].gcpServiceAccount}Valores marcados como secretos nunca aparecem em log, nunca vão para o lockfile e nunca tocam o disco — a CLI materializa o conteúdo direto no container.
A marca é contagiosa: um campo comum que interpole um valor secreto passa a ser tratado como secreto.