Guia de Contribuição
Versionamento
Versão | Data | Modificação | Responsável |
---|---|---|---|
0.1 | 09/11/24 | Criação do documento | Gabriel Mariano e André Corrêa |
0.2 | 10/11/24 | Definição das políticas | Gabriel Mariano |
0.3 | 20/11/24 | Altera nomenclatura proposta para branches | Gabriel Mariano |
Tabela 1: Versionamento
Objetivo
Dada a natureza colaborativa do desenvolvimento do presente projeto Open Source, este artefato visa estabelecer padrões e critérios de colaboração com o mesmo. O respeito às mesmas resultará em um processo de desenvolvimento mais linear, menos suscetível a erros e mais organizado, para além de permitir a rastreabilidade dos recursos e artefatos desenvolvidos.
Políticas
Issues
A criação de issues do projeto se dará através da plataforma ZenHub associada aos repositórios. Para tal, os membros responsáveis pelo projeto devem criar issues para cada atividade a ser realizada, de modo a seguir os princípios abaixo estabelecidos:
- O objetivo de cada issue criada deve ser único e "atômico". Para atividades com maior escopo e objetivo, recomenda-se a criação de épicos.
- Cada issue deve ter ao menos um assignee estabelecido. Este(s) se responsabilizará pela execução da mesma, ainda que de forma colaborativa.
- O título estabelecido para a issue deve ser simples e descritivo, visando apresentar de forma clara e sucinta o que deve ser feito.
- Em caso de atividades mais complexas, pode-se adicionar uma descrição nos comentários da issue para esclarecer o que deve ser feito.
- Devem ser definidas labels relacionadas com o objetivo/escopo da issue.
- Em havendo, deve ser estabelecido o milestone para o qual a issue se relaciona.
- Ao longo do desenvolvimento da atividade da issue, recomenda-se que os responsáveis comentem com relação ao seu desenvolvimento nos comentários da issue, buscando esclarecer o que está sendo feito, dificuldades e eventuais pendências.
- Cada issue deverá ter um estimate estabelecido, preferencialmente via planning poker, onde um conjunto de membros (como a equipe geral responsável pela mesma para atividades mais específicas, ou então todos os membros do projeto para atividades de maior relevância) deverá estimar, através de uma pontuação definida com base na sequência de Fibonacci, o "esforço envolvido" na atividade. Alguns dos critérios para a escolha da pontuação são melhor definidos abaixo.
Pontuação
Os critérios para a definição da pontuação da issue se basearam no artigo Story Point Estimation and Planning Poker. Abaixo, os mesmos:
Pontuação | Critério geral (Esforço) |
---|---|
01 | Atividade trivial, breve, de baixo esforço |
02 | Atividade básica, de curta duração, com algum esforço |
03 | Atividade simples, duração razoável, exigindo certo esforço |
05 | Atividade razoável, duração um pouco maior, exigindo maior esforço |
08 | Atividade complexa, de grande duração, exigindo muito esforço |
13+ | Atividade difícil, com alta duração e alta exigência de esforço. Pode-se considerar uma eventual divisão da atividade. |
Tabela 2: Critérios de Pontuação do Planning Poker
Branching
O fluxo de branching dos repositórios de desenvolvimento seguirá, em um escopo maior, algumas das ideias estabelecidas no GitFlow e, de maneira mais definida, o fluxo estabelecido nos Guias de Contribuição da equipe do semestre anterior deste projeto.
Para tal, são estabelecidas as seguintes branches:
Branch | Objetivo | Nomenclatura da Branch |
---|---|---|
main | Abriga o código de produção do projeto, isto é, a versão mais estável e com garantia de funcionamento do mesmo. Todo o conteúdo a ser adicionado nesta deve originar apenas de Pull Requests a partir da branch de qa. | main |
qa | Abriga o código do projeto em fase de testes e garantia da qualidade. O conteúdo a ser adicionado nesta pode ser proveniente de pull requests a partir das branches dev ou fix (para correções mais pontuais e/ou urgentes). | qa |
dev | Branch destinada ao código em desenvolvimento. Pode não ser necessariamente estável. O conteúdo a ser adicionado nesta deve ser proveniente de pull requests a partir das branches | dev |
feat | Branch destinada ao desenvolvimento de funcionalidades. Devem ser associadas ao desenvolvimento de alguma funcionalidade, seguindo o proposto pela issue da respectiva funcionalidade. Nesta, podem ser adicionados commits diretamente. Esta deve se originar necessariamente a partir da branch dev e devem ser mescladas à mesma. | feat#número-da-issue/nome-da-issue |
fix | Branch destinada à correção de problemas. Devem ser associadas à uma issue de correção/fix. Nesta, também podem ser adicionados commits diretamente. Esta deve se originar a partir das branches dev ou qa, sendo mescladas à branch de origem. | fix#número-da-issue/nome-da-issue |
doc | Branch destinada à documentação. Devem ser associadas à uma issue de documentação. Nesta, também podem ser adicionados commits diretamente. | doc#número-da-issue/nome-da-issue |
Tabela 3: Detalhamento das branches
Commiting
A política de commiting será inspirada no proposto pelo Conventional Commits. Abaixo, um detalhamento da mesma:
Estrutura
Os commits devem seguir a estrutura abaixo:
<tipo>(#numero-da-issue): <breve descrição do conteúdo do *commit*>
[eventuais comentários, se necessário]
[eventuais coautores, caso existam]
Co-authored-by: handle_coautor <email_do_coautor@dominio.com>
Seguindo a possibilidade de referência à issues em diferentes repositórios (conforme apresentada AQUI), uma alternativa para a realização de commits pode ser vista abaixo:
<tipo>(fga-eps-mds/2024.2-ARANDU-DOC#numero-da-issue): <breve descrição do conteúdo do *commit*>
[eventuais comentários, se necessário]
[eventuais coautores, caso existam]
Co-authored-by: handle_coautor <email_do_coautor@dominio.com>
Tipos
Os possíveis tipos para os commits são:
Tipo | Objetivo |
---|---|
feat | Adiciona algum recurso/funcionalidade ao código/projeto. |
fix | Corrige algum recurso/funcionalidade do código/projeto. |
docs | Adiciona algum artefato à documentação. |
chore | Atividade corriqueira, cotidiana, simples. |
style | Adiciona algum componente de estilização ao projeto. |
ref | Refatora algum recurso/funcionalidade do código/projeto. |
test | Adiciona algum teste ao código/projeto. |
ci | Adiciona algum recurso de CI ao projeto. |
Outros | Caso o commit não se adeque à nenhum dos tipos supracitados, recomenda-se que tal situação seja informada aos responsáveis pelo projeto para que este guia seja incrementado. Para além, recomenda-se o uso de algum dos tipos citados no repositório do @commitlint/config-conventional ou na documentação do Conventional Commits que por ventura se adeque ao tipo do commit. |
Tabela 4: Detalhamento dos tipos de commit
Recomendações
Abaixo, algumas recomendações pertinentes para a realização dos commits:
- O título dos commits deve ser sucinto e auto-explicativo. Preferencialmente em português e definindo o que foi realizado naquele commit (exemplo: docs(#00): adiciona nova ata de reunião).
- Commits devem ser atômicos, isto é, deve conter as alterações relativas a apenas uma funcionalidade/artefato em específico.
Pull Requests
Os pull requests serão utilizados para mesclar branches dos repositórios. Estes devem seguir o fluxo de branching especificado anteriormente. Todos os pull requests devem ser revisados por membro alheio ao conteúdo desenvolvido que consta nas modificações introduzidas pelo pull request em questão.
A estrutura descritiva dos pull requests será baseado no template espeficicado pela equipe do projeto no semestre anterior, conforme consta no Guia de Contribuição dos mesmos, para além do conteúdo descrito no artigo GitHub pull request template.
Template
Título
[TIPO] Título descritivo com o conteúdo adicionado ou modificado (#numero-da-issue)
Ou, alternativamente:
[TIPO] Título descritivo com o conteúdo adicionado ou modificado (fga-eps-mds/2024.2-ARANDU-DOC#numero-da-issue)
Destaca-se que o tipo segue, majoritariamente, a tabela abaixo:
Tipo | Objetivo |
---|---|
FEATURE | Adiciona/Modifica alguma feature. |
FIX | Corrige algum recurso/funcionalidade do código/projeto. |
DOCS | Adiciona/Modifica algum artefato de documentação. |
CHORE | Adiciona alguma mudança corriqueira, cotidiana, simples. |
STYLE | Adiciona/Modifica algum componente de estilização . |
REFACTOR | Refatora algum recurso/funcionalidade do código/projeto. |
TEST | Adiciona/Modifica algum teste do código/projeto. |
CI | Adiciona/Modifica algum recurso de CI no projeto. |
Outros | Caso o pull request não se adeque à nenhum dos tipos supracitados, recomenda-se que tal situação seja informada aos responsáveis pelo projeto para que este guia seja incrementado. |
Tabela 5: Detalhamento dos tipos de pull request
Descrição do Pull Request
# Descrição
Este *pull request* adiciona/modifica [...], conforme previsto na *issue* fga-eps-mds/2024.2-ARANDU-DOC#numero-da-issue.
Revisão das Alterações Introduzidas
# Revisão
- [x] Descrição de uma das alterações introduzidas;
- [x] Descrição de outra das alterações introduzidas;
- [x] ...
Checklist
# Checklist
- [x] O conteúdo adicionado nesse PR segue o código de conduta do projeto;
- [x] Foram seguidos os padrões estabelecidos no guia de contribuição;
- [x] O conteúdo adicionado foi devidamente testado;
- [x] O conteúdo do PR foi revisado por membro alheio ao mesmo;
- [x] O conteúdo deste PR foi devidamente identado, comentado e documentado;
- [x] Para conteúdos de documentação, foi adicionada tabela de versionamento aos artefatos.
Exemplo
[DOCS] Adiciona Guia de Contribuição ao Projeto (fga-eps-mds/2024.2-ARANDU-DOC#22)
# Descrição
Este *pull request* adiciona o guia de contribuição ao projeto, incluindo as políticas de *issues*, *branching*, *commiting* e *pull request*, para além do código de conduta do mesmo, conforme previsto na *issue* fga-eps-mds/2024.2-ARANDU-DOC#22.
# Revisão
- [x] O **código de conduta** foi adicionado com o nome devido, no lugar devido;
- [x] Foi criado o arquivo do guia de contribuição com o nome devido, no lugar devido;
- [x] O guia de contribuição apresenta política de *issues* válida;
- [x] O guia de contribuição apresenta política de *branching* válida;
- [x] O guia de contribuição apresenta política de *commiting* válida;
- [x] O guia de contribuição apresenta política de *pull requests* válida;
# Checklist
- [x] O conteúdo adicionado nesse PR segue o código de conduta do projeto;
- [x] Foram seguidos os padrões estabelecidos no guia de contribuição;
- [x] O conteúdo adicionado foi devidamente testado;
- [x] O conteúdo do PR foi revisado por membro alheio ao mesmo;
- [x] O conteúdo deste PR foi devidamente identado, comentado e documentado;
- [x] Para conteúdos de documentação, foi adicionada tabela de versionamento aos artefatos.
Fontes de Pesquisa e Referências
- Repositório: A-Disciplina-MDS-EPS
- Contributor Covenant
- Conventional Commits
- Repositório: commitlint
- Guia de Contribuição - GEROcuidado (2024.1)
- Políticas do Repositório - Acácia (2019.2)
- Guia de Contribuição - CALCULUS (2024.1)
- Tópico no StackOverFlow: Link to the issue number on GitHub within a commit message
- GitHub Blog: Closing Issues Across Repositories
- GitHub Blog: Issues 2.0: The Next Generation
- Git branching strategy diagrams
- A successful Git branching model por Vincent Driessen
- Planning Poker: A melhor maneira de estimar qualquer atividade
- Story Point Estimation and Planning Poker por Fatih YAZICI
- GitHub pull request template por Arthur Coudouy