`runner adopt`
Recupera o registro de uma app que continua rodando mas cujo state o Runner perdeu
(disco corrompido, unregister acidental, migracao de servidor). Em vez de recriar a
app do zero — e arriscar subir com secrets errados — o adopt le o container vivo
como fonte da verdade.
Resolve a issue #36.
O que ele faz
- Captura as variaveis de ambiente do container em execucao
- Faz diff contra os defaults da imagem — so o que foi injetado no deploy sobra
- Classifica cada valor em secret ou plain via
secret_detect - Registra a app (cold) ou reusa o registro existente (warm)
- Grava
.env/.secretse re-encripta o bundle
Sintaxe
runner adopt <app> --from-container <container> -r <owner/repo> -b <branch> --ckey # cold
runner adopt <app> --from-container <container> # warmCold vs warm
| Modo | Quando | Exige |
|---|---|---|
| cold | Nao ha registro nenhum da app | --repo, --branch, --ckey |
| warm | O registro existe, so o .env/.secrets se perdeu |
so --from-container |
Argumentos
| Argumento | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
<app> |
string | Sim | Nome da app |
Flags
| Flag | Obrigatorio | Descricao |
|---|---|---|
--from-container <NOME> |
Sim | Container vivo de onde capturar as envs |
-r, --repo <OWNER/REPO> |
So no cold | Repositorio GitHub |
-b, --branch <BRANCH> |
So no cold | Branch de distribuicao |
--ckey [<CKEY>] |
So no cold | Content key do bundle de secrets. Sem valor (--ckey solto): gera uma aleatoria de 32 chars |
-t, --token <TOKEN> |
Nao | Token GitHub para repo privado (encriptado at rest) |
--token-from <APP> |
Nao | Reusa o token de outra app registrada, sem passar por plaintext |
--manifest-path <PATH> |
Nao | Caminho do .deploy.yml dentro do repo (monorepos) |
--instance <INSTANCE> |
Nao | Instance alvo (production, staging, ...) |
--yes |
Nao | Nao pergunta nada: a faixa ambigua de classificacao vira secret (conservador) |
-o, --output |
Nao | human | json | yaml |
-x, --exact |
Nao | Exige match exato de identidade, sem fallback por prefixo |
--insecure |
Nao | Bypass dos guards. Emite banner e grava em insecure-events.jsonl |
Exemplos
# cold — nenhum registro sobrou
runner adopt myapp --from-container myapp -r user/myapp -b main --ckey
# warm — o registro existe, reusa
runner adopt myapp --from-container myapp
# monorepo, com token emprestado de outra app
runner adopt api --from-container api_production_v1-2-0 \
-r acme/mono -b dist --manifest-path services/api/.deploy.yml --token-from webSobre a classificacao automatica
O secret_detect divide os valores em tres faixas: claramente secreto, claramente
publico, e ambiguo. Sem --yes o comando pergunta caso a caso. Com --yes, o
ambiguo vira secret — o erro conservador (um valor publico tratado como secreto
nao vaza nada; o contrario sim).
Ver tambem
- `runner add` — registrar uma app nova, do zero
- `runner state` — recuperar o state a partir da cadeia de backup
- `runner unregister`
By Borlot.com.br on 19/08/2026