GitHub Workflow
Este guia mostra como usar nosso modelo de branching e estratégia de lançamento, combinando o Git Flow com a GitHub CLI.
Modelo de Branching
Seguimos o modelo padrão do Git Flow para garantir a estabilidade do código de produção, adaptado para nossa estrutura de monorepo.
| Branch | Finalidade | Estabilidade |
|---|---|---|
main | Lançamentos em produção. Cada commit é um lançamento com tag. | Ultraestável |
develop | Desenvolvimento do próximo lançamento. Branch de integração. | Estável |
feature/* | Novas funcionalidades ou alterações de interface. Crie a branch a partir de develop. | Experimental |
bugfix/* | Correções de bugs para o próximo ciclo de desenvolvimento. | Experimental |
release/* | Preparação para um novo lançamento em produção. | Polimento final |
hotfix/* | Correções de bugs críticos para a versão de produção. | Urgente |
support/* | Branches de suporte de longo prazo para versões principais mais antigas. | Estável |
Configuração do Git Flow CLI
Nosso repositório local está configurado com os seguintes prefixos e regras de tag:
Branch name for production releases: main
Branch name for "next release" development: develop
Feature branch prefix: feature/
Bugfix branch prefix: bugfix/
Release branch prefix: release/
Hotfix branch prefix: hotfix/
Support branch prefix: support/
Version tag prefix: v
Requisitos de Ferramentas
Para seguir este workflow de forma eficiente, recomendamos:
- Git Flow CLI (Edição AVH): Geralmente incluído no Git for Windows ou disponível via pacote
gitflow. - GitHub CLI (
gh): Usado para Pull Requests, monitoramento de status e lançamentos oficiais.
1. Iniciando uma Nova Funcionalidade
Sempre crie uma branch a partir de develop. Consulte a Referência de Comandos para obter o comando exato do git flow.
2. Colaborando e Propondo Alterações
Em vez de fazer o merge localmente, usamos Pull Requests para revisão de código e validação de CI.
- Envie sua branch para o repositório remoto usando push.
- Crie um Pull Request direcionado a
develop(consulte a Referência de Comandos para o comandogh pr).
3) Estratégia de Merge Sênior (Squash & Merge)
Para manter o histórico de develop limpo e significativo, usamos Squash Merges. Isso combina todos os commits de uma feature branch em um único commit bem descrito em develop.
- Ação: Faça o merge via interface do GitHub ou CLI usando o método
squash(consulte a Referência de Comandos para obter o comando exato da CLI).
Workflow de Lançamento e Versionamento (Changesets)
Usamos Changesets combinados com GitHub Actions para automatizar nosso versionamento, compilação de changelog e Pull Requests de lançamento. Os desenvolvedores não alteram manualmente as versões dos pacotes nos arquivos package.json.
1. Gerando um Changeset (Local)
Quando sua funcionalidade ou correção de bug estiver pronta e antes de abrir um Pull Request:
- Execute a ferramenta interativa de changeset a partir da raiz do repositório (consulte a Referência de Comandos).
- Selecione os pacotes que foram modificados usando a barra de espaço.
- Escolha o nível de incremento SemVer apropriado (Major para alterações que quebram a compatibilidade, Minor para novas funcionalidades retrocompatíveis ou Patch para correções de bugs).
- Forneça uma descrição técnica clara da alteração (em inglês, em conformidade com nossos padrões de commit).
- Um arquivo markdown temporário será criado no diretório
.changeset/(por exemplo,.changeset/warm-dogs-run.md). - Faça o commit deste arquivo markdown junto com seu código e envie-o com sua feature branch.
Crie um changeset por alteração isolada. Se uma feature branch tiver várias correções ou adições independentes, execute pnpm version:changeset várias vezes para gerar notas separadas para cada uma.
2. Pipeline de Versionamento Automatizado (GitHub Actions)
Nosso workflow de CI/CD gerencia o incremento de versão automaticamente quando o código é integrado:
- Pull Request e Integração: Os desenvolvedores abrem um Pull Request direcionado à branch
develop. - Merge em
develop: Uma vez aprovado e integrado emdevelop, a GitHub Action Manage Version Bumps and Releases é acionada. - Geração de PR de Lançamento:
- O workflow analisa os arquivos
.changeset/*.mdpresentes na branch. - Ele calcula as novas versões, consome (exclui) os arquivos markdown temporários de changeset, atualiza os respectivos arquivos
package.jsone atualiza os changelogs locais dos pacotes. - Ele faz o commit dessas alterações automaticamente e cria (ou atualiza) um Pull Request aberto no GitHub chamado
chore(release): version packagesdirecionado adevelop.
- O workflow analisa os arquivos
3) Finalizando o Lançamento (Apenas Mantenedores)
Para publicar e finalizar o lançamento:
- Abra o Pull Request automatizado
chore(release): version packagesno GitHub. - revise as alterações de versão compiladas e os changelogs.
- Faça o merge do Pull Request em
develop. Como os arquivos de changeset já foram consumidos e excluídos, fazer o merge deste PR consolida as versões de pacotes atualizadas no repositório.
Nunca edite o campo "version" no package.json de um pacote manualmente durante uma feature branch normal. Sempre conte com pnpm version:changeset e permita que o pipeline do GitHub Action gerencie os lançamentos.
Correções Críticas (Hotfixes)
Se um bug for encontrado em produção:
- Inicie e finalize uma hotfix branch.
- Consulte a Referência de Comandos para obter os comandos exatos do
git flow hotfix. - Sincronize
mainedevelop.
- Sem commits diretos em
mainoudevelop: Sempre use feature branches e PRs. - Sem Push Forçado: A menos que seja em sua própria feature branch isolada e necessário para um rebase.
- Sem Merges Sujos: Evite fazer o merge de
mainde volta emfeature/*. Sempre faça o rebase emdevelopse sua feature branch ficar desatualizada.