Confira abaixo algumas dicas de convenções e boas práticas a serem consideradas ao contribuir com o projeto.
Após votação realizada no Discord, o grupo escolheu trabalhar seguindo o modelo de controle de versão "Trunk-based development", o mesmo modelo adotado pelo Google.
O Trunk-based development funciona, em palavras simples, da seguinte forma:
-
O dev cria uma branch pra ele trabalhar, a partir da branch
main
-
O dev faz commits na branch criada no Passo 1
-
Qdo terminar, o dev abre uma Pull Request da branch que ele criou no Passo 1 para branch
main
-
[OPCIONAL] Após a abertura da PR no Passo 3 o GitHub Actions executa os testes unitários (se houver) e faz a análise estática do código que o dev criou, usando o SonarCloud (print screen abaixo). Se houver problemas no código, como bugs ou falhas de segurança por exemplo, o GitHub Actions impede a aprovação da PR aberta no Passo 3 até que o dev faça as devidas correções
-
Qdo a PR for aprovada pelo(s) demais membro(s) do grupo, o código que o dev fez na branch criada no Passo 1 vai para a branch
main
-
[OPCIONAL] Se houver um pipeline de CI/CD configurado, após o merge com a
main
o código namain
será compilado pelo GitHub Actions, uma imagem de container será gerada e um deploy será realizado em produção, no Kubernetes ou no ECS da AWS
Estou trabalhando em uma feature muito grande que vai levar vários dias para ser finalizada. Como lidar com esse cenário na Trunk-based development?
Resposta: De acordo com a Trunk-based development você pode utilizar Feature Flags para manter desativada novas funcionalidades incompletas que ainda estão em desenvolvimento, até que elas estejam prontas para serem habilitadas em produção.
Fonte: https://www.atlassian.com/continuous-delivery/continuous-integration/trunk-based-development#:~:text=Feature%20flags%20nicely%20complement%20trunk%2Dbased%20development%20by%20enabling%20developers%20to%20wrap%20new%20changes%20in%20an%20inactive%20code%20path%20and%20activate%20it%20at%20a%20later%20time.
Para mais informações sobre o Trunk-based development visite https://cursos.alura.com.br/extra/alura-mais/git-flow-versus-trunk-based-development-c1401
Ao criar novas branches, procure seguir o seguinte padrão:
category/reference/title-in-trello
🛈 category pode ser feature, bugfix, hotfix ou test.
🛈 reference deve conter o número do card no Trello. Vide exemplo abaixo.
Use no-ref para atividades que não possuem card no Trello. Por exemplo
feature/no-ref/atualizar-dependencias
.
🛈 title-in-trello deve ser uma descrição curta da tarefa, sem espaços, separado por hífens, por exemplo "cadastro-cliente", "listar-pedidos" ou "criar-produto" de acordo com o título do card no Trello.
Exemplo completo: feature/16/context-map
Para mais informações sobre boas práticas para nomes de branches visite o artigo Git Branch Naming Convention no dev.to
Procure seguir a especificação Conventional Commits disponível em https://www.conventionalcommits.org/pt-br/v1.0.0/
Ao fazer commits, procure seguir o seguinte padrão:
type(scope): Description goes here
🛈 type pode ser feat, fix, build, chore, ci, docs, style, refactor, perf ou test.
Para consultar o significado de cada type visite https://blog.rocketseat.com.br/como-fazer-um-commit-conventional-commits/#tipos
🛈 scope (OPCIONAL) deve conter o número do card no Trello. Vide exemplo abaixo.
Caso a atividade não possua card no Trello, basta omitir o
(scope)
. Por exemplodocs: Cria o Context Map
.
🛈 Description deve conter uma descrição curta do que foi feito no commit, pode conter espaços, por exemplo "Cadastro do cliente", "Cria o Domain Story digitalizado" ou "Corrige o cadastro de produtos".
Exemplo completo: feature(6): Cadastro do cliente
Para mais informações sobre conventional commits, visite:
https://blog.rocketseat.com.br/como-fazer-um-commit-conventional-commits/
https://www.conventionalcommits.org/
Procure fazer commits atômicos, ou seja, "O menor possível, mas completo".
Algumas das vantagens dos commits atômicos são:
- Facilidade para fazer
revert
no futuro caso por algum motivo seja necessário;- O histórico do Git fica mais limpo;
- As Pull Requests ficam mais fáceis de revisar;
- Divide um trabalho grande em passos menores.
Para mais informações sobre commits atômicos visite o artigo How atomic Git commits dramatically increased my productivity - and will increase yours too no dev.to
Você pode usar o comando squash
do Git para unificar um ou mais commits em um único commit. Para mais informações, visite https://www.git-tower.com/learn/git/faq/git-squash