コントリビューション

バグ報告、アイデア、翻訳、ドキュメント、コード、すべて大歓迎です。このページでは、話し合う場所、変更を送る方法、コードが従う慣例、セキュリティ問題とライセンスに関するルールを説明します。

話し合う場所

Antimatterのどの部分に関するものでも、すべてはコミュニティリポジトリから始まります:

  • バグと機能リクエスト:Issueを開くとき、Bug report、Feature request、またはPlugin or integration requestを選択します。まず既存のIssueを検索してください。該当するものがある場合は、サムズアップや詳細情報を追加してください。
  • 質問とアイデア:DiscussionsのQ&AまたはIdeasカテゴリに投稿してください。
  • 大きな変更を行う前に、まずIssueやディスカッションを開いて方針について合意形成を行いましょう。これにより、そのままではマージできないプルリクエストを避けることができます。

good first issue や help wanted とラベル付けされた Issue は、入門に最適な場所です。作業を開始する場合は、コメントでその旨を記載してください。新しい Issue は status/triage とラベル付けされ、その後 status/accepted、status/planned、または status/wontfix に変更されます。Issue の内容に関わらず、すべてコミュニティのリポジトリに保持されます。コードのリポジトリでは Issue を受け付けていません。計画されている作業は Antimatter のロードマップ に掲載されています。

リポジトリとブランチ

コードはAntimatterChat組織内にあります。コードの場所にリポジトリの一覧があります。すべてのリポジトリにおいて:

  • mainはデフォルトブランチであり、Antimatterのコードを保持しています。ここからブランチを作成し、プルリクエストを送信してください。
  • Mattermostからフォークされたリポジトリにはupstreamブランチも存在します。これはMattermostのコードのミラーであり、その変更を取り込むために使用されます。これをベースに作業しないでください。

各リポジトリのREADMEには、ビルドとテストの方法が説明されています。サーバーとWebインターフェースについてはソースからのビルドを、アプリについてはビルド、インストール、デバッグを参照してください。

プルリクエスト

  1. リポジトリをフォークし、main からブランチを作成します。
  2. 各プルリクエストは1つの変更にとどめてください。小さなプルリクエストはレビューが速く行われます。
  3. 周囲のコードのスタイルに従い、適切な場所にテストを追加または更新してください。
  4. 変更した内容とその理由を説明し、修正する問題をリンクしてください: Fixes AntimatterChat/community#123。
  5. チェックがパスすることを確認してください。メンテナーがプルリクエストをレビューし、変更を求められる場合があります。

サーバーのリポジトリでは、プルリクエストのテンプレートに記入します: 概要、および常に存在しなければならないリリースノートブロック。API、設定、データベーススキーマ、または目に見える動作に影響しない変更の場合は、そこにNONEと記入します。

貢献することで、あなたの貢献が貢献先のリポジトリのライセンスの下でライセンスされることに同意したことになります。

コミットとコードスタイル

コミット

履歴内のコミットメッセージは、変更内容を1つの短い文で示すもので、センテンスケース(文頭のみ大文字)で、末尾に句点をつけません。1つの部分への変更は、その部分名で接頭辞を付けます。例えば Fusion: a compact conversation header on phones や Server: community attributes, and admin-only user attributes のようにします。1つの変更につき1つのコミットとし、理由が自明でない場合は本文で説明します。

サーバー (Go)

  • プッシュする前に server/ で make check-style を実行します。
  • go mod tidy を直接実行しないでください。代わりに make modules-tidy を実行します。
  • リクエストパスでは、リクエストのロガーでログを出力します。ストアレイヤーでは、context.Context ではなく request.CTX を受け取ります。
  • 新しいAPIエンドポイントは server/channels/api4 に配置し、その型は server/public/model に配置します。理想としては、model.Client4 とTypeScriptクライアントにもメソッドを追加します。

Webインターフェース (TypeScript と React)

  • webapp/ で make check-style と make check-types を実行します。
  • クラシックインターフェースは webapp/STYLE_GUIDE.md に従います: 関数型コンポーネント、Redux用のフック、色用のテーマ変数、アクセシブルなマークアップ。
  • Fusionのコンポーネントは webapp/fusion/src/fusion にあり、そのスタイルは webapp/fusion/src/fusion/styles にあります。クラス名は am() ヘルパーで構築し、Fusionのデザイントークンを使用します。隣接するファイルに従ってください。
  • アプリのために新しい window.* グローバルを追加しないでください。アプリ向けの新しいユーティリティは window.WebappUtils 以下に配置します。webapp/AGENTS.md に説明があります。
  • アプリレジストリ(plugins/registry.ts)への変更は、通常、両方のインターフェースのコピーに反映する必要があります。

翻訳

Antimatterおよび同梱のアプリは37の言語に翻訳されています。貢献者は英語の文字列を追加し、その他の言語はバッチで更新されます。

Webインターフェースへの文字列の追加

  1. IDと英語の原文を記述します:formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})または<FormattedMessage id='…' defaultMessage='…'/>。アプリ内に表示される英語はdefaultMessageから取得されます。
  2. webapp/(または webapp/fusion または webapp/channels)で make i18n-extract(または npm run i18n-extract)を実行します。これにより、そのパッケージの src/i18n/en.json が更新されます。
  3. en.json内の新しいエントリのdescriptionを記入します:文字列が表示される場所と使用法です。これは、人間または機械による翻訳者が作業する際のコンテキストとなります。

npm run i18n-extract:checkは、en.jsonがコードと同期していない場合に失敗します。

サーバーへの文字列の追加

  1. コード内でIDを使用します。例:model.NewAppError(…, "app.community_attributes.invalid.app_error", …)またはi18n.T("…")。
  2. server/でmake i18n-extractを実行します。これにより、IDが適切な順序でserver/i18n/en.jsonに追加されます。
  3. 新しいエントリの英語のtranslationとdescriptionを記述します。

その他の言語

各言語には、en.jsonの隣に独自のファイルがあります(fr.json、pt-BR.json、zh-TW.jsonなど)。誤った翻訳を報告するには、コミュニティのリポジトリで、言語、テキスト、および表示される場所を明記してIssueを作成してください。

同梱のアプリは文字列をwebapp/i18n/に保持しています。アプリのページにある翻訳を参照してください。

ドキュメントとこのウェブサイト

このウェブサイトとそのドキュメントはantimatter.chatリポジトリにあります。ページはsrc/pages/内のHTMLフラグメントです。python3 src/build.pyを実行するとサイトがビルドされます。修正や不足している説明は、IssueやPull Requestとして歓迎します。

セキュリティの問題

セキュリティの問題を公開のIssue、ディスカッション、またはPull Requestで報告しないでください。

GitHub の非公開脆弱性報告機能を使って、非公開に報告してください。影響を受けるリポジトリ(例:サーバー)の セキュリティー タブを開き、脆弱性を報告 を選択します。どのリポジトリが影響を受けるか分からない場合は、コミュニティリポジトリ に報告してください。コンポーネントとそのバージョン、攻撃者が実行できること、再現手順、依存する設定を含めてください。

メンテナーはそこで回答し、修正作業中に最新情報を共有し、修正済みリリースが公開されるとアドバイザリを発行します。問題を公開する前に、メンテナーに十分な時間を与えてください。修正は最新リリースに反映されます。完全なポリシーはセキュリティポリシーに記載されています。

ライセンス

  • サーバーはGNU Affero General Public License v3.0 (AGPL v3)の下で提供されています。同じリポジトリ内の管理ツールと設定ファイル(server/templates/、server/i18n/、server/public/およびwebapp/)はApache License 2.0の下で提供されています。LICENSE.txtおよびNOTICE.txtを参照してください。
  • アプリ: Antimatter独自のアプリ(Pollsなど)はAGPL v3の下で提供されています。Mattermostからフォークされたアプリは元のライセンスを維持します。各リポジトリのLICENSEファイルにどのライセンスが適用されるかが記載されています。
  • デスクトップおよびモバイルアプリはApache License 2.0の下で提供されています。DockerリポジトリはApache License 2.0の下で提供されていますが、DockerfileはAGPL v3の下で提供されています。

AGPLは、ネットワーク経由で他の人に対して変更を加えたAntimatterサーバーを実行する場合、その変更のソースコードを提供する必要があることを意味します。AntimatterはMattermostをベースにしていますが、Mattermost, Inc.とは提携しておらず、その承認も受けていません。

参加するすべての人は行動規範に従ってください。