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:
mainis 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
- Fork het repository en maak een branch aan vanaf
main. - Beperk elke pull request tot één wijziging. Kleine pull requests worden sneller beoordeeld.
- Volg de stijl van de code in de buurt en voeg of werk tests bij waar dat zinvol is.
- Beschrijf wat je hebt gewijzigd en waarom, en link het issue dat het oplost:
Fixes AntimatterChat/community#123. - 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-styleuit inserver/voordat je pusht. - Voer
go mod tidynooit direct uit; voermake modules-tidyuit. - Log in request-paden met de logger van de request. Neem in de store-laag een
request.CTX, niet eencontext.Context. - Nieuwe API-endpoints komen in
server/channels/api4, met hun types inserver/public/modelen, ideaal gezien, een methode inmodel.Client4en in de TypeScript-client.
Webinterfaces (TypeScript en React)
- Voer
make check-styleenmake check-typesuit inwebapp/. - 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 inwebapp/fusion/src/fusion/styles. Ze bouwen class-namen met deam()-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 onderwindow.WebappUtils, zoalswebapp/AGENTS.mduitlegt. - 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
- 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 uitdefaultMessage. - Voer
make i18n-extractuit inwebapp/(ofnpm run i18n-extractinwebapp/fusionofwebapp/channels). Hiermee wordtsrc/i18n/en.jsonvan dat pakket bijgewerkt. - Vul het veld
descriptionvan de nieuwe vermelding inen.jsonin: 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
- Gebruik een ID in de code, bijvoorbeeld
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)ofi18n.T("…"). - Voer
make i18n-extractuit inserver/. Hiermee wordt het ID in de juiste volgorde toegevoegd aanserver/i18n/en.json. - Schrijf de Engelse
translationen dedescriptionvan 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 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/enwebapp/) onder de Apache License 2.0. ZieLICENSE.txtenNOTICE.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.