GitHub — Convenções
Branches, commits, corpo de PR e o que o CI cobra
Branches
| Branch | Uso |
|---|---|
main | produção — deploy automático em app.vendee.com.br |
develop | integração de construção — deploy automático em dev.vendee.com.br |
feat/<ISSUE-ID>-descricao | funcionalidade nova |
fix/<ISSUE-ID>-descricao | correção de bug |
refactor/<ISSUE-ID>-descricao | refatoração |
Dois trilhos: hotfix sai de main e faz PR para main; construção sai de develop e faz PR para develop. A promoção para produção é um PR develop → main.
Nunca faça push direto na main. Há hook que bloqueia — e ele lê a linha de comando inteira, então até um comando que só mencione "main" é barrado. Rode um comando por vez.
Commits
tipo: descrição curta (ISSUE-ID)Exemplo: feat: add custom fields to deal form (CRM-12).
Corpo do PR
Use Ref CRM-XX, nunca Closes. A issue só fecha quando a validação em produção acontece — deixar o GitHub fechar sozinho no merge faz o board mentir.
Um PR por issue. Se a tarefa crescer, quebre em mais issues em vez de empilhar. Exceção: um lote de issues pequenas do mesmo assunto vai num PR só, com todas referenciadas.
Etiqueta de release
Todo PR de promoção leva release:patch, release:minor ou release:major. A etiqueta sai do conteúdo do pacote, não do trilho:
| O pacote tem | Etiqueta |
|---|---|
| só correção, refactor, ajuste interno | release:patch |
| feature nova visível ao cliente, ou dependência nova | release:minor |
| marco de produto | release:major |
Feature atrás de flag desligada não é visível ao cliente → segue patch.
O que o CI cobra
| Job | O que roda |
|---|---|
quality | lint (zero warnings) + check-types + testes (vitest) + knip |
edges | deno check em todas as edge functions |
drift | migration nova registrada e aplicada no Dev |
verdades | invariantes de negócio conferidos direto no banco de dev |
promocao | só em PR develop → main: exige changelog público + etiqueta release:* |
Antes de abrir o PR, rode localmente o mesmo portão:
bun run validate:strict # lint + check-types + build + testes, em série, --force
bun run gates # knip + deno check das edgesMerge
Merge exige autorização. Há hook que bloqueia gh pr merge — apresente a prova (CI verde, revisão feita, o que foi verificado no navegador) e peça o GO.