- tipo
- CLI
- estado
- publicada
- versão
- 0.1.0
- lançada
- 2026-10-01
- linguagem
- Go 1.24
- licença
- MIT
- plataformas
- Linux, macOS, Windows
amd64, arm64 - binário
- estático, ~3 MB
- deps
- yaml.v3
confdriftCompara arquivos de configuração entre ambientes e mostra o que divergiu, antes do deploy. Staging funciona, produção não, e em algum ponto entre os dois uma chave sumiu ou um timeout perdeu um zero.
SINOPSE
confdrift [flags] FILE FILE [FILE...]
INSTALAÇÃO
go install github.com/eduardofrafre/confdrift@latestou um binário pronto, aqui o de Linux amd64:
curl -sL https://github.com/eduardofrafre/confdrift/releases/download/v0.1.0/confdrift_0.1.0_linux_amd64.tar.gz | tar xzOs binários para Linux, macOS e Windows, em amd64 e arm64, com checksums, estão na página de versões.
DESCRIÇÃO
O confdrift nunca compara texto. Ele lê cada arquivo como uma lista plana de caminhos de chave e valores com tipo, e alinha cada chave entre todos os arquivos de uma vez, dois ambientes ou dez. Ordem, indentação e formato deixam de importar; sobram só as diferenças reais. Uma chave é igual, mudou ou falta em algum lugar.
- dotenv:
.env,.env.production,prod.env. Aspas,export, comentários e valores de várias linhas.${VARS}não são expandidas. - YAML e JSON viram os mesmos caminhos, como
db.pool.maxouservers[0], então um arquivo YAML se compara com um JSON. - Kubernetes ConfigMaps são comparados pelas chaves de
data. A saída dehelm templateekustomize buildfunciona direto.
Tipos contam: 5432 e "5432" são diferentes. Valores de chaves que parecem credenciais aparecem como <redacted>, mas continuam sendo comparados, então um segredo trocado ainda aparece.
EXEMPLO
$ confdrift staging/configmap.yaml production/configmap.yaml
DATABASE_URL changed
staging "postgres://checkout:<redacted>@db.staging.example.com:5432/checkout"
production "postgres://checkout:<redacted>@db.prod.example.com:5432/checkout"
FEATURE_NEW_CART missing from production
staging "true"
production (not set)
LOG_LEVEL changed
staging "debug"
production "info"
PAYMENTS_TIMEOUT_MS changed
staging "3000"
production "300"
STRIPE_API_KEY changed
staging <redacted>
production <redacted>
5 of 6 keys drifted across 2 files (1 missing, 4 changed).
OPÇÕES
| --keys-only | Mostra só chaves que faltam em algum arquivo, não diferenças de valor. Em geral é o que a CI quer. |
| --ignore PATTERN | Ignora chaves que casam com PATTERN, com * como curinga. Pode repetir. |
| --format text|json | Saída para pessoas, ou para scripts e bots. |
| --show-secrets | Mostra os valores de chaves que parecem credenciais. |
| --version | Mostra a versão e sai. |
CÓDIGO DE SAÍDA
| 0 | Os arquivos concordam. |
| 1 | Encontrou diferenças. |
| 2 | Entrada inválida: arquivo ilegível, erro de leitura, flag desconhecida. |
VEJA TAMBÉM
A página do confdrift roda o motor real, compilado para WebAssembly, nos seus próprios arquivos no navegador, e explica a CI e a instalação por plataforma. Bugs e formatos que ele deveria ler vão para as issues.
