🌳

Git Workflow & Políticas

Git Workflow & Branch Policies

📋 Visão Geral

Este documento define as políticas de branches e o workflow Git para o projeto Audissey, garantindo qualidade, rastreabilidade e estabilidade em produção.

🌳 Estrutura de Branches

Main Branch (`main`)

Development Branch (`dev`)

Feature Branches (`feature/*`)

Bugfix Branches (`bugfix/*`)

Hotfix Branches (`hotfix/*`)

🔒 Políticas de Proteção

Branch `main` - Regras Obrigatórias

1. Pull Requests Obrigatórios

2. Reviewers

3. Build & Tests

4. Merge Strategy

Branch `dev` - Regras Recomendadas

1. Pull Requests

2. Build Status

🔄 Workflow de Desenvolvimento

1️⃣ Criar Feature Branch

# Garantir que está atualizado
git checkout dev
git pull origin dev

# Criar nova feature
git checkout -b feature/minha-feature

2️⃣ Desenvolver Feature

# Fazer commits frequentes e descritivos
git add .
git commit -m "feat: adicionar endpoint de favoritos"

# Push para remoto
git push -u origin feature/minha-feature

3️⃣ Criar Pull Request

Via Azure DevOps:

  1. Acessar Repos → Pull Requests
  2. Click "New pull request"
  3. Source: feature/minha-feature
  4. Target: dev
  5. Preencher:
    • Título: Claro e descritivo
    • Descrição: O que foi feito e por quê
    • Work Items: Associar tasks/stories
    • Reviewers: Adicionar revisores

Template de PR:

## 📝 Descrição

Implementação do sistema de favoritos para podcasts e rádios.

## 🎯 Mudanças

- Adicionar endpoints GET/POST /api/favorites
- Criar schema Favorite no MongoDB
- Implementar autenticação JWT
- Testes unitários e E2E

## ✅ Checklist

- [x] Testes passando
- [x] Documentação atualizada
- [x] Breaking changes documentados
- [x] Performance verificada

## 🔗 Links

- Work Item: #1234
- Design: [Figma Link]

4️⃣ Code Review

O que verificar:

5️⃣ Merge para Dev

# Após aprovação
# Squash merge via Azure DevOps UI
# Deletar feature branch após merge

6️⃣ Release para Produção

# Criar PR de dev → main
# Título: "Release v1.2.0 - [data]"
# Incluir changelog completo
# Aguardar aprovação de reviewers
# Merge para main dispara deploy automático

📊 Configuração Azure DevOps

Passo 1: Proteger Branch Main

  1. Acessar: Repos → Branches

  2. Click nos ... da branch main

  3. Selecionar Branch policies

  4. Configurar:

    Require a minimum number of reviewers:

    • ✅ Enable
    • Minimum: 1
    • ✅ Allow requestors to approve their own changes: ❌ Desabilitar
    • ✅ Prohibit the most recent pusher: ✅ Habilitar
    • ✅ Reset votes when source branch is updated: ✅ Habilitar

    Check for linked work items:

    • ✅ Required (ou Optional)

    Check for comment resolution:

    • ✅ Required

    Limit merge types:

    • ✅ Squash merge only

    Build validation:

    • ✅ Add build policy
    • Pipeline: Backend CI - API & Worker
    • Trigger: Automatic
    • Policy requirement: Required

Passo 2: Configurar Branch Dev (Opcional)

Repetir processo acima com regras mais relaxadas:

Passo 3: Configurar Default Branch

  1. Acessar: Project Settings → Repositories
  2. Selecionar repositório Audissey
  3. Default branch: dev
  4. Save

🚀 Deploy Automático

CI/CD Pipeline Triggers

# azure-pipelines.yml
trigger:
  branches:
    include:
      - main # Produção
      - dev # Staging (quando configurado)
      - feature/* # CI apenas (sem deploy)

pr:
  branches:
    include:
      - main
      - dev

Comportamento:

📜 Conventional Commits

Formato

<type>(<scope>): <subject>

<body>

<footer>

Types

Exemplos

feat(api): adicionar endpoint de busca unificada

Implementa endpoint GET /api/search que busca em podcasts,
episódios e rádios simultaneamente.

Closes #456

---

fix(worker): corrigir race condition no sync de episódios

O worker estava criando episódios duplicados quando múltiplos
jobs rodavam em paralelo.

Fixes #789

---

docs(setup): atualizar guia de instalação do Azure

Adicionar instruções para Key Vault e Managed Identity.

---

perf(api): otimizar query de rádios por gênero

Reduz tempo de resposta de 500ms para 50ms usando índice composto.

Closes #234

🔍 Histórico Limpo

Squash Merge Benefits

Antes (sem squash):

* feat: adicionar favoritos
* fix: typo
* refactor: rename variable
* fix: lint errors
* update tests
* fix: more tests

Depois (com squash):

* feat: adicionar sistema de favoritos (#123)

Rebase vs Merge

🆘 Troubleshooting

"Cannot push to protected branch"

✅ Solução: Criar Pull Request em vez de push direto

# Criar feature branch
git checkout -b feature/minha-mudanca

# Fazer mudanças e push
git push -u origin feature/minha-mudanca

# Criar PR via Azure DevOps UI

"Build validation failed"

✅ Solução: Corrigir erros antes do merge

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

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

"Conflicts detected"

✅ Solução: Atualizar branch com dev

git checkout feature/minha-feature
git fetch origin
git rebase origin/dev

# Resolver conflitos
# git add <arquivos-resolvidos>
# git rebase --continue

git push --force-with-lease

📚 Recursos

✅ Checklist de Setup


🪝 Git Hooks (Husky)

O projeto usa Husky + lint-staged para correr validações automáticas antes de commit e push, evitando erros nas pipelines CI/CD.

Setup (automático)

Após npm install, o Husky inicializa-se automaticamente via script prepare.

Pre-commit — Lint dos ficheiros staged

Corre eslint --fix e prettier --write sobre os ficheiros que estão no stage:

Glob Comandos
*.{ts,js,mjs,cjs} eslint --fix, prettier --write
*.{html,css,scss,json,md,yml,yaml} prettier --write

Configuração em package.json → chave lint-staged.

Pre-push — Testes + Build (affected only)

Corre testes e build apenas para os projetos com alterações face a origin/dev:

App Targets
api test, build
worker test, build
admin-portal lint, build

Se nenhum projeto teve alterações, os checks são skipped.

Antes destes, corre os testes de scripts da Backend CI, se o push também os fizer correr no CI: ver Testes dos scripts no CI.

Bypass (emergência)

# Bypass pre-commit
git commit --no-verify -m "hotfix: urgent"

# Bypass pre-push
git push --no-verify

⚠️ Usar --no-verify apenas em emergências — as pipelines CI/CD continuam a validar.


Última atualização: 17 de julho de 2025
Mantido por: Equipe Audissey