Skip to content

Política de retenção de branches

Introduzido em #131.

Política operacional do repositório danielnovais-tech/TELECOM-TOWER-POWER para limpeza automatizada de branches feature/fix mergeadas.

A política é executada pelo workflow .github/workflows/branch-cleanup.yml.

Regras

Uma branch é elegível para deleção se, e somente se, todas as condições abaixo forem verdadeiras:

  1. Não é main nem HEAD.
  2. Não combina com nenhum dos prefixos protegidos:
  3. release/ — releases publicadas e tags em preparação
  4. security/ — branches de remediação de incidentes (auditoria forense)
  5. hotfix/ — correções emergenciais em produção
  6. docs/ — branches de documentação de longa duração

Branches chore/... (manutenção/infra) não são protegidas: depois de mergeadas e além da janela de retenção, são deletadas como qualquer outra feature branch. 3. Está totalmente mergeada em main (commit tip é ancestral de main). 4. Último commit tem mais de 14 dias (janela de retenção).

Branches que falham qualquer condição permanecem intactas e aparecem no relatório como Kept — protected prefix, Kept — within retention window ou Kept — not merged into main.

Cadência

Gatilho Modo Quem dispara
Cron semanal (Seg 06:00 UTC) dry-run GitHub Actions
workflow_dispatch com delete=false dry-run qualquer mantenedor
workflow_dispatch com delete=true DELETE qualquer mantenedor

O cron semanal nunca apaga branches. Ele apenas gera o relatório no Job Summary da execução, permitindo revisão humana antes da deleção real.

A deleção real só ocorre quando um mantenedor dispara o workflow manualmente em Actions → Branch retention cleanup → Run workflow marcando delete=true.

Confirmação do estado final

Cada execução (dry-run ou real) escreve no GITHUB_STEP_SUMMARY quatro seções e um bloco de confirmação:

  • Deleted — branches que foram (ou seriam) apagadas
  • Kept — protected prefix — protegidas por regex
  • Kept — within retention window — mergeadas, mas com tip recente
  • Kept — not merged into main
  • Final state:
  • número de branches restantes no remoto após a execução
  • modo da execução (dry-run ou DELETE)

Esse bloco serve como evidência de auditoria — basta abrir a execução do workflow para ver o estado pré/pós e quais branches foram tocadas.

Ajustando a janela

O input retention_days do workflow_dispatch permite sobrescrever os 14 dias padrão (ex.: 7 para um expurgo mais agressivo). O cron sempre usa o padrão.

Limpeza local

Para limpar suas branches locais que já não existem no remoto:

git fetch --prune
git branch --merged main | grep -vE '^\*|^\s*main$' | xargs -r git branch -d