Bem-vindo(a) ao guia de desenvolvimento para os projetos de matemática computacional do NEMPA!
Este documento estabelece um fluxo de trabalho padrão para garantir que nossa colaboração seja organizada, eficiente e que a qualidade do nosso código seja sempre a mais alta possível. Seguir estas diretrizes é fundamental para o sucesso dos nossos projetos.
Temos papéis bem definidos para manter a organização:
-
Project Manager (Prof. Roberto):
- Define o escopo e os objetivos dos projetos.
- Cria os repositórios e a estrutura inicial.
- Cria e prioriza as
Issues(tarefas). - Realiza a revisão final e o merge de Pull Requests críticos.
- Responsável por integrar
developnamainpara criar uma versão estável.
-
Maintainer(s) (Alunos mais experientes):
- Ajudam na revisão técnica dos Pull Requests (Code Review).
- Orientam os novos contribuidores.
- Podem ter permissão para fazer o merge de Pull Requests de funcionalidades na branch
develop.
-
Contributor(s) (Todos os membros):
- Desenvolvem as funcionalidades e corrigem bugs.
- São os principais criadores de branches de features e Pull Requests.
- Participam ativamente das revisões de código dos colegas.
Utilizamos um modelo simplificado baseado no GitFlow. Cada repositório terá duas branches permanentes com propósitos muito claros:
- Propósito: Versão estável e consolidada do projeto. Pense nela como a "versão de produção" ou o artigo final publicado.
- Regras:
- Ninguém pode fazer push diretamente para a
main. - Todo o código na
maindeve vir exclusivamente da branchdevelop, através de um Pull Request aprovado pelo Project Manager.
- Ninguém pode fazer push diretamente para a
- Propósito: Branch de integração contínua. Ela reflete o estado mais atual do desenvolvimento, contendo todas as funcionalidades já finalizadas e revisadas. É o "canteiro de obras".
- Regras:
- Ninguém pode fazer push diretamente para a
develop. - Todo código novo entra na
developatravés de um Pull Request a partir de uma branch de feature.
- Ninguém pode fazer push diretamente para a
- Propósito: Branch temporária para desenvolver uma nova funcionalidade ou tarefa específica. É a sua "oficina particular".
- Regras:
- Sempre criada a partir da
develop. - O nome deve ser descritivo, geralmente incluindo o número da
Issue. Ex:feature/15-implementar-metodo-newton. - Após o merge do seu Pull Request em
develop, esta branch deve ser deletada.
- Sempre criada a partir da
Para mantermos um histórico de commits limpo e legível, adotamos o padrão Conventional Commits. A estrutura é:
<tipo>: <descrição>
Tipos mais comuns:
feat: Uma nova funcionalidade (feature).fix: Uma correção de bug.docs: Mudanças apenas na documentação (README.md, comentários no código).style: Mudanças de formatação que não afetam a lógica (ponto e vírgula, espaços, etc.).refactor: Refatoração de código que não corrige um bug nem adiciona uma funcionalidade.test: Adição ou correção de testes.chore: Mudanças em arquivos de build, configuração, etc. (Ex:.gitignore).
Exemplos de bons commits:
feat: Adiciona função para calcular o determinante de uma matrizfix: Corrige divisão por zero no método da bisseçãodocs: Atualiza README com instruções de instalaçãorefactor: Simplifica o loop de renderização da cena Manim
Vamos a um exemplo prático.
Cenário: Projeto simulador-caos. O Prof. Roberto criou a Issue #7: "Implementar o atrator de Lorenz". O aluno Ikaro será o responsável.
- Aceite a
Issue: Ikaro vai até aIssue #7no GitHub e se atribui (assign) a ela, ou comenta "Estou trabalhando nisso". - Sincronize o ambiente local: Antes de tudo, Ikaro garante que sua
developlocal está atualizada com a do repositório remoto.git checkout develop git pull origin develop
- Crie a sua branch de feature: A partir da
developatualizada, ele cria sua branch de trabalho.git checkout -b feature/7-atrator-lorenz
- Codifique: Ikaro implementa o código para gerar o atrator de Lorenz.
- Faça commits atômicos: Ele faz commits pequenos e lógicos usando o padrão que definimos.
git add . git commit -m "feat: Adiciona classe base para o atrator de Lorenz" # ... trabalha mais um pouco ... git add . git commit -m "feat: Implementa a integração de Runge-Kutta para as equações"
- Envie para o repositório remoto:
git push origin feature/7-atrator-lorenz
- Abra o Pull Request (PR): No GitHub, Ikaro abre um PR da sua branch
feature/7-atrator-lorenzpara a branchdevelop. - Preencha o template do PR: Ele descreve o que foi feito, como testar, e o mais importante, conecta o PR à Issue digitando
Closes #7no corpo da descrição.
- Análise: Enzo e Felipe são notificados. Eles analisam o código, a lógica matemática e o estilo.
- Feedback: Felipe deixa um comentário: "A constante
sigmaestá com o valor100ao invés de10. Poderia corrigir?". - Ajuste: Ikaro vê o feedback, corrige o valor na sua branch, e faz um novo commit.
O Pull Request é atualizado automaticamente com o novo commit.
git add . git commit -m "fix: Corrige valor da constante sigma no atrator de Lorenz" git push origin feature/7-atrator-lorenz
- Aprovação: O código agora está correto. Enzo e Felipe aprovam o PR.
- Merge: O Prof. Roberto (ou um Maintainer) vê as aprovações e clica no botão "Merge pull request". O código agora faz parte da
develop. AIssue #7é fechada automaticamente. - Limpeza: Após o merge, a branch
feature/7-atrator-lorenznão é mais necessária e pode ser deletada pelo botão no GitHub ou localmente.
Para manter a consistência entre os projetos:
README.mdé Obrigatório: Todo repositório DEVE ter umREADME.mdna raiz, explicando o que o projeto faz, como instalá-lo e como usá-lo.- Roteiro para Animações Manim: Projetos que envolvem a criação de animações com
manimDEVEM incluir um arquivoroteiro.mdna raiz. Este arquivo deve ser a "fonte da verdade" sobre o conteúdo visual e narrativo do vídeo. A versão final e aprovada do roteiro deve estar na branchmain.