Contribuindo
Relatos de bugs, ideias, traduções, documentação e código são todos bem-vindos. Esta página explica onde conversar, como enviar uma alteração, as convenções que o código segue e as regras para problemas de segurança e licenças.
Onde conversar
Tudo começa no repositório da comunidade, independentemente da parte do Antimatter sobre a qual se trate:
- Bugs e solicitações de recursos: abra uma questão e selecione Relato de bug, Solicitação de recurso ou Solicitação de plugin ou integração. Pesquise primeiro nas questões existentes; se a sua estiver lá, adicione um "joinha" ou seus detalhes.
- Perguntas e ideias: as Discussões, nas categorias Perguntas e Respostas ou Ideias.
- Antes de uma alteração maior, abra uma questão ou uma discussão para concordar sobre a abordagem primeiro. Isso evita uma solicitação de pull que não pode ser mesclada como está.
Problemas com as etiquetas good first issue e help wanted são bons pontos de partida. Deixe um comentário indicando que você está trabalhando em um deles. Novos problemas recebem a etiqueta status/triage e, em seguida, status/accepted, status/planned ou status/wontfix. Os problemas permanecem no repositório da comunidade, independentemente do assunto: os repositórios de código não aceitam problemas. O trabalho planejado está no roadmap do Antimatter.
Repositórios e ramos
O código está na organização AntimatterChat; Onde o código está lista os repositórios. Em cada repositório:
mainé o ramo padrão e contém o código do Antimatter. Crie ramos a partir dele e envie solicitações de pull para ele.- Repositórios bifurcados do Mattermost também têm um ramo
upstream, um espelho do código do Mattermost usado para incorporar suas alterações. Não baseie seu trabalho nele.
O README de cada repositório explica como compilar e testá-lo. Para o servidor e as interfaces web, veja Compilando a partir do código-fonte; para aplicativos, Compilar, instalar e depurar.
Solicitações de pull
- Faça um fork do repositório e crie uma branch a partir de
main. - Mantenha cada pull request com apenas uma alteração. Pull requests pequenos são revisados mais rapidamente.
- Siga o estilo do código ao seu redor e adicione ou atualize testes onde fizer sentido.
- Descreva o que você alterou e por quê, e vincule a issue que ele corrige:
Fixes AntimatterChat/community#123. - Certifique-se de que as verificações sejam aprovadas. Um mantenedor revisará o pull request e pode solicitar alterações.
No repositório do servidor, preencha o modelo do pull request: um Resumo e o bloco Nota de Versão, que deve estar sempre presente. Escreva NONE nele quando a alteração não afetar a API, a configuração, o esquema do banco de dados ou o comportamento visível.
Ao contribuir, você concorda que sua contribuição será licenciada sob a licença do repositório ao qual você contribui.
Commits e estilo de código
Commits
As mensagens de commit no histórico são uma frase curta dizendo o que muda, em sentence case e sem ponto final. Alterações em uma parte são prefixadas com ela, por exemplo Fusion: a compact conversation header on phones ou Server: community attributes, and admin-only user attributes. Um commit por alteração; explique os motivos no corpo quando não forem óbvios.
Servidor (Go)
- Execute
make check-styleemserver/antes de enviar. - Nunca execute
go mod tidydiretamente; executemake modules-tidy. - Nos caminhos de requisição, registre logs com o logger da requisição. Na camada de armazenamento, use um
request.CTX, não umcontext.Context. - Novos endpoints de API ficam em
server/channels/api4, com seus tipos emserver/public/modele, idealmente, um método emmodel.Client4e no cliente TypeScript.
Interfaces web (TypeScript e React)
- Execute
make check-styleemake check-typesemwebapp/. - A interface clássica segue
webapp/STYLE_GUIDE.md: componentes funcionais, hooks para Redux, variáveis de tema para cores, marcação acessível. - Os componentes do Fusion ficam em
webapp/fusion/src/fusion, com seus estilos emwebapp/fusion/src/fusion/styles. Eles constroem nomes de classes com o helperam()e usam os design tokens do Fusion; siga os arquivos ao seu lado. - Não adicione novos globais
window.*para aplicativos. Novas utilidades voltadas para aplicativos ficam sobwindow.WebappUtils, conforme explicado emwebapp/AGENTS.md. - Uma alteração no registro de aplicativos (
plugins/registry.ts) geralmente pertence às cópias de ambas as interfaces.
Traduções
O Antimatter e seus aplicativos integrados são traduzidos para 37 idiomas. Os contribuidores adicionam as strings em inglês; os outros idiomas são atualizados em lotes.
Adicionando uma string às interfaces web
- Escreva-a com um ID e um texto literal em inglês:
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})ou<FormattedMessage id='…' defaultMessage='…'/>. O inglês exibido no aplicativo vem dedefaultMessage. - Execute
make i18n-extractemwebapp/(ounpm run i18n-extractemwebapp/fusionouwebapp/channels). Isso atualiza osrc/i18n/en.jsondesse pacote. - Preencha o
descriptionda nova entrada emen.json: onde a string aparece e como é usada. Esse é o contexto a partir do qual os tradutores, humanos ou máquinas, trabalham.
npm run i18n-extract:check falha quando en.json está desatualizado em relação ao código.
Adicionando uma string ao servidor
- Use um ID no código, por exemplo
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)oui18n.T("…"). - Execute
make i18n-extractemserver/. Isso adiciona o ID aserver/i18n/en.jsonna ordem correta. - Escreva a
translationem inglês e adescriptionda nova entrada.
Outros idiomas
Cada idioma tem seu próprio arquivo ao lado de en.json (fr.json, pt-BR.json, zh-TW.json…). Para relatar uma tradução incorreta, abra uma issue no repositório da comunidade com o idioma, o texto e onde ele aparece.
Os aplicativos integrados mantêm suas strings em webapp/i18n/; consulte Traduções na página de aplicativos.
Documentação e este site
Este site e sua documentação estão no repositório antimatter.chat. As páginas são fragmentos HTML em src/pages/; python3 src/build.py compila o site. Correções e explicações ausentes são bem-vindas como issues ou pull requests.
Problemas de segurança
Relate-o de forma privada usando o relatório de vulnerabilidades privado do GitHub: abra a aba Segurança do repositório afetado (por exemplo, o servidor) e escolha Report a vulnerability. Se você não souber qual repositório está afetado, relate-o no repositório da comunidade. Inclua o componente e sua versão, o que um invasor poderia fazer, como reproduzir o problema e qualquer configuração da qual ele dependa.
Os mantenedores respondem lá, mantêm você informado enquanto corrigem o problema e publicam um aviso assim que uma versão corrigida for lançada. Por favor, dê-lhes um tempo razoável antes de divulgar o problema. As correções são incluídas na versão mais recente. A política completa está na política de segurança.
Licenças
- O servidor está sob a GNU Affero General Public License v3.0 (AGPL v3). No mesmo repositório, as ferramentas de administração e os arquivos de configuração (
server/templates/,server/i18n/,server/public/ewebapp/) estão sob a Apache License 2.0. ConsulteLICENSE.txteNOTICE.txt. - Aplicativos: os aplicativos próprios do Antimatter, como Enquetes, estão sob a AGPL v3; aplicativos derivados do Mattermost mantêm sua licença original. Cada repositório indica qual é em seu arquivo
LICENSE. - Os aplicativos para desktop e mobile estão sob a Apache License 2.0. O repositório do Docker está sob a Apache License 2.0, exceto seu
Dockerfile, que está sob a AGPL v3.
A AGPL significa que, se você executar um servidor do Antimatter modificado para outras pessoas por meio de uma rede, você deve oferecer a elas o código-fonte das suas alterações. O Antimatter é baseado no Mattermost; não é afiliado nem endossado pela Mattermost, Inc.
Todos os participantes seguem o código de conduta.