🚀 Cansado de configurar projetos do zero e copiar e colar os mesmos arquivos de workflow CI/CD vez após vez? Chega de retrabalho! Neste post, vamos resolver esse problema de uma vez por todas usando Repositórios Template do GitHub.
O Problema: Retrabalho Constante
Toda vez que você inicia um novo projeto, precisa:
- ✅ Criar o repositório
- ✅ Configurar
.gitignore - ✅ Adicionar
README.mdpadrão - ✅ Configurar workflows de CI/CD
- ✅ Copiar configurações de linters (ESLint, Prettier, etc.)
- ✅ Configurar estrutura de diretórios
- ✅ Adicionar arquivos de licença
- ✅ Configurar issue templates
- ✅ Configurar pull request templates
- ✅ E muito mais…
Se você tem 10 microsserviços para criar, isso significa repetir esse processo 10 vezes. E se você precisar atualizar algo? Boa sorte atualizando manualmente 10 repositórios!
O Custo Real
Vamos fazer as contas:
- Tempo por configuração inicial: ~30-60 minutos
- 10 repositórios: 5-10 horas de trabalho repetitivo
- Atualizações futuras: Multiplique esse tempo sempre que algo mudar
Isso é tempo que você deveria estar usando para criar valor, não copiando arquivos.
A Solução: GitHub Template Repositories
Repositórios Template são uma funcionalidade nativa do GitHub que permite criar um “molde” para novos projetos. Com um clique, você pode gerar um novo repositório com toda a estrutura, configurações e arquivos já prontos.
Benefícios Principais
✅ Economia de tempo brutal - De 1 hora para 30 segundos na criação de projetos
✅ Consistência garantida - Todos os projetos seguem os mesmos padrões
✅ Onboarding mais rápido - Novos desenvolvedores começam com estrutura familiar
✅ Manutenção centralizada - Atualize o template e novos projetos já começam atualizados
✅ Best practices embutidas - Force boas práticas desde o primeiro commit
Como Criar um Repositório Template
Passo 1: Criar o Repositório Base
Primeiro, crie um repositório normal com toda a estrutura que você quer replicar:
my-node-template/
├── .github/
│ ├── workflows/
│ │ ├── ci.yml
│ │ ├── deploy.yml
│ │ └── security-scan.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── pull_request_template.md
├── .vscode/
│ ├── settings.json
│ └── extensions.json
├── src/
│ ├── index.js
│ └── __tests__/
│ └── index.test.js
├── .gitignore
├── .eslintrc.js
├── .prettierrc
├── jest.config.js
├── package.json
├── README.md
├── LICENSE
└── CONTRIBUTING.mdPasso 2: Tornar o Repositório um Template
- Vá para Settings do repositório
- Na seção General, marque Template repository
- Salve as mudanças
Pronto! Agora seu repositório é um template.
Passo 3: Usar o Template
Para criar um novo projeto a partir do template:
- Vá até o repositório template
- Clique em Use this template → Create a new repository
- Defina o nome e configurações do novo repo
- Clique em Create repository
Em segundos, você tem um novo repositório com toda a estrutura!
Exemplos de Templates Úteis
1. Template para API Node.js
node-api-template/
├── .github/workflows/
│ └── ci.yml # Lint, test, build
├── src/
│ ├── controllers/
│ ├── models/
│ ├── routes/
│ ├── middleware/
│ └── index.js
├── tests/
├── .env.example
├── .eslintrc.js
├── .prettierrc
├── jest.config.js
├── Dockerfile
├── docker-compose.yml
└── README.mdWorkflow CI/CD incluído:
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run build2. Template para Microserviço Python
python-microservice-template/
├── .github/workflows/
│ ├── ci.yml
│ └── deploy.yml
├── app/
│ ├── __init__.py
│ ├── main.py
│ └── routers/
├── tests/
├── .flake8
├── .pylintrc
├── pytest.ini
├── requirements.txt
├── requirements-dev.txt
├── Dockerfile
└── README.md3. Template para Frontend React
react-app-template/
├── .github/workflows/
│ └── ci.yml
├── public/
├── src/
│ ├── components/
│ ├── hooks/
│ ├── pages/
│ ├── services/
│ ├── utils/
│ └── App.jsx
├── .eslintrc.json
├── .prettierrc
├── vite.config.js
├── tsconfig.json
└── package.jsonTemplate vs Fork: Qual a Diferença?
Muita gente confunde Template com Fork. Aqui está a diferença:
Fork
- Mantém histórico Git completo do repositório original
- Conectado ao upstream - fácil sincronizar mudanças
- Ideal para contribuir com projetos open-source
- Mostra relação com o repo original no GitHub
Template
- Cria repositório limpo sem histórico do template
- Independente - sem conexão com o original
- Ideal para iniciar novos projetos
- Não mostra relação - é tratado como novo projeto
Use Template quando: Quer começar um projeto novo baseado em estrutura existente
Use Fork quando: Quer contribuir ou manter sincronizado com o original
Recursos Avançados de Templates
1. Variáveis Dinâmicas no README
Você pode usar placeholders que os usuários substituem:
# {{PROJECT_NAME}}
## Descrição
Este projeto é {{PROJECT_DESCRIPTION}}.
## Instalação
\`\`\`bash
git clone https://github.com/{{USERNAME}}/{{REPO_NAME}}
cd {{REPO_NAME}}
npm install
\`\`\`2. Scripts de Inicialização
Inclua um script init.sh que configura o projeto:
#!/bin/bash
# init.sh
echo "🚀 Configurando novo projeto..."
# Solicita nome do projeto
read -p "Nome do projeto: " PROJECT_NAME
# Atualiza package.json
sed -i "s/{{PROJECT_NAME}}/$PROJECT_NAME/g" package.json
# Gera .env a partir do exemplo
cp .env.example .env
# Instala dependências
npm install
# Primeiro commit
git add .
git commit -m "chore: initial commit from template"
echo "✅ Projeto $PROJECT_NAME configurado com sucesso!"3. GitHub Actions para Validação
Inclua um workflow que valida o setup inicial:
name: Template Validation
on:
push:
branches: [main]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check for template placeholders
run: |
if grep -r "{{PROJECT_NAME}}" .; then
echo "⚠️ Ainda existem placeholders não substituídos!"
exit 1
fi
- name: Validate structure
run: |
required_files=".gitignore README.md package.json"
for file in $required_files; do
if [ ! -f "$file" ]; then
echo "❌ Arquivo obrigatório não encontrado: $file"
exit 1
fi
doneBest Practices para Templates
1. Documentação Clara
Seu README.md deve explicar:
- O que o template inclui
- Como usar o template
- Quais configurações precisam ser ajustadas
- Próximos passos após criar o projeto
# Node.js API Template
## 📦 O que está incluído
- ✅ Express.js configurado
- ✅ Jest para testes
- ✅ ESLint + Prettier
- ✅ GitHub Actions CI/CD
- ✅ Docker + docker-compose
- ✅ Estrutura de diretórios recomendada
## 🚀 Como usar
1. Clique em "Use this template"
2. Execute `npm install`
3. Copie `.env.example` para `.env`
4. Personalize as configurações
5. Comece a desenvolver!
## ⚙️ Configurações necessárias
- [ ] Atualizar nome do projeto em `package.json`
- [ ] Configurar variáveis de ambiente em `.env`
- [ ] Adicionar secrets no GitHub (se usar CI/CD)2. Mantenha Atualizado
Templates desatualizados são piores que não ter template:
# Crie um workflow para dependabot
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"3. Múltiplos Templates por Stack
Organize templates por tecnologia/propósito:
my-org-templates/
├── node-api-template/
├── python-ml-template/
├── react-spa-template/
├── nextjs-app-template/
├── docker-compose-template/
└── terraform-aws-template/4. Ambiente de Exemplo Funcional
O template deve ser funcional out-of-the-box:
{
"name": "example-project",
"scripts": {
"dev": "nodemon src/index.js",
"test": "jest",
"lint": "eslint .",
"format": "prettier --write ."
}
}Após clonar, npm install && npm run dev já deve funcionar.
Combinando Templates com Outras Ferramentas
Templates + Cookiecutter
Para projetos Python, combine com Cookiecutter:
cookiecutter gh:your-org/python-templateTemplates + Yeoman
Para JavaScript, use Yeoman generators:
yo my-generatorTemplates + Terraform Modules
Para infraestrutura:
module "api_service" {
source = "github.com/my-org/terraform-api-module"
app_name = "my-api"
environment = "production"
}Casos de Uso Reais
1. Microsserviços Consistentes
Antes:
- Cada microsserviço tinha estrutura diferente
- Pipelines de CI/ CD inconsistentes
- Difícil para devs mudarem entre serviços
Depois (com template):
- Todos os 30 microsserviços seguem mesmo padrão
- CI/CD idêntico em todos
- Qualquer dev pode contribuir em qualquer serviço
2. Onboarding de Novos Projetos
Antes: 3-4 dias configurando projeto novo
Depois: 30 minutos usando template
3. Hackathons e Protótipos
Use templates para começar rápido:
- Template com autenticação pronta
- Template com dashboard básico
- Template com API CRUD completa
Limitações e Alternativas
Limitações dos Templates
- Snapshot estático - Novos projetos não recebem atualizações do template automaticamente
- Sem sincronização - Mudanças no template não se propagam
- Customização manual - Ainda precisa ajustar alguns arquivos
Alternativas
Para manter sincronizado:
- Use Git subtrees ou submodules para código compartilhado
- Use Reusable Workflows (vimos no post anterior) para CI/CD
- Use npm packages para código comum
Para automação total:
- Cookiecutter (Python)
- Yeoman (JavaScript)
- Terraform (Infrastructure)
Conclusão: Menos Setup, Mais Código
Repositórios Template são uma das funcionalidades mais subestimadas do GitHub. Quando bem implementados, eles:
- ⏰ Economizam horas de trabalho repetitivo
- 🎯 Garantem consistência entre projetos
- 📚 Facilitam onboarding de novos desenvolvedores
- 🚀 Aceleram prototipagem e experimentação
- ✅ Forçam best practices desde o início
Checklist de Implementação
- Identifique padrões comuns nos seus projetos
- Crie template com estrutura base
- Adicione workflows de CI/CD
- Configure linters e formatters
- Escreva documentação clara
- Teste criando novos projetos
- Compartilhe com o time
- Mantenha atualizado
Próximos Passos
No próximo vídeo/post, vou mostrar:
- Templates avançados com inicialização automatizada
- Cookiecutter templates para personalização interativa
- Template + Terraform para infraestrutura como código
- Governança de templates em organizações
Recursos Úteis
Já usa repositórios template? Compartilha nos comentários como você os utiliza! Qual template seria mais útil para você?
#GitHub #Template #Productivity #DevOps #BestPractices

Comments