`runner manifest`

Exibe o conteúdo do .deploy.yml de uma app registrada. A partir de v2.23.0 suporta --resolved para renderizar {{::Var}} templates antes do output.

Sintaxe

runner manifest <app> [--resolved] [--json]
Flag Default Descrição
--resolved false Renderiza {{::Var}} usando .env + .secrets + secrets.enc
--json false Output em JSON (parse do YAML)

Modo padrão — `.deploy.yml` cru

runner manifest meu-app

Imprime o YAML exatamente como está no disco, com templates não-resolvidos:

project: meu-app
system: sys
environment:
  BASE_DOMAIN: "{{::Domain?meu-app.com.br}}"
secrets:
  DB_PASSWORD: "{{::DB_PASSWORD}}"

`--resolved` — simula o que entra no container (v2.23.0+)

Renderiza os templates usando os valores realmente armazenados no app dir. Útil para validar o deploy sem rodar de fato — paridade com o simulate_deploy do wizard MCP.

runner manifest meu-app --resolved

Output:

project: meu-app
system: sys
environment:
  BASE_DOMAIN: "meu-app.com.br"
secrets:
  DB_PASSWORD: "<UNRESOLVED:DB_PASSWORD>"

Origem dos valores (precedência)

A partir de v2.23.3, o renderer consulta as 3 fontes em ordem:

  1. .runner/secrets.enc (decriptado com ckey) — backup encriptado
  2. .env plaintext — sobrescreve secrets.enc se presente
  3. .secrets plaintext — sobrescreve .env se presente

Templates {{::Var?default}} usam o default quando nenhuma das 3 fontes resolveu a key.

Templates não-resolvidos

Quando uma key não tem valor e nem default, o renderer substitui por <UNRESOLVED:KEY> e emite warning no stderr:

⚠ Unresolved templates (left as <UNRESOLVED:KEY>): DB_PASSWORD, API_KEY

Isso facilita identificar quais secrets você ainda precisa preencher antes do deploy.


Output JSON

Com --json, runner re-parseia o YAML rendered (ou cru) e emite estrutura:

runner manifest meu-app --resolved --json
{
  "project": "meu-app",
  "system": "sys",
  "environment": {
    "BASE_DOMAIN": "meu-app.com.br"
  },
  "secrets": {
    "DB_PASSWORD": "<UNRESOLVED:DB_PASSWORD>"
  }
}

Use cases típicos

Debug pre-deploy:

# Confere se todos os templates resolvem
runner manifest meu-app --resolved 2>&1 | grep -E '<UNRESOLVED|⚠'

Diff entre apps:

runner manifest app-a --resolved --json > a.json
runner manifest app-b --resolved --json > b.json
diff a.json b.json

Inspeção remota via CCS:

runner manifest meu-app --resolved --json
# CCS frontend renderiza o manifest sem precisar de SSH no servidor

Veja também

By Borlot.com.br on 16/05/2026