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 :

  • main est 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

  1. Fork the repository and create a branch from main.
  2. Keep each pull request to one change. Small pull requests are reviewed faster.
  3. Follow the style of the code around you, and add or update tests where it makes sense.
  4. Describe what you changed and why, and link the issue it fixes: Fixes AntimatterChat/community#123.
  5. 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-style in server/ before pushing.
  • Never run go mod tidy directly; run make modules-tidy.
  • In request paths, log with the request's logger. In the store layer, take a request.CTX, not a context.Context.
  • New API endpoints go in server/channels/api4, with their types in server/public/model and, ideally, a method in model.Client4 and in the TypeScript client.

Web interfaces (TypeScript and React)

  • Run make check-style and make check-types in webapp/.
  • 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 in webapp/fusion/src/fusion/styles. They build class names with the am() 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 under window.WebappUtils, as webapp/AGENTS.md explains.
  • 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

  1. É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 de defaultMessage.
  2. Exécutez make i18n-extract dans webapp/ (ou npm run i18n-extract dans webapp/fusion ou webapp/channels). Cela met à jour le fichier src/i18n/en.json du package concerné.
  3. Remplissez le champ description de la nouvelle entrée dans en.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

  1. Utilisez un identifiant dans le code, par exemple model.NewAppError(…, "app.community_attributes.invalid.app_error", …) ou i18n.T("…").
  2. Exécutez make i18n-extract dans server/. Cela ajoute l’identifiant à server/i18n/en.json dans le bon ordre.
  3. Rédigez la translation en anglais et la description de 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é

Ne signalez jamais un problème de sécurité dans un ticket, une discussion ou une demande de tirage publics.

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/ et webapp/) sont sous licence Apache 2.0. Consultez LICENSE.txt et NOTICE.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.