Fluxo de Contribuição
Este guia o orienta através do processo completo de contribuição para XOOPS, desde a configuração inicial até a pull request mesclada.
Pré-requisitos
Seção intitulada “Pré-requisitos”Antes de começar a contribuir, certifique-se de ter:
- Git instalado e configurado
- Conta do GitHub (gratuita)
- PHP 7.4+ para desenvolvimento XOOPS
- Composer para gerenciamento de dependências
- Conhecimento básico de fluxos de trabalho Git
- Familiaridade com Código de Conduta
Passo 1: Fazer Fork do Repositório
Seção intitulada “Passo 1: Fazer Fork do Repositório”Na Interface Web do GitHub
Seção intitulada “Na Interface Web do GitHub”- Navegue até o repositório (ex:
XOOPS/XoopsCore27) - Clique no botão Fork no canto superior direito
- Selecione onde fazer fork (sua conta pessoal)
- Aguarde o fork ser concluído
Por Que Fazer Fork?
Seção intitulada “Por Que Fazer Fork?”- Você obtém sua própria cópia para trabalhar
- Mantenedores não precisam gerenciar muitas branches
- Você tem controle total de seu fork
- Pull Requests referenciam seu fork e o repositório upstream
Passo 2: Clonar Seu Fork Localmente
Seção intitulada “Passo 2: Clonar Seu Fork Localmente”# Clone seu fork (substitua SEU_USUARIO)git clone https://github.com/SEU_USUARIO/XoopsCore27.gitcd XoopsCore27
# Adicionar remote upstream para rastrear repositório originalgit remote add upstream https://github.com/XOOPS/XoopsCore27.git
# Verificar se remotes estão configurados corretamentegit remote -v# origin https://github.com/SEU_USUARIO/XoopsCore27.git (fetch)# origin https://github.com/SEU_USUARIO/XoopsCore27.git (push)# upstream https://github.com/XOOPS/XoopsCore27.git (fetch)# upstream https://github.com/XOOPS/XoopsCore27.git (nofetch)Passo 3: Configurar Ambiente de Desenvolvimento
Seção intitulada “Passo 3: Configurar Ambiente de Desenvolvimento”Instalar Dependências
Seção intitulada “Instalar Dependências”# Instalar dependências do Composercomposer install
# Instalar dependências de desenvolvimentocomposer install --dev
# Para desenvolvimento de módulocd modules/mymodulecomposer installConfigurar Git
Seção intitulada “Configurar Git”# Definir identidade de Gitgit config user.name "Seu Nome"git config user.email "seu.email@example.com"
# Opcional: Definir configuração global de Gitgit config --global user.name "Seu Nome"git config --global user.email "seu.email@example.com"Executar Testes
Seção intitulada “Executar Testes”# Certificar-se de que testes passam em estado limpo./vendor/bin/phpunit
# Executar suite de teste específica./vendor/bin/phpunit --testsuite unitPasso 4: Criar Branch de Recurso
Seção intitulada “Passo 4: Criar Branch de Recurso”Convenção de Nomenclatura de Branch
Seção intitulada “Convenção de Nomenclatura de Branch”Siga este padrão: <tipo>/<descrição>
Tipos:
feature/- Novo recursofix/- Correção de bugdocs/- Apenas documentaçãorefactor/- Refatoração de códigotest/- Adições de testechore/- Manutenção, tooling
Exemplos:
# Branch de recursogit checkout -b feature/add-two-factor-auth
# Branch de correção de buggit checkout -b fix/prevent-xss-in-forms
# Branch de documentaçãogit checkout -b docs/update-api-guide
# Sempre fazer branch a partir de upstream/main (ou develop)git checkout -b feature/my-feature upstream/mainManter Branch Atualizada
Seção intitulada “Manter Branch Atualizada”# Antes de começar trabalho, sincronizar com upstreamgit fetch upstreamgit merge upstream/main
# Depois, se upstream mudougit fetch upstreamgit rebase upstream/mainPasso 5: Fazer Suas Mudanças
Seção intitulada “Passo 5: Fazer Suas Mudanças”Práticas de Desenvolvimento
Seção intitulada “Práticas de Desenvolvimento”- Escrever código seguindo Padrões de PHP
- Escrever testes para nova funcionalidade
- Atualizar documentação se necessário
- Executar linters e formatadores de código
Verificações de Qualidade de Código
Seção intitulada “Verificações de Qualidade de Código”# Executar todos os testes./vendor/bin/phpunit
# Executar com cobertura./vendor/bin/phpunit --coverage-html coverage/
# Executar PHP CS Fixer./vendor/bin/php-cs-fixer fix --dry-run
# Executar análise estática PHPStan./vendor/bin/phpstan analyse class/ src/Fazer Commit de Boas Mudanças
Seção intitulada “Fazer Commit de Boas Mudanças”# Verificar o que você mudougit statusgit diff
# Preparar arquivos específicosgit add class/MyClass.phpgit add tests/MyClassTest.php
# Ou preparar todas as mudançasgit add .
# Fazer commit com mensagem descritivagit commit -m "feat(auth): adicionar suporte de autenticação de dois fatores"Passo 6: Manter Branch em Sincronização
Seção intitulada “Passo 6: Manter Branch em Sincronização”Enquanto trabalha em seu recurso, a branch principal pode avançar:
# Buscar últimas mudanças do upstreamgit fetch upstream
# Opção A: Rebase (preferido para histórico limpo)git rebase upstream/main
# Opção B: Merge (mais simples mas adiciona merge commits)git merge upstream/main
# Se conflitos ocorrem, resolvê-los então:git add .git rebase --continue # ou git merge --continuePasso 7: Push para Seu Fork
Seção intitulada “Passo 7: Push para Seu Fork”# Push sua branch para seu forkgit push origin feature/my-feature
# Em push subsequentesgit push
# Se fez rebase, pode precisar force push (usar com cuidado!)git push --force-with-lease origin feature/my-featurePasso 8: Criar Pull Request
Seção intitulada “Passo 8: Criar Pull Request”Na Interface Web do GitHub
Seção intitulada “Na Interface Web do GitHub”- Vá para seu fork no GitHub
- Você verá uma notificação para criar um PR de sua branch
- Clique em “Compare & pull request”
- Ou manualmente clique em “New pull request” e selecione sua branch
Título e Descrição de PR
Seção intitulada “Título e Descrição de PR”Formato de Título:
<tipo>(<escopo>): <assunto>Exemplos:
feat(auth): adicionar autenticação de dois fatoresfix(forms): prevenir XSS em entrada de textodocs: atualizar guia de instalaçãorefactor(core): melhorar performanceModelo de Descrição:
## DescriçãoBreve explicação do que este PR faz.
## Mudanças- Mudou X de A para B- Adicionou recurso Y- Corrigiu bug Z
## Tipo de Mudança- [ ] Novo recurso (adiciona nova funcionalidade)- [ ] Correção de bug (corrige um problema)- [ ] Mudança quebra-compatibilidade (API/mudança de comportamento)- [ ] Atualização de documentação
## Testes- [ ] Adicionados testes para nova funcionalidade- [ ] Todos os testes existentes passam- [ ] Teste manual realizado
## Capturas de Tela (se aplicável)Incluir capturas de tela antes/depois para mudanças de UI.
## Problemas RelacionadosFecha #123Relacionado a #456
## Lista de Verificação- [ ] Código segue diretrizes de estilo- [ ] Autorrevisão do próprio código- [ ] Comentado código complexo- [ ] Documentação atualizada- [ ] Nenhum novo aviso gerado- [ ] Testes passam localmenteLista de Verificação de Revisão de PR
Seção intitulada “Lista de Verificação de Revisão de PR”Antes de submeter, certifique-se:
- Código segue Padrões de PHP
- Testes incluídos e passam
- Documentação atualizada (se necessário)
- Nenhum conflito de merge
- Mensagens de commit claras
- Problemas relacionados referenciados
- Descrição de PR é detalhada
- Sem código de debug ou console logs
Passo 9: Responder ao Feedback
Seção intitulada “Passo 9: Responder ao Feedback”Durante Revisão de Código
Seção intitulada “Durante Revisão de Código”- Ler comentários cuidadosamente - Entender o feedback
- Fazer perguntas - Se pouco claro, pedir esclarecimento
- Discutir alternativas - Respeitosamente debater abordagens
- Fazer mudanças solicitadas - Atualizar sua branch
- Force-push commits atualizados - Se reescrever histórico
# Fazer mudançasgit add .git commit --amend # Modificar último commitgit push --force-with-lease origin feature/my-feature
# Ou adicionar novos commitsgit commit -m "Endereçar feedback de revisão de PR"git push origin feature/my-featureEsperar Iteração
Seção intitulada “Esperar Iteração”- A maioria das PRs requer múltiplas rodadas de revisão
- Ser paciente e construtivo
- Ver feedback como oportunidade de aprendizado
- Mantenedores podem sugerir refators
Passo 10: Merge e Limpeza
Seção intitulada “Passo 10: Merge e Limpeza”Após Aprovação
Seção intitulada “Após Aprovação”Uma vez que mantenedores aprovam e mesclam:
- GitHub auto-mescla ou mantenedor clica merge
- Sua branch é deletada (geralmente automático)
- Mudanças estão em upstream
Limpeza Local
Seção intitulada “Limpeza Local”# Mudar para branch principalgit checkout main
# Atualizar main com mudanças mescladasgit fetch upstreamgit merge upstream/main
# Deletar branch local de recursogit branch -d feature/my-feature
# Deletar do seu fork (se não for auto-deletado)git push origin --delete feature/my-featureDiagrama de Fluxo
Seção intitulada “Diagrama de Fluxo”graph LR A[Fazer Fork do Repositório] --> B[Clonar Fork] B --> C[Criar Branch] C --> D[Fazer Mudanças] D --> E[Commit & Push] E --> F[Criar PR] F --> G{Revisão} G -->|Aprovado| H[Merge] G -->|Mudanças Necessárias| I[Atualizar PR] I --> G H --> J[Limpeza] J --> K[Concluído]Cenários Comuns
Seção intitulada “Cenários Comuns”Sincronizando Antes de Começar
Seção intitulada “Sincronizando Antes de Começar”# Sempre começar frescogit fetch upstreamgit checkout -b feature/new-thing upstream/mainAdicionando Mais Commits
Seção intitulada “Adicionando Mais Commits”# Apenas fazer push novamentegit add .git commit -m "feat: mudanças adicionais"git push origin feature/new-thingCorrigindo Erros
Seção intitulada “Corrigindo Erros”# Último commit tem mensagem erradagit commit --amend -m "Mensagem correta"git push --force-with-lease
# Reverter para estado anterior (cuidado!)git reset --soft HEAD~1 # Manter mudançasgit reset --hard HEAD~1 # Descartar mudançasManipulando Conflitos de Merge
Seção intitulada “Manipulando Conflitos de Merge”# Rebase e resolver conflitosgit fetch upstreamgit rebase upstream/main
# Editar arquivos conflitantes para resolver# Então continuargit add .git rebase --continuegit push --force-with-leaseMelhores Práticas
Seção intitulada “Melhores Práticas”- Manter branches focadas em problemas únicos
- Fazer commits pequenos e lógicos
- Escrever mensagens de commit descritivas
- Atualizar sua branch frequentemente
- Testar antes de fazer push
- Documentar mudanças
- Ser responsivo ao feedback
Não Faça
Seção intitulada “Não Faça”- Trabalhar diretamente em branch main/master
- Misturar mudanças não relacionadas em um PR
- Fazer commit de arquivos gerados ou node_modules
- Force push após PR ser público (use —force-with-lease)
- Ignorar feedback de revisão de código
- Criar PRs massivas (quebrar em menores)
- Fazer commit de dados sensíveis (chaves de API, senhas)
Dicas para Sucesso
Seção intitulada “Dicas para Sucesso”Comunicar
Seção intitulada “Comunicar”- Fazer perguntas em problemas antes de começar trabalho
- Pedir orientação sobre mudanças complexas
- Discutir abordagem na descrição do PR
- Responder ao feedback prontamente
Seguir Padrões
Seção intitulada “Seguir Padrões”- Revisar Padrões de PHP
- Verificar diretrizes de Relatório de Problema
- Ler Visão Geral de Contribuição
- Seguir Diretrizes de Pull Request
Aprender o Codebase
Seção intitulada “Aprender o Codebase”- Ler padrões de código existentes
- Estudar implementações similares
- Entender a arquitetura
- Consultar Conceitos Principais
Documentação Relacionada
Seção intitulada “Documentação Relacionada”- Código de Conduta
- Diretrizes de Pull Request
- Relatório de Problema
- Padrões de Codificação PHP
- Visão Geral de Contribuição
#xoops #git #github #contributing #workflow #pull-request