Pitch: Criei uma CLI em Shell Script para automatizar o setup completo de repositórios Git/GitHub (autoprojrepo)
Toda vez que eu começava um novo projeto, me pegava repetindo os mesmos passos manuais:
- Criar a pasta do projeto.
- Rodar git init e configurar a branch principal.
- Criar .gitignore, .env.example e arquivos base da stack.
- Criar a estrutura de branches (main para prod, stg para homologação, dsv para desenvolvimento).
- Abrir o navegador ou rodar o GitHub CLI para criar o repositório remoto.
- Fazer push de todas as branches configurando upstream (-u).
- Abrir a pasta no editor de código.
Embora não demore horas, é um atrito repetitivo que rouba foco. Para resolver isso e padronizar o ponto de partida de qualquer repositório, escrevi o autoprojrepo.
🛠️ O que a ferramenta faz?
Com um único comando, o script executa todo o fluxo de ponta a ponta:
-
Scaffold por Stack: Gera estrutura inicial pronta com .gitignore adequado para Python, Node.js, n8n, Docker, Go ou Genérico.
-
Commit Raiz Limpo: Cria um commit inicial vazio (--allow-empty) antes de aplicar o scaffold, garantindo uma raiz limpa para futuros rebases e ramificações.
-
Git Flow Imediato: Configura as branches main e stg, faz o checkout para a branch dsv e sobe tudo para o remoto com rastreamento ativo.
-
Integração com GitHub CLI (gh): Detecta a distro Linux (apt, dnf, pacman, zypper, apk) ou macOS (brew) e instala/autentica o gh caso ainda não esteja presente.
-
Handoff Direto: Abre o VS Code diretamente na raiz do projeto ao concluir.
⚡ Instalação e Uso
Para instalar o executável em ~/.local/bin via comando único:
:~$ curl -sSL https://raw.githubusercontent.com/mazinhorj/autoprojrepo/main/install.sh | bash
Para inicializar um projeto:
# Exemplo: criando um projeto Python público
:~$ autoprojrepo api-clientes --template python --public
# Exemplo: inicializando um container Docker apenas local (sem GitHub)
:~$ autoprojrepo microservico-auth -t docker --no-remote
# Atualizar a ferramenta para a versão mais recente
:~$ autoprojrepo --update
🛡️ Cuidados Técnicos no Shell Script
Ao estruturar o script, priorizei algumas boas práticas para evitar dores de cabeça no terminal:
- Segurança de Execução: Uso de set -euo pipefail para interromper o script imediatamente caso qualquer comando intermediário falhe ou tente ler variáveis não declaradas.
- Validação Estrita: Passado pelo ShellCheck para garantir compatibilidade e ausência de falhas em expansões de variáveis/Here-Docs.
- Multi-distro: Tratamento condicional para múltiplos gerenciadores de pacotes sem exigir dependências pesadas (Node/Python) para rodar o CLI.
🤝 Aberto a Contribuições
O projeto é 100% open source sob licença MIT e foi desenhado para ser facilmente expansível.
Se quiserem adicionar novos templates de stacks (Rust, Java/Spring, Flutter, PHP/Laravel, Elixir), suporte a outros editores (Neovim, Zed, Cursor) ou melhorias de compatibilidade, Pull Requests e Issues são super bem-vindos!
🔗 Repositório no GitHub: github.com/mazinhorj/autoprojrepo
Como vocês costumam padronizar o pontapé inicial de novos projetos por aí? Usam scripts próprios, templates de repositório do GitHub ou geradores de cada framework? Feedback e sugestões são muito bem-vindos!