runner secrets diff

Compara os secrets decriptados de duas apps e lista divergências: chaves exclusivas de cada lado, chaves com o mesmo nome mas valores diferentes, e chaves idênticas. Disponível desde v2.30.6.

Use quando: N apps compartilham um repo upstream (docker-compose multi-service) e você precisa reconciliar valores conflitantes antes de unificar as ckeys via ckeys copy. Ver guia → ../../recuperar/multi-service-shared-repo.md.

Sintaxe

runner secrets diff [OPTIONS] <APP_A> <APP_B>

Flags

Flag Default Descrição
--json — Atalho para --output json
-o, --output <FORMAT> human Formato de saída: human, json, yaml
--insecure — Bypassa guards de segurança (gera banner e audit log)
-h, --help — Exibe ajuda

Exemplo

$ runner secrets diff video-api video-worker
Secrets diff: video-api vs video-worker

  Only in video-api (2):
    API_RATE_LIMIT
    CORS_ORIGINS

  Only in video-worker (1):
    QUEUE_CONCURRENCY

  CONFLICT — same key, different values (1):
    DATABASE_URL
      video-api:    postgres://api_user:xxx@db:5432/video
      video-worker: postgres://worker_user:yyy@db:5432/video

  Same in both (4):
    JWT_SECRET, REDIS_URL, APP_ENV, LOG_LEVEL

O que o output indica

Categoria Significado Ação sugerida
Only in A Chave perdida se B "ganhar" Copiar para B antes de unificar
Only in B Chave perdida se A "ganhar" Copiar para A antes de unificar
CONFLICT Valores divergentes — um será descartado Decidir o canônico manualmente
Same in both Sem conflito Nenhuma ação necessária

Fluxo típico: unificar ckeys em multi-service

# 1. Ver o que diverge
runner secrets diff video-api video-worker

# 2. Resolver conflitos manualmente (ex: unificar DATABASE_URL)
runner secrets set video-worker DATABASE_URL "postgres://shared_user:yyy@db:5432/video"

# 3. Copiar chaves exclusivas para o outro lado, se necessário
runner secrets set video-api QUEUE_CONCURRENCY "4"

# 4. Confirmar que não há mais conflitos
runner secrets diff video-api video-worker

# 5. Copiar a ckey de uma app para a outra
runner ckeys copy --from video-api --to video-worker

# 6. Rebuild do bundle de video-worker com a nova ckey
runner secrets reset-bundle video-worker

Output JSON

$ runner secrets diff video-api video-worker --json
{
  "app_a": "video-api",
  "app_b": "video-worker",
  "only_in_a": ["API_RATE_LIMIT", "CORS_ORIGINS"],
  "only_in_b": ["QUEUE_CONCURRENCY"],
  "conflicts": [
    {
      "key": "DATABASE_URL",
      "value_a": "postgres://api_user:xxx@db:5432/video",
      "value_b": "postgres://worker_user:yyy@db:5432/video"
    }
  ],
  "same": ["JWT_SECRET", "REDIS_URL", "APP_ENV", "LOG_LEVEL"]
}

Erros comuns

  • app_not_found: video-api — app não registrada neste servidor; verifique com runner list.
  • decryption_failed — ckey de uma das apps está errada ou o bundle corrompido; rode runner secrets show <app> em cada app separadamente para isolar qual falha.
  • no_bundle — uma das apps não tem .runner/secrets.enc; rode runner secrets pull <app> ou runner secrets reset-bundle <app> primeiro.

Veja também

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