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:
- Não é
mainnemHEAD. - Não combina com nenhum dos prefixos protegidos:
release/— releases publicadas e tags em preparaçãosecurity/— branches de remediação de incidentes (auditoria forense)hotfix/— correções emergenciais em produçãodocs/— 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-runouDELETE)
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