Este documento descreve como configurar as regras de proteção de branches no GitHub para garantir o fluxo de trabalho correto.
feature/* ──┐
fix/* ──┼──► developer ──► main (produção)
hotfix/* ──┘
(1 aprovação) (2 aprovações)
Acesse: Settings → Branches → Add branch protection rule
Branch name pattern: main
-
Require a pull request before merging
- Require approvals: 2
- Dismiss stale pull request approvals when new commits are pushed
- Require review from Code Owners (opcional, se tiver CODEOWNERS)
-
Require status checks to pass before merging
- Require branches to be up to date before merging
- Status checks obrigatórios:
Validar Branch de OrigemCI Checks CompletosInformações do PR
-
Require conversation resolution before merging
-
Do not allow bypassing the above settings
-
Restrict who can push to matching branches
- Apenas via Pull Request (ninguém pode fazer push direto)
-
Allow force pushes → DESMARCAR
-
Allow deletions → DESMARCAR
Branch name pattern: developer
-
Require a pull request before merging
- Require approvals: 1
- Dismiss stale pull request approvals when new commits are pushed
-
Require status checks to pass before merging
- Require branches to be up to date before merging
- Status checks obrigatórios:
Validar Branch de OrigemCI ChecksInformações do PR
-
Require conversation resolution before merging
-
Allow force pushes → DESMARCAR
-
Allow deletions → DESMARCAR
Branch name pattern: feature/**
-
Require status checks to pass before merging
- Status checks:
lint,test,build
- Status checks:
-
Allow deletions (para limpar após merge)
Após configurar, teste o fluxo:
- Tente fazer push direto na
main→ Deve falhar - Tente fazer push direto na
developer→ Deve falhar - Crie uma branch
feature/teste→ Deve funcionar - Abra PR de
feature/testeparadeveloper→ Deve exigir 1 aprovação - Abra PR de
developerparamain→ Deve exigir 2 aprovações - Tente abrir PR de
feature/testeparamain→ CI deve falhar
Se preferir usar a CLI:
# Proteger main (requer GitHub CLI instalado)
gh api repos/{owner}/{repo}/branches/main/protection \
-X PUT \
-H "Accept: application/vnd.github+json" \
-f required_status_checks='{"strict":true,"contexts":["Validar Branch de Origem","CI Checks Completos"]}' \
-f enforce_admins=true \
-f required_pull_request_reviews='{"required_approving_review_count":2,"dismiss_stale_reviews":true}' \
-f restrictions=null
# Proteger developer
gh api repos/{owner}/{repo}/branches/developer/protection \
-X PUT \
-H "Accept: application/vnd.github+json" \
-f required_status_checks='{"strict":true,"contexts":["Validar Branch de Origem","CI Checks"]}' \
-f enforce_admins=true \
-f required_pull_request_reviews='{"required_approving_review_count":1,"dismiss_stale_reviews":true}' \
-f restrictions=nullEdite a regra existente em vez de criar uma nova.
Os status checks só aparecem após o primeiro CI executar com sucesso. Execute o CI pelo menos uma vez antes de configurar.
Certifique-se de que os nomes dos jobs no workflow correspondem exatamente aos nomes configurados na proteção.