GitHub profissional: PR, review, issues, Actions básico
- ⬜🌿 Git de verdade: commit, branch, merge, rebase, reflog(Fundamentos Técnicos)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
GitHub não é apenas hospedagem de código — é a plataforma de colaboração que define como equipes profissionais desenvolvem software. Pull Requests, code review e Actions automatizando CI/CD são o padrão da indústria.
Fork vs Clone: quando usar cada um
| Situação | Abordagem | Por quê |
|---|---|---|
| Repositório onde você tem acesso | Clone direto | Push direto para o repo |
| Projeto open-source de terceiros | Fork → clone do fork | Você não tem push access no original |
| Experimento isolado de um projeto | Fork | Mudanças não afetam o original |
# Fluxo para contribuir com open-source: # 1. Fork no GitHub (botão Fork na interface) # 2. Clone do SEU fork (não do original) git clone git@github.com:SEU-USER/projeto.git cd projeto # 3. Adicionar o original como "upstream" git remote add upstream git@github.com:DONO-ORIGINAL/projeto.git git remote -v # origin git@github.com:SEU-USER/projeto.git (fetch) # upstream git@github.com:DONO-ORIGINAL/projeto.git (fetch) # 4. Manter fork atualizado com o original git fetch upstream git checkout main git merge upstream/main # ou: git rebase upstream/main # 5. Criar branch para sua mudança git checkout -b fix/bug-de-login # 6. Push para SEU fork git push origin fix/bug-de-login # 7. Abrir PR no GitHub: seu fork → repositório original
Pull Requests: o coração da colaboração
Um Pull Request (PR) é um pedido para integrar mudanças de uma branch para outra. No GitHub, serve tanto para code review quanto para documentar o que foi feito e por quê.
Título
Deve descrever o QUÊ foi feito em uma linha. Prefixos comuns: feat:, fix:, chore:, docs:, refactor:
Descrição
Por que essa mudança? O que ela resolve? Como testar? Screenshots para mudanças visuais. Links para issues relacionadas.
Reviewers
Quem deve revisar? Pelo menos alguém que conheça a área do código.
Labels
bug, enhancement, breaking change, needs-review — facilitam filtrar e priorizar PRs.
Linked issues
Fixes #123 ou Closes #123 na descrição fecha a issue automaticamente quando o PR for mergeado.
# Template de PR (/github/PULL_REQUEST_TEMPLATE.md no repo)
## O que essa mudança faz?
Adiciona autenticação JWT na API. Substitui sessões em memória.
## Por quê?
Preparação para múltiplos servidores — sessões em memória não funcionam com load balancer.
Closes #89
## Como testar?
1. npm run dev
2. POST /auth/login com {"email": "test@test.com", "password": "123"}
3. Usar o token retornado no header Authorization: Bearer <token>
4. GET /profile deve retornar dados do usuário
## Checklist
- [x] Testes adicionados/atualizados
- [x] Documentação atualizada
- [ ] Migration necessária? NãoCode Review: como dar e receber feedback
Code review é uma conversa técnica, não uma auditoria. O objetivo é melhorar o código e disseminar conhecimento — não provar quem é mais esperto.
# Como dar review no GitHub: # 1. Files Changed → ver diff completo # 2. Click na linha → adicionar comentário inline # 3. "Start a review" → acumula comentários antes de submeter # 4. Submit review: Comment / Approve / Request Changes # Tipos de comentário (boa prática nomear explicitamente): # "nit: " — nitpick menor, pode ignorar ou não # "suggestion: " — sugestão não-bloqueante # "must: " — bloqueante, precisa resolver antes do merge # "question: " — só pedindo explicação, não bloqueante # Exemplos de comentários construtivos: # ❌ "Isso está errado" # ✅ "Esta query pode ter N+1 — que tal usar um JOIN aqui? [link para docs]" # ❌ "Por que você fez assim?" # ✅ "Tenho curiosidade sobre a escolha de X sobre Y — tem alguma razão específica? # Pensei que Y seria mais simples aqui." # Ao receber review: # - Responder cada comentário (mesmo com "feito" ou "concordo/discordo porque...") # - Resolve conversation após resolver # - Re-request review quando pronto
Issues, Labels e Milestones
# Issues: rastrear bugs, features, tarefas # Boas práticas: # - Título descritivo: não "Bug login", sim "Login falha com email com +alias (ex: user+tag@mail.com)" # - Reprodução mínima para bugs (OS, versão, passos exatos) # - Expected vs Actual behavior # - Labels para categorizar # - Assign para responsável # Labels úteis (criar no repo: Settings → Labels) bug # comportamento incorreto enhancement # nova funcionalidade good first issue # adequado para contribuintes novos help wanted # contribuições externas bem-vindas breaking change # muda API ou comportamento existente needs-triage # ainda não avaliado blocked # aguardando outra coisa # Milestones: agrupar issues em um objetivo/release # Settings → Milestones → New Milestone # "v2.0 — autenticação multi-tenant" com due date # Associar issues ao milestone → ver progresso # Linking issues nos commits/PRs git commit -m "fix: corrige login com email alias Fixes #42" # GitHub linkará automaticamente e fechará ao merge
GitHub Actions: CI/CD básico
GitHub Actions é o sistema de automação do GitHub. Workflows são arquivos YAML em .github/workflows/ que rodam em resposta a eventos (push, PR, schedule, etc).
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run lint
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm test
deploy:
runs-on: ubuntu-latest
needs: [lint, test] # só roda se lint e test passaram
if: github.ref == 'refs/heads/main' # só na branch main
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run build
- name: Deploy para produção
env:
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} # segredo armazenado no repo
run: ./scripts/deploy.sh${{ secrets.NOME }}. O GitHub redacta valores de secrets nos logs automaticamente.Branch protection rules: tornando o processo obrigatório
# Settings → Branches → Add branch protection rule # Branch name pattern: main (ou usar glob: release/*) # Configurações recomendadas para equipes: ✅ Require a pull request before merging ✅ Require approvals: 1 (ou 2 para times maiores) ✅ Dismiss stale pull request approvals when new commits are pushed ✅ Require review from Code Owners (se tiver .github/CODEOWNERS) ✅ Require status checks to pass before merging ✅ Require branches to be up to date before merging Status checks: lint, test (os jobs do CI) ✅ Require conversation resolution before merging ✅ Do not allow bypassing the above settings (mesmo admins precisam seguir as regras — importante!) # CODEOWNERS: definir quem deve revisar arquivos específicos # .github/CODEOWNERS *.go @time-backend src/api/ @time-api *.sql @dba-team docs/ @tech-writers
Quiz rápido
3 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito