Pular para o conteúdo principal

Git Workflow

Padrões de desenvolvimento que garantem rastreabilidade, histórico limpo e automação eficiente no projeto BITIO.

Fluxo de Trabalho (Git Flow Simplificado)

O BITIO usa um Git Flow simplificado otimizado para equipes ágeis:

gitgraph
commit id: "Initial"
branch develop
checkout develop
commit id: "Setup"

branch feature/menu-api
checkout feature/menu-api
commit id: "Add endpoints"
commit id: "Add tests"

checkout develop
merge feature/menu-api
commit id: "Integration"

checkout main
merge develop
commit id: "Release v1.0.0"
tag: "v1.0.0"

Branches Principais

BranchPropósitoProteçãoDeploy
mainCódigo estável em produção✅ ProtectedAuto → Production
developIntegração e validação✅ ProtectedAuto → Staging
feature/*Desenvolvimento de funcionalidades-Manual review
Regra Fundamental

Nunca commitar diretamente em main ou develop. Todo código passa por Pull Request com review obrigatório.

Nomenclatura de Branches

Feature Branches

feature/[ID-DA-TAREFA]-[descricao-em-ingles]

Componentes:

  • ID-DA-TAREFA: Identificador do task manager (GitHub Issue, Jira, etc.)
  • Descrição: Curta, minúsculas, hífens, inglês

Exemplos Válidos

feature/123-add-menu-crud-endpoints
feature/456-implement-jwt-authentication
feature/789-fix-reservation-conflict-validation
feature/101-setup-prisma-migrations

Outros Tipos de Branch

TipoFormatoExemplo
Hotfixhotfix/[issue]-[description]hotfix/999-fix-critical-memory-leak
Releaserelease/v[version]release/v1.2.0
Chorechore/[description]chore/update-dependencies

Padrão de Commits (Conventional Commits)

Seguimos o padrão Conventional Commits para automação de changelog e versionamento.

Estrutura

<tipo>(<escopo>): [ID-TAREFA] descrição concisa em inglês

[Corpo opcional com mais detalhes]

[Rodapé opcional com breaking changes ou closes]

Tipos Padronizados

TipoUsoImpacto no Versionamento
featNova funcionalidadeMINOR version bump
fixCorreção de bugPATCH version bump
docsAlterações na documentaçãoPatch
styleFormatação, espaços, lintPatch
refactorMudança de código sem alterar comportamentoPatch
testAdicionar/modificar testesPatch
choreBuild, dependências, configPatch
perfMelhoria de performancePatch
ciConfiguração de CI/CDPatch

Escopos Sugeridos

EscopoDescriçãoExemplos
apiEndpoints e handlers Lambdafeat(api): add coupon generation endpoint
frontendInterface e componentesfeat(frontend): add menu grid component
databaseMigrations e schemasfeat(database): add reservation table
authAutenticação e autorizaçãofix(auth): resolve JWT validation issue
deployInfrastructure e CI/CDchore(deploy): update terraform modules
docsDocumentaçãodocs(api): add endpoint examples

Exemplos Práticos

# ✅ Feature com escopo
feat(api): [#123] add menu CRUD endpoints with validation

# ✅ Bug fix
fix(auth): [#456] resolve JWT expiration handling

# ✅ Breaking change
feat(database): [#789] migrate to new reservation schema

BREAKING CHANGE: reservation table schema changed, migration required

# ✅ Documentation
docs(readme): [#101] update setup instructions for monorepo

# ✅ Chore
chore(deps): [#202] update prisma to v5.0.0

# ✅ Multiple scopes
feat(frontend,api): [#345] implement real-time reservation updates

Workflow do Dia a Dia

1. Iniciar Nova Feature

# Atualizar main local
git checkout main
git pull origin main

# Criar branch de feature
git checkout -b feature/123-add-coupon-system

# Verificar se está na branch correta
git branch

2. Desenvolvimento

# Fazer mudanças e commits incrementais
git add .
git commit -m "feat(api): [#123] add coupon model and validation"

git add .
git commit -m "feat(api): [#123] implement coupon generation logic"

git add .
git commit -m "test(api): [#123] add coupon generation tests"

3. Preparar para Review

# Rebase com main para histórico limpo
git checkout main
git pull origin main
git checkout feature/123-add-coupon-system
git rebase main

# Squash commits relacionados (se necessário)
git rebase -i HEAD~3 # Interativo para últimos 3 commits

# Push da branch
git push origin feature/123-add-coupon-system

4. Pull Request

Template de PR

## Descrição
Implementa sistema de geração de cupons com validação de dados e integração com o banco.

## Issue
Closes #123

## Testes
- [x] Unit tests para geração de cupom
- [x] Integration tests com banco
- [x] E2E test do fluxo completo

## Screenshots
[Se aplicável, adicionar screenshots da UI]

## Checklist
- [x] Código segue padrões ESLint
- [x] Testes passando
- [x] Documentação atualizada
- [x] Migration scripts incluídas (se aplicável)

Configuração de Branch Protection

# .github/branch-protection.yml
main:
protection:
required_status_checks:
strict: true
contexts:
- "ci/tests"
- "ci/lint"
- "ci/type-check"
enforce_admins: true
required_pull_request_reviews:
required_approving_review_count: 1
dismiss_stale_reviews: true
require_code_owner_reviews: true
restrictions:
users: []
teams: ["core-team"]

Versionamento e Tags

Semantic Versioning (SemVer)

Formato: v[MAJOR].[MINOR].[PATCH][-prerelease]

TipoQuando usarExemplo
MAJORBreaking changesv1.0.0v2.0.0
MINORNova funcionalidade (backward compatible)v1.0.0v1.1.0
PATCHBug fixes (backward compatible)v1.0.0v1.0.1
PrereleaseVersões de testev1.1.0-beta.1

Automação via Conventional Commits

# Instalar ferramentas
npm install -g standard-version

# Gerar versão automaticamente baseada nos commits
standard-version

# Ou manualmente
git tag v1.2.0
git push origin v1.2.0

Changelog Automático

## [1.2.0](v1.1.0...v1.2.0) (2024-07-02)

### Features
* **api**: add coupon generation endpoint ([abc1234](commit-link))
* **frontend**: implement reservation form ([def5678](commit-link))

### Bug Fixes
* **auth**: resolve JWT expiration handling ([ghi9012](commit-link))

### BREAKING CHANGES
* **database**: reservation schema migration required

Ferramentas e Automação

Git Hooks (Husky)

package.json
{
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
"pre-push": "npm run test"
}
},
"lint-staged": {
"*.{ts,tsx}": ["eslint --fix", "prettier --write"],
"*.md": ["prettier --write"]
}
}

Commitlint Configuration

commitlint.config.js
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [2, 'always', [
'feat', 'fix', 'docs', 'style', 'refactor',
'test', 'chore', 'perf', 'ci'
]],
'subject-case': [2, 'always', 'lower-case'],
'subject-max-length': [2, 'always', 72],
'body-max-line-length': [2, 'always', 100]
}
};

GitHub Actions Workflow

.github/workflows/pr-checks.yml
name: PR Checks
on:
pull_request:
branches: [main, develop]

jobs:
lint-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20

- name: Install dependencies
run: npm ci

- name: Lint code
run: npm run lint

- name: Type check
run: npm run type-check

- name: Run tests
run: npm run test:coverage

- name: Check commit format
run: npx commitlint --from ${{ github.event.pull_request.base.sha }}

Métricas e Qualidade

Code Review Metrics

MétricaTargetFerramenta
Review time< 24hGitHub insights
PR size< 500 lines changedDanger.js
Test coverage> 80%Codecov
Commit message compliance100%Commitlint

Branch Hygiene

# Limpar branches locais já mergeadas
git branch --merged | grep -v "main\|develop" | xargs -n 1 git branch -d

# Limpar branches remotas
git remote prune origin

# Ver branches órfãs
git for-each-ref --format='%(refname:short) %(committerdate)' refs/heads | sort -k2

Troubleshooting

Problemas Comuns

Commit rejeitado por formato

# Erro: commit não segue Conventional Commits
# Solução: Alterar mensagem do último commit
git commit --amend -m "feat(api): [#123] add new endpoint"

Conflitos durante rebase

# Resolver conflitos manualmente, então:
git add .
git rebase --continue

# Se ficar muito complexo, abortar e fazer merge
git rebase --abort
git merge main

PR muito grande

# Dividir em commits menores
git rebase -i HEAD~5 # Squash ou split commits

# Ou criar PR incremental
git checkout -b feature/123-add-coupon-system-part-1
# Cherry-pick commits específicos
git cherry-pick abc1234 def5678

Checklist de Qualidade

Antes de Abrir PR

  • Branch atualizada com main/develop
  • Commits seguem Conventional Commits
  • Testes passando localmente
  • ESLint sem errors
  • TypeScript sem errors
  • Documentação atualizada se necessário

Durante Code Review

  • Código readable e bem estruturado
  • Lógica de negócio testada
  • Error handling adequado
  • Performance não degradada
  • Segurança verificada
  • Acessibilidade considerada (frontend)

Git workflow que promove qualidade, colaboração e entrega contínua