runner cleanup

Limpeza de recursos nao utilizados: versoes antigas, containers orfaos, PRs expirados, imagens Docker e build cache.

Sintaxe

runner cleanup [OPTIONS]

Opcoes

Opcao Descricao
--project <NAME> Limpar apenas versoes de um projeto especifico
--expired Limpar instancias efemeras expiradas
--orphans Limpar containers orfaos (versoes antigas rodando)
--prs Limpar PRs expirados (TTL) ou merged/closed (via GitHub API)
--images Remover imagens Docker nao utilizadas de projetos gerenciados
--build-cache [FILTER] Prune do Docker buildkit cache. Default: 72h
--dry-run Preview sem executar (mostra o que seria removido)
-V, --verbose Output detalhado

Exemplos

Containers orfaos

runner cleanup --orphans --dry-run
runner cleanup --orphans

PRs expirados

runner cleanup --prs --dry-run
runner cleanup --prs

Imagens Docker

runner cleanup --images --dry-run
runner cleanup --images

Remove imagens no formato {project}:{version} que nao estao em uso por nenhum container rodando. Apos remover, executa docker image prune -f para limpar dangling layers.

Build cache

runner cleanup --build-cache              # Prune cache > 72h (default)
runner cleanup --build-cache 24h          # Prune cache > 24h
runner cleanup --build-cache 168h         # Prune cache > 7 dias
runner cleanup --build-cache all          # Prune TUDO (proximo build refaz do zero)
runner cleanup --build-cache --dry-run    # Preview (mostra docker builder du)

Combo completo

runner cleanup --images --build-cache 72h --orphans --prs

Limpeza automatica

O pipeline de deploy limpa automaticamente:

  • Versoes antigas: Ao deployar, versoes que excedem keep_versions sao removidas (container + source dir + imagem Docker)
  • PRs expirados: No fetch --deploy, PRs com TTL expirado sao removidos automaticamente (configuravel via auto_cleanup_prs no config.yml)

`--reset-root` (v2.15.0+) — migracao do fluxo de clone

Ferramenta de migracao opt-in pra apps registradas antes da v2.15.0, onde runner add clonava o repo inteiro na raiz do app dir (resultando em codigo duplicado entre raiz e src/{instance}/{ver}/).

Comportamento

Remove tudo do app dir exceto a whitelist:

  • dirs preservados: src/, data/, logs/, pull/, .runner/
  • files preservados: .deploy.yml, .env, .secrets

Cria snapshot automatico (trigger pre-reset-root) antes de remover qualquer coisa. Pra reverter:

runner config-backups list --app meu-app   # acha o snapshot
runner config-backups restore <id>          # restaura

Uso

# Preview (nao remove nada)
runner cleanup --reset-root --project meu-app --dry-run

# Executa em uma app especifica
runner cleanup --reset-root --project meu-app

# Executa em TODAS as apps registradas
runner cleanup --reset-root

Por que rodar

Apps registradas pre-2.15.0 tem essa estrutura tipica:

/data/apps/middleware-241/
├── app/                   ← codigo da raiz (clone original)
├── bootstrap/
├── composer.json
├── ...
└── src/production/v1/
    ├── app/               ← MESMO codigo, duplicado!
    └── ...

Apos --reset-root:

/data/apps/middleware-241/
├── .deploy.yml
├── .env, .secrets
├── .runner/secrets.enc
├── data/, logs/, pull/
└── src/production/v1/    ← codigo so aqui

Quando NAO usar

  • Apps recem-registradas (v2.15.0+) ja nascem limpas, nao precisa
  • Apps com bind-mount customizado pra raiz (verifique docker inspect antes)

Cron recomendado

# Semanal: imagens + build cache + containers orfaos
0 5 * * 0 /opt/runner/runner cleanup --images --build-cache 72h --orphans

# Diario: PRs expirados/merged
0 2 * * * /opt/runner/runner cleanup --prs
By Borlot.com.br on 17/04/2026