Executando verificação de segurança...
2

[PITCH/2] Fiz um mantenedor automático de repositórios do Github (homebrew)

Fala pessoal!

Há uns meses eu compartilhei aqui o GitHub AutoMaintainer, um CLI que criei pra resolver uma dor que eu tenho muito: perder tempo fechando PRs antigos, deletando branches já mergeadas e fazendo tarefas repetitivas de manutenção no GitHub.

Na verdade, eu odeio fazer qualquer coisa em bulk no Github, porque simplesmente não dá pra fazer em bulk. Então sempre que posso eu automatizo essas coisas.

A recepção foi muito boa, recebi feedbacks e sugestões. E como prometido, voltei com a v1.1, dessa vez bem mais robusta.


O que tinha antes (v1.0)

  • Fechar PRs antigos automaticamente
  • Deletar branches já mergeadas
  • Modo --dry-run pra simular antes de executar
  • Suporte a org inteira ou repo específico

O que tem agora (v1.1)

Novos comandos

close-issues - Fecha issues inativas automaticamente

automaintainer close-issues --org minha-org --days 90
  • Período de carência com label "stale" antes de fechar
  • Opção pra travar issues após fechamento
  • Filtros por labels

repos - Gerenciamento de repositórios em massa (esse é o mais útil pra mim)

automaintainer repos list --org minha-org --inactive 365
automaintainer repos archive --org minha-org -i
automaintainer repos delete --org minha-org -i
  • Lista repos com filtros (inativos, arquivados)
  • Arquiva ou deleta em massa
  • Modo interativo (-i) pra selecionar visualmente

security - Gestão de alertas do Dependabot

automaintainer security list --org minha-org --severity high
automaintainer security dismiss --org minha-org --severity low --days 180
  • Lista alertas por severidade e estado
  • Descarta alertas antigos de baixa prioridade

Nova interface

Reescrevi boa parte da UI usando as bibliotecas do Charmbracelet:

Tabelas estilizadas - Nada de output feio no terminal

┌────────────────────────┬───────────────┬────────────┐
│ REPOSITORY             │ LAST ACTIVITY │ STATUS     │
├────────────────────────┼───────────────┼────────────┤
│ minha-org/api          │ 2024-01-15    │ ● active   │
│ minha-org/legado       │ 2022-03-10    │ ○ archived │
└────────────────────────┴───────────────┴────────────┘

Barras de progresso - Feedback visual em operações longas

Scanning repos [████████████████░░░░] 42/100 minha-org/repo-atual

Modo preview (--preview) - Seleciona antes de executar

automaintainer close-prs --org minha-org --preview

Abre uma interface interativa onde você navega com setas, seleciona com espaço, e confirma só o que quiser.


Outras melhorias

URLs do GitHub como argumento - Mais prático

# Antes
automaintainer close-prs --org minha-org

# Agora também funciona
automaintainer close-prs https://github.com/minha-org
automaintainer repos list https://github.com/user/repo

Melhor acesso a repos privados - Corrigido o acesso via endpoint autenticado

Status coloridos - Verde pra ativo, cinza pra arquivado, vermelho pra alertas críticos


Instalação

brew install olucasandrade/automaintainer/automaintainer

Ou baixe o binário direto das releases.


Próximos passos

  • Dashboard interativo completo (já em desenvolvimento)
  • Sync de labels entre repos?
  • Relatórios exportáveis
  • Suporte a GitHub Enterprise?

Por que Go?

  • Binário único, sem dependências
  • Cross-platform (Linux, macOS, Windows)
  • Ótima performance pra operações em bulk
  • Ecossistema excelente pra CLI (Cobra, Bubble Tea)

O código tá todo aberto: github.com/olucasandrade/homebrew-automaintainer

Se você mantém repositórios, trabalha com open source, ou só quer automatizar tarefas chatas do GitHub, experimenta e me conta o que achou.

Issues, PRs e sugestões são sempre bem-vindos. A ideia continua a mesma: facilitar a vida de quem já facilita a vida dos outros com código.

Carregando publicação patrocinada...
1

Eu fiz um scriptzinho em GO (inicialmente em Javascript com NodeJS) também para operações de manutenção em repositórios git. Mas nada muito robusto e somente para uso local.
No meu caso, as issues, eu pego de um outro bugtracker externo.

Dei uma olhada por cima e ficou bem legal. Talvez eu busque inspirações na sua implementação.