🔒

Azure DevOps Branch Policies

Azure DevOps - Configuração de Branch Policies

🎯 Objetivo

Configurar proteções na branch main para garantir qualidade e rastreabilidade do código em produção.

📋 Pré-requisitos

🔧 Passo a Passo

1. Acessar Branch Policies

  1. Abrir Azure DevOps: https://dev.azure.com/[sua-organizacao]/Audissey
  2. Navegar: Repos → Branches
  3. Localizar branch main
  4. Click nos 3 pontos (⋯) ao lado de main
  5. Selecionar Branch policies

2. Configurar Minimum Reviewers

Seção: "Require a minimum number of reviewers"

✅ Enable this policy

Configurações:
├─ Minimum number of reviewers: 1
├─ ❌ Allow requestors to approve their own changes
├─ ✅ Prohibit the most recent pusher from approving
├─ ✅ Allow completion even if some reviewers vote to wait or reject
│    (Recomendado: ❌ deixar desabilitado para forçar consenso)
└─ When new changes are pushed:
   └─ ✅ Reset all approval votes (recommended)

Resultado: Commits diretos bloqueados, pelo menos 1 aprovação necessária.

3. Configurar Build Validation

Seção: "Build validation"

  1. Click ➕ Add build policy
  2. Configurar:
Build pipeline: Backend CI - API & Worker
Path filter: (deixar vazio para todos os arquivos)
Trigger: Automatic
Policy requirement: Required
Build expiration: Immediately when main is updated
Display name: CI Validation (Main)
  1. Click Save

Resultado: PRs só podem ser merged se pipeline passar.

4. Configurar Comment Resolution

Seção: "Check for comment resolution"

✅ Required

Configurações:
└─ All comments must be resolved before completion

Resultado: Todas as observações devem ser resolvidas antes do merge.

5. Configurar Linked Work Items

Seção: "Check for linked work items"

⚠️ Optional (ou Required conforme preferência)

Configurações:
└─ Encourage or require association with a work item

Resultado: Rastreabilidade entre código e user stories/tasks.

6. Limitar Tipos de Merge

Seção: "Limit merge types"

✅ Basic merge (não squash): ❌ Desabilitar
✅ Squash merge: ✅ Habilitar
✅ Rebase and fast-forward: ❌ Desabilitar
✅ Rebase with merge commit: ❌ Desabilitar

Default merge type: Squash commit

Resultado: Histórico limpo com 1 commit por feature.

7. Configurar Status Checks (Opcional)

Seção: "Status check"

Adicionar validações extras se houver integrações:

Click ➕ "Add status policy" se aplicável

🔒 Configuração Final da Branch Main

Após seguir todos os passos, as políticas devem estar:

Branch: main

✅ Require a minimum number of reviewers (1)
   ├─ Reset votes on push
   └─ Prohibit last pusher approval

✅ Build validation
   └─ Backend CI - API & Worker (Required)

✅ Check for comment resolution (Required)

⚠️ Check for linked work items (Optional)

✅ Limit merge types
   └─ Squash merge only

🔄 Configurar Branch Dev (Opcional mas Recomendado)

Repetir processo para dev com regras relaxadas:

  1. Navegar para branch dev → Branch policies
  2. Configurar:
✅ Build validation (Required)
   └─ Backend CI - API & Worker

⚠️ Minimum reviewers (Optional)
   └─ Reviewers: 0 (apenas sugestão)

✅ Limit merge types
   └─ Allow all types

Benefício: CI valida antes do merge, mas processo mais ágil.

🏷️ Definir Default Branch

  1. Navegar: Project Settings (canto inferior esquerdo)
  2. Repositories → Selecionar Audissey
  3. Settings tab
  4. Default branch: Alterar para dev
  5. Click Save

Resultado: Pull requests e clones usarão dev por padrão.

✅ Validação

Testar Branch Protection

# 1. Tentar push direto para main (deve falhar)
git checkout main
echo "test" >> README.md
git add README.md
git commit -m "test: direct push"
git push origin main

# Esperado: ❌ Error - TF402455: Pushes to this branch are not permitted

# 2. Criar PR corretamente
git checkout dev
git checkout -b feature/test-protection
echo "# Test" >> test.md
git add test.md
git commit -m "feat: test branch protection"
git push -u origin feature/test-protection

# 3. Criar PR via Azure DevOps UI
# 4. Verificar que CI roda automaticamente
# 5. Verificar que "Complete" está bloqueado até aprovação

Checklist de Verificação

📊 Exemplo de PR Workflow

Criar Feature

git checkout dev
git pull origin dev
git checkout -b feature/user-favorites
# ... desenvolver ...
git push -u origin feature/user-favorites

Abrir PR (via Azure DevOps)

  1. Repos → Pull Requests → New pull request

  2. Preencher:

    • Source: feature/user-favorites
    • Target: dev
    • Title: feat: implementar sistema de favoritos
    • Description:
      ## Mudanças
      - Adicionar endpoints de favoritos
      - Criar schema Favorite
      - Testes E2E completos
      
      ## Closes
      #1234
      
    • Reviewers: Adicionar membros da equipe
    • Work Items: Link para user story
  3. Pipeline CI roda automaticamente

  4. Aguardar aprovação

  5. Resolver comentários se houver

  6. Complete (squash merge) → dev

Release para Produção

# Após features testadas em dev
git checkout dev
git pull origin dev
git checkout -b release/v1.2.0
git push -u origin release/v1.2.0

Criar PR de release/v1.2.0 → main:

## Release v1.2.0 - 27 Dezembro 2024

### 🎉 Features
- Sistema de favoritos para podcasts (#1234)
- Busca unificada com filtros (#1235)
- Player de rádio melhorado (#1236)

### 🐛 Bugfixes
- Corrigir race condition no sync (#1240)
- Resolver memory leak no worker (#1241)

### 📚 Documentation
- Atualizar API reference (#1242)

### 🔧 Chore
- Atualizar dependências (#1243)

🚨 Troubleshooting

Erro: "TF402455: Pushes to this branch are not permitted"

✅ Esperado: Branch protection funcionando
🔧 Solução: Criar feature branch e PR

Erro: "Build validation failed"

✅ Esperado: CI encontrou problemas
🔧 Solução:

# Rodar testes localmente
npm run lint
npm run test
npm run build

# Corrigir e fazer novo commit
git add .
git commit -m "fix: corrigir erros CI"
git push

Não consigo aprovar meu próprio PR

✅ Esperado: "Prohibit last pusher" ativado
🔧 Solução: Solicitar aprovação de outro membro

Pipeline não roda automaticamente

🔧 Verificar:

  1. Build policy configurado como "Automatic"
  2. Path filter correto (vazio = todos arquivos)
  3. Pipeline permissions incluem branch

📚 Referências

📞 Suporte

Em caso de dúvidas sobre permissões ou configurações:

  1. Verificar se usuário tem role de Project Administrator
  2. Contactar administrador do Azure DevOps
  3. Ver logs em Project Settings → Auditing

Próximos passos: Após configurar políticas, testar workflow criando PR de teste conforme seção "Validação".