Bijdragen

Foutmeldingen, ideeën, vertalingen, documentatie en code zijn allemaal welkom. Deze pagina legt uit waar je kunt praten, hoe je een wijziging verstuurt, de conventies waaraan de code voldoet en de regels voor beveiligingsproblemen en licenties.

Waar je kunt praten

Alles begint in de community-repository, ongeacht welk deel van Antimatter het betreft:

  • Bugs en verzoeken om nieuwe functies: open een issue en kies Bug report, Feature request of Plugin or integration request. Zoek eerst in de bestaande issues; als er al een is, voeg dan een duim-omhoog-reactie toe of geef je eigen details.
  • Vragen en ideeën: de Discussions, in de categorieën Vragen & Antwoorden of Ideeën.
  • Voor een grotere wijziging, open eerst een issue of een discussie om overeenstemming te bereiken over de aanpak. Dat voorkomt een pull request die in de huidige staat niet kan worden samengevoegd.

Problemen met de labels good first issue en help wanted zijn een goede plek om te beginnen. Geef in een reactie aan dat je er aan werkt. Nieuwe problemen krijgen eerst het label status/triage, daarna status/accepted, status/planned of status/wontfix. Problemen blijven in het community-repository, ongeacht het onderwerp: de code-repositories nemen geen problemen aan. De geplande werkzaamheden staan op de Antimatter-roadmap.

Repositories en branches

De code staat in de AntimatterChat-organisatie; Waar de code staat geeft de repositories weer. In elke repository:

  • main is de standaardbranch en bevat de code van Antimatter. Baseer je branch hierop en stuur pull requests ernaar toe.
  • Repositories die zijn geforkt van Mattermost hebben ook een upstream-branch, een spiegel van de code van Mattermost die wordt gebruikt om hun wijzigingen over te nemen. Baseer je werk niet hierop.

De README van elke repository legt uit hoe je deze bouwt en test. Voor de server en de webinterfaces, zie Bouwen vanuit broncode; voor apps, Bouwen, installeren en debuggen.

Pull requests

  1. Fork het repository en maak een branch aan vanaf main.
  2. Beperk elke pull request tot één wijziging. Kleine pull requests worden sneller beoordeeld.
  3. Volg de stijl van de code in de buurt en voeg of werk tests bij waar dat zinvol is.
  4. Beschrijf wat je hebt gewijzigd en waarom, en link het issue dat het oplost: Fixes AntimatterChat/community#123.
  5. Zorg dat de controles slagen. Een beheerder beoordeelt de pull request en kan eventueel wijzigingen vragen.

Vul in de serverrepository het sjabloon voor de pull request in: een Overzicht en het blok Release Note, dat altijd aanwezig moet zijn. Schrijf NONE in dit blok als de wijziging geen API, configuratie, databaseschema of zichtbaar gedrag raakt.

Door bij te dragen, ga je akkoord dat je bijdrage gelicentieerd is onder de licentie van het repository waaraan je bijdraagt.

Commits en codestijl

Commits

Commitberichten in de geschiedenis zijn één korte zin die aangeeft wat er is gewijzigd, in zinsnotatie en zonder een punt aan het einde. Wijzigingen aan één onderdeel worden voorafgegaan door het onderdeel, bijvoorbeeld Fusion: a compact conversation header on phones of Server: community attributes, and admin-only user attributes. Eén commit per wijziging; leg de redenen uit in de body als ze niet voor de hand liggen.

Server (Go)

  • Voer make check-style uit in server/ voordat je pusht.
  • Voer go mod tidy nooit direct uit; voer make modules-tidy uit.
  • Log in request-paden met de logger van de request. Neem in de store-laag een request.CTX, niet een context.Context.
  • Nieuwe API-endpoints komen in server/channels/api4, met hun types in server/public/model en, ideaal gezien, een methode in model.Client4 en in de TypeScript-client.

Webinterfaces (TypeScript en React)

  • Voer make check-style en make check-types uit in webapp/.
  • De klassieke interface volgt webapp/STYLE_GUIDE.md: functionele componenten, hooks voor Redux, themavariabelen voor kleuren, toegankelijk markup.
  • De componenten van Fusion staan in webapp/fusion/src/fusion, met hun stijlen in webapp/fusion/src/fusion/styles. Ze bouwen class-namen met de am()-helper en gebruiken de design tokens van Fusion; volg de bestanden naast de jouwe.
  • Voeg geen nieuwe window.*-globalen toe voor apps. Nieuwe hulpmiddelen voor apps komen onder window.WebappUtils, zoals webapp/AGENTS.md uitlegt.
  • Een wijziging in het app-register (plugins/registry.ts) hoort doorgaans in de kopieën van beide interfaces.

Vertalingen

Antimatter en de bijbehorende apps zijn vertaald in 37 talen. Bijdragers voegen de Engelse teksten toe; de andere talen worden in batches bijgewerkt.

Een tekst toevoegen aan de webinterfaces

  1. Schrijf deze met een ID en een letterlijke Engelse tekst: formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'}) of <FormattedMessage id='…' defaultMessage='…'/>. De Engelse tekst die in de app wordt weergegeven, komt uit defaultMessage.
  2. Voer make i18n-extract uit in webapp/ (of npm run i18n-extract in webapp/fusion of webapp/channels). Hiermee wordt src/i18n/en.json van dat pakket bijgewerkt.
  3. Vul het veld description van de nieuwe vermelding in en.json in: waar de tekst voorkomt en hoe deze wordt gebruikt. Dit is de context waar vertalers, menselijk of machinaal, van uitgaan.

npm run i18n-extract:check faalt wanneer en.json niet meer up-to-date is met de code.

Een tekst toevoegen aan de server

  1. Gebruik een ID in de code, bijvoorbeeld model.NewAppError(…, "app.community_attributes.invalid.app_error", …) of i18n.T("…").
  2. Voer make i18n-extract uit in server/. Hiermee wordt het ID in de juiste volgorde toegevoegd aan server/i18n/en.json.
  3. Schrijf de Engelse translation en de description van de nieuwe vermelding.

Andere talen

Elke taal heeft een eigen bestand naast en.json (fr.json, pt-BR.json, zh-TW.json…). Om een onjuiste vertaling te melden, open een issue in het community-repository met de taal, de tekst en de locatie waar deze voorkomt.

De bijbehorende apps bewaren hun teksten in webapp/i18n/; zie Vertalingen op de apps-pagina.

Documentatie en deze website

Deze website en de bijbehorende documentatie staan in het antimatter.chat-repository. Pagina's zijn HTML-fragmenten in src/pages/; python3 src/build.py bouwt de site. Correcties en ontbrekende uitleg zijn welkom als issues of pull requests.

Beveiligingsproblemen

Meld nooit een beveiligingsprobleem in een openbare issue, discussie of pull request.

Meld het privé via het meldsysteem voor kwetsbaarheden van GitHub: open het tabblad Beveiliging van de betreffende repository (bijvoorbeeld de server) en kies Report a vulnerability. Als je niet weet welke repository is getroffen, meld het dan in de community-repository. Vermeld het onderdeel en de versie, wat een aanvaller ermee zou kunnen doen, hoe je het kunt reproduceren en welke configuratie er van afhankelijk is.

De onderhouders reageren daar, houden u op de hoogte tijdens het oplossen en publiceren een advies zodra een gecorrigeerde release beschikbaar is. Geef hen a.u.b. een redelijke termijn voordat u het probleem openbaar maakt. Correcties worden opgenomen in de nieuwste release. Het volledige beleid staat in het beveiligingsbeleid.

Licenties

  • De server valt onder de GNU Affero General Public License v3.0 (AGPL v3). In dezelfde repository vallen de beheertools en configuratiebestanden (server/templates/, server/i18n/, server/public/ en webapp/) onder de Apache License 2.0. Zie LICENSE.txt en NOTICE.txt.
  • Apps: de eigen apps van Antimatter, zoals Peilingen, vallen onder de AGPL v3; apps die zijn afgeleid van Mattermost behouden hun oorspronkelijke licentie. Elke repository vermeldt dit in het LICENSE-bestand.
  • De desktop- en mobiele apps vallen onder de Apache License 2.0. De Docker-repository valt onder de Apache License 2.0, met uitzondering van de Dockerfile, die onder de AGPL v3 valt.

De AGPL betekent dat als u een aangepaste Antimatter-server voor anderen via een netwerk draait, u hen de broncode van uw wijzigingen moet aanbieden. Antimatter is gebaseerd op Mattermost; het is niet geaffilieerd met of gesteund door Mattermost, Inc.

Iedereen die deelneemt, volgt de gedragscode.