Contribuer
Les rapports de bugs, les idées, les traductions, la documentation et le code sont tous les bienvenus. Cette page explique où en discuter, comment envoyer une modification, les conventions suivies par le code, ainsi que les règles relatives aux problèmes de sécurité et aux licences.
Où en discuter
Tout commence dans le dépôt communautaire, quelle que soit la partie d'Antimatter concernée :
- Bugs et demandes de fonctionnalités : ouvrez un problème et choisissez Bug report, Feature request ou Plugin or integration request. Recherchez d'abord dans les problèmes existants ; si le vôtre y figure, ajoutez un pouce levé ou vos détails.
- Questions et idées : les Discussions, dans les catégories Questions/Réponses ou Idées.
- Avant une modification importante, ouvrez un problème ou une discussion pour convenir de l'approche à adopter. Cela évite de créer une demande de tirage qui ne peut pas être fusionnée en l'état.
Les problèmes étiquetés good first issue et help wanted sont de bons points de départ. Indiquez dans un commentaire que vous y travaillez. Les nouveaux problèmes sont étiquetés status/triage, puis status/accepted, status/planned ou status/wontfix. Les problèmes restent dans le dépôt communautaire, quel que soit leur sujet : les dépôts de code n'acceptent pas de problèmes. Le travail planifié est consultable sur la feuille de route d'Antimatter.
Dépôts et branches
Le code se trouve dans l'organisation AntimatterChat ; la section Où se trouve le code liste les dépôts. Dans chaque dépôt :
mainest la branche par défaut et contient le code d'Antimatter. Créez vos branches à partir de celle-ci et envoyez vos demandes de tirage vers celle-ci.- Les dépôts forkés de Mattermost disposent également d'une branche
upstream, un miroir du code de Mattermost utilisé pour intégrer leurs modifications. Ne basez pas votre travail dessus.
Le README de chaque dépôt explique comment le compiler et le tester. Pour le serveur et les interfaces web, consultez Compilation à partir des sources ; pour les applications, Compilation, installation et débogage.
Demandes de tirage
- Fork the repository and create a branch from
main. - Keep each pull request to one change. Small pull requests are reviewed faster.
- Follow the style of the code around you, and add or update tests where it makes sense.
- Describe what you changed and why, and link the issue it fixes:
Fixes AntimatterChat/community#123. - Make sure the checks pass. A maintainer reviews the pull request and may ask for changes.
In the server repository, fill in the pull request template: a Summary, and the Release Note block, which must always be there. Write NONE in it when the change touches no API, configuration, database schema or visible behaviour.
By contributing, you agree that your contribution is licensed under the licence of the repository you contribute to.
Commits and code style
Commits
Commit messages in the history are one short sentence saying what changes, in sentence case and without a final full stop. Changes to one part are prefixed with it, for example Fusion: a compact conversation header on phones or Server: community attributes, and admin-only user attributes. One commit per change; explain the reasons in the body when they aren't obvious.
Server (Go)
- Run
make check-styleinserver/before pushing. - Never run
go mod tidydirectly; runmake modules-tidy. - In request paths, log with the request's logger. In the store layer, take a
request.CTX, not acontext.Context. - New API endpoints go in
server/channels/api4, with their types inserver/public/modeland, ideally, a method inmodel.Client4and in the TypeScript client.
Web interfaces (TypeScript and React)
- Run
make check-styleandmake check-typesinwebapp/. - The classic interface follows
webapp/STYLE_GUIDE.md: functional components, hooks for Redux, theme variables for colours, accessible markup. - Fusion's components live in
webapp/fusion/src/fusion, with their styles inwebapp/fusion/src/fusion/styles. They build class names with theam()helper and use Fusion's design tokens; follow the files next to yours. - Don't add new
window.*globals for apps. New app-facing utilities go underwindow.WebappUtils, aswebapp/AGENTS.mdexplains. - Un changement dans le registre de l’application (
plugins/registry.ts) doit généralement être appliqué aux copies des deux interfaces.
Traductions
Antimatter et ses applications intégrées sont traduites en 37 langues. Les contributeurs ajoutent les chaînes en anglais ; les autres langues sont mises à jour par lots.
Ajouter une chaîne aux interfaces web
- Écrivez-la avec un identifiant et un texte anglais littéral :
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})ou<FormattedMessage id='…' defaultMessage='…'/>. L’anglais affiché dans l’application provient dedefaultMessage. - Exécutez
make i18n-extractdanswebapp/(ounpm run i18n-extractdanswebapp/fusionouwebapp/channels). Cela met à jour le fichiersrc/i18n/en.jsondu package concerné. - Remplissez le champ
descriptionde la nouvelle entrée dansen.json: indiquez où la chaîne apparaît et comment elle est utilisée. C’est le contexte sur lequel les traducteurs, humains ou machines, s’appuient.
npm run i18n-extract:check échoue si en.json n’est plus à jour par rapport au code.
Ajouter une chaîne au serveur
- Utilisez un identifiant dans le code, par exemple
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)oui18n.T("…"). - Exécutez
make i18n-extractdansserver/. Cela ajoute l’identifiant àserver/i18n/en.jsondans le bon ordre. - Rédigez la
translationen anglais et ladescriptionde la nouvelle entrée.
Autres langues
Chaque langue possède son propre fichier à côté de en.json (fr.json, pt-BR.json, zh-TW.json…). Pour signaler une traduction erronée, ouvrez un ticket dans le dépôt de la communauté en précisant la langue, le texte et l’endroit où il apparaît.
Les applications intégrées conservent leurs chaînes dans webapp/i18n/ ; voir Traductions dans la page des applications.
Documentation et ce site web
Ce site web et sa documentation sont dans le dépôt antimatter.chat. Les pages sont des fragments HTML dans src/pages/ ; python3 src/build.py construit le site. Les corrections et les explications manquantes sont les bienvenues sous forme de tickets ou de demandes de tirage.
Problèmes de sécurité
Signalez-le en privé via le système de signalement des vulnérabilités de GitHub : ouvrez l'onglet Sécurité du dépôt concerné (par exemple le serveur) et sélectionnez Signaler une vulnérabilité. Si vous ne savez pas quel dépôt est affecté, signalez-le sur le dépôt communautaire. Indiquez le composant et sa version, ce qu'un attaquant pourrait faire, comment le reproduire et toute configuration dont il dépend.
Les mainteneurs y répondent, vous tiennent informés pendant la correction et publient un avis de sécurité dès qu'une version corrigée est disponible. Merci de leur laisser un délai raisonnable avant de divulguer le problème. Les correctifs sont intégrés à la dernière version. La politique complète est disponible dans la politique de sécurité.
Licences
- Le serveur est sous licence GNU Affero General Public License v3.0 (AGPL v3). Dans le même dépôt, les outils d'administration et les fichiers de configuration (
server/templates/,server/i18n/,server/public/etwebapp/) sont sous licence Apache 2.0. ConsultezLICENSE.txtetNOTICE.txt. - Applications : les applications d'Antimatter, telles que Sondages, sont sous licence AGPL v3 ; les applications dérivées de Mattermost conservent leur licence d'origine. Chaque dépôt précise laquelle dans son fichier
LICENSE. - Les applications de bureau et mobiles sont sous licence Apache 2.0. Le dépôt Docker est sous licence Apache 2.0, à l'exception de son
Dockerfile, qui est sous licence AGPL v3.
L'AGPL signifie que si vous exécutez un serveur Antimatter modifié pour d'autres personnes via un réseau, vous devez leur fournir le code source de vos modifications. Antimatter est basé sur Mattermost ; il n'est ni affilié ni approuvé par Mattermost, Inc.
Toute personne participant suit le règlement de conduite.