Pular para o conteúdo

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 concedido

A 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 |

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.

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.