Đóng góp
Báo cáo lỗi, ý tưởng, bản dịch, tài liệu và mã nguồn đều được chào đón. Trang này giải thích nơi để trao đổi, cách gửi một thay đổi, các quy ước mà mã nguồn tuân theo, và các quy tắc cho vấn đề bảo mật và giấy phép.
Nơi để trao đổi
Mọi thứ bắt đầu từ kho cộng đồng, bất kể nó liên quan đến phần nào của Antimatter:
- Lỗi và yêu cầu tính năng: mở một vấn đề và chọn Báo cáo lỗi, Yêu cầu tính năng, hoặc Yêu cầu plugin hoặc tích hợp. Hãy tìm kiếm các vấn đề hiện có trước; nếu vấn đề của bạn đã tồn tại, hãy thêm biểu tượng ngón cái hướng lên hoặc chi tiết của bạn.
- Câu hỏi và ý tưởng: Thảo luận, trong các danh mục Hỏi đáp hoặc Ý tưởng.
- Trước một thay đổi lớn, hãy mở một vấn đề hoặc một thảo luận để thống nhất cách tiếp cận trước. Điều này giúp tránh gửi một yêu cầu kéo không thể được hợp nhất như hiện tại.
Các vấn đề được gắn nhãn good first issue và help wanted là những nơi tốt để bắt đầu. Hãy để lại một bình luận cho biết bạn đang làm việc trên một trong số đó. Các vấn đề mới sẽ được gắn nhãn status/triage, sau đó là status/accepted, status/planned hoặc status/wontfix. Các vấn đề sẽ được giữ trong kho lưu trữ cộng đồng bất kể nội dung là gì: các kho lưu trữ mã nguồn không nhận vấn đề. Công việc được lên kế hoạch nằm trong lộ trình của Antimatter.
Kho mã và nhánh
Mã nguồn nằm trong tổ chức AntimatterChat; Nơi mã nguồn nằm liệt kê các kho mã. Trong mỗi kho mã:
mainlà nhánh mặc định và chứa mã nguồn của Antimatter. Hãy tạo nhánh từ nó và gửi yêu cầu kéo đến nó.- Các kho mã được fork từ Mattermost cũng có một nhánh
upstream, một bản sao của mã nguồn Mattermost được sử dụng để đưa các thay đổi của họ vào. Không nên dựa trên nhánh này để làm việc.
README của mỗi kho mã giải thích cách xây dựng và kiểm thử nó. Đối với máy chủ và giao diện web, xem Xây dựng từ mã nguồn; đối với các ứng dụng, xem Xây dựng, cài đặt và gỡ lỗi.
Yêu cầu kéo
- Fork kho lưu trữ và tạo một nhánh từ
main. - Giới hạn mỗi pull request cho một thay đổi. Các pull request nhỏ được xem xét nhanh hơn.
- Tuân theo phong cách của mã nguồn xung quanh bạn và thêm hoặc cập nhật các bài kiểm tra khi phù hợp.
- Mô tả những gì bạn đã thay đổi và lý do, đồng thời liên kết đến vấn đề mà nó khắc phục:
Fixes AntimatterChat/community#123. - Đảm bảo các kiểm tra đạt yêu cầu. Người duy trì sẽ xem xét pull request và có thể yêu cầu thay đổi.
Trong kho lưu trữ máy chủ, điền vào mẫu pull request: một Tóm tắt, và khối Ghi chú phát hành, luôn phải có. Viết NONE vào đó khi thay đổi không ảnh hưởng đến API, cấu hình, lược đồ cơ sở dữ liệu hoặc hành vi hiển thị.
Bằng cách đóng góp, bạn đồng ý rằng đóng góp của bạn được cấp phép theo giấy phép của kho lưu trữ mà bạn đóng góp.
Cam kết và phong cách mã nguồn
Cam kết
Thông điệp cam kết trong lịch sử là một câu ngắn gọn nói về thay đổi, viết hoa chữ cái đầu và không có dấu chấm cuối câu. Các thay đổi cho một phần được đặt tiền tố là tên phần đó, ví dụ Fusion: a compact conversation header on phones hoặc Server: community attributes, and admin-only user attributes. Một cam kết cho mỗi thay đổi; giải thích lý do trong phần thân khi chúng không rõ ràng.
Máy chủ (Go)
- Chạy
make check-styletrongserver/trước khi đẩy. - Không bao giờ chạy
go mod tidytrực tiếp; hãy chạymake modules-tidy. - Trong các đường dẫn yêu cầu, ghi nhật ký bằng trình ghi nhật ký của yêu cầu. Trong lớp lưu trữ, nhận một
request.CTX, không phảicontext.Context. - Các điểm cuối API mới nằm trong
server/channels/api4, với các kiểu dữ liệu của chúng trongserver/public/modelvà, lý tưởng nhất, một phương thức trongmodel.Client4và trong client TypeScript.
Giao diện web (TypeScript và React)
- Chạy
make check-stylevàmake check-typestrongwebapp/. - Giao diện cổ điển tuân theo
webapp/STYLE_GUIDE.md: các thành phần chức năng, hooks cho Redux, các biến chủ đề cho màu sắc, markup có thể truy cập được. - Các thành phần của Fusion nằm trong
webapp/fusion/src/fusion, với các kiểu của chúng trongwebapp/fusion/src/fusion/styles. Chúng xây dựng tên lớp bằng trình trợ giúpam()và sử dụng các token thiết kế của Fusion; hãy tuân theo các tệp bên cạnh tệp của bạn. - Đừng thêm các biến toàn cục
window.*mới cho các ứng dụng. Các tiện ích mới hướng đến ứng dụng nằm dướiwindow.WebappUtils, như được giải thích trongwebapp/AGENTS.md. - Một thay đổi đối với registry của ứng dụng (
plugins/registry.ts) thường thuộc về bản sao của cả hai giao diện.
Bản dịch
Antimatter và các ứng dụng đi kèm được dịch sang 37 ngôn ngữ. Người đóng góp thêm các chuỗi tiếng Anh; các ngôn ngữ khác được cập nhật theo đợt.
Thêm một chuỗi vào các giao diện web
- Viết nó với một ID và một văn bản tiếng Anh cụ thể:
formatMessage({id: 'fusion.channelMenu.settings', defaultMessage: 'Channel settings'})hoặc<FormattedMessage id='…' defaultMessage='…'/>. Tiếng Anh hiển thị trong ứng dụng đến từdefaultMessage. - Chạy
make i18n-extracttrongwebapp/(hoặcnpm run i18n-extracttrongwebapp/fusionhoặcwebapp/channels). Nó cập nhậtsrc/i18n/en.jsoncủa gói đó. - Điền vào
descriptioncủa mục mới trongen.json: nơi chuỗi xuất hiện và cách nó được sử dụng. Đây là ngữ cảnh mà người dịch, dù là người hay máy, làm việc dựa trên đó.
npm run i18n-extract:check sẽ thất bại khi en.json không còn đồng bộ với mã nguồn.
Thêm một chuỗi vào máy chủ
- Sử dụng một ID trong mã, ví dụ
model.NewAppError(…, "app.community_attributes.invalid.app_error", …)hoặci18n.T("…"). - Chạy
make i18n-extracttrongserver/. Nó thêm ID vàoserver/i18n/en.jsontheo thứ tự đúng. - Viết
translationtiếng Anh vàdescriptioncủa mục mới.
Các ngôn ngữ khác
Mỗi ngôn ngữ có tệp riêng bên cạnh en.json (fr.json, pt-BR.json, zh-TW.json…). Để báo cáo một bản dịch sai, hãy mở một issue trong kho lưu trữ cộng đồng với ngôn ngữ, văn bản và nơi nó xuất hiện.
Các ứng dụng đi kèm giữ các chuỗi của chúng trong webapp/i18n/; xem Bản dịch trong trang ứng dụng.
Tài liệu và trang web này
Trang web này và tài liệu của nó nằm trong kho lưu trữ antimatter.chat. Các trang là các đoạn HTML trong src/pages/; python3 src/build.py xây dựng trang web. Các sửa lỗi và giải thích bị thiếu được chào đón dưới dạng issue hoặc pull request.
Vấn đề bảo mật
Báo cáo riêng tư thông qua tính năng báo cáo lỗ hổng bảo mật của GitHub: mở tab Security của kho lưu trữ bị ảnh hưởng (ví dụ server) và chọn Report a vulnerability. Nếu bạn không chắc kho lưu trữ nào bị ảnh hưởng, hãy báo cáo tại kho lưu trữ cộng đồng. Vui lòng bao gồm thành phần và phiên bản của nó, những gì kẻ tấn công có thể thực hiện, cách tái hiện sự cố và bất kỳ cấu hình nào mà nó phụ thuộc.
Các nhà phát triển sẽ phản hồi tại đó, cập nhật tình hình cho bạn trong khi họ khắc phục và công bố thông báo bảo mật (advisory) khi có bản phát hành đã được sửa lỗi. Vui lòng dành cho họ thời gian hợp lý trước khi công khai vấn đề. Các bản sửa lỗi sẽ được đưa vào bản phát hành mới nhất. Chính sách bảo mật đầy đủ nằm trong chính sách bảo mật.
Giấy phép
- Server được cấp phép theo GNU Affero General Public License v3.0 (AGPL v3). Trong cùng kho lưu trữ, các công cụ quản trị và tệp cấu hình (
server/templates/,server/i18n/,server/public/vàwebapp/) được cấp phép theo Apache License 2.0. XemLICENSE.txtvàNOTICE.txt. - Ứng dụng: Các ứng dụng do Antimatter tự phát triển, chẳng hạn như Polls, được cấp phép theo AGPL v3; các ứng dụng được fork từ Mattermost giữ nguyên giấy phép gốc. Mỗi kho lưu trữ sẽ ghi rõ giấy phép trong tệp
LICENSEcủa nó. - Ứng dụng desktop và mobile được cấp phép theo Apache License 2.0. Kho lưu trữ Docker được cấp phép theo Apache License 2.0, ngoại trừ tệp
Dockerfilecủa nó, được cấp phép theo AGPL v3.
AGPL có nghĩa là nếu bạn chạy một server Antimatter đã bị sửa đổi cho người khác qua mạng, bạn phải cung cấp cho họ mã nguồn của các thay đổi đó. Antimatter được xây dựng dựa trên Mattermost; nó không liên kết hay được Mattermost, Inc. hậu thuẫn.
Mọi người tham gia đều tuân thủ quy tắc ứng xử.