贡献
对Jami的贡献总是受欢迎的,非常感谢。有很多方法可以为Jami做出贡献,包括:
报告错误和问题,
贡献代码,
帮助为GNU/Linux发行版或其他操作系统打包和维护Jami,
为[Jami文档]做出贡献(https://docs.jami.net/).
您可以在下面查看如何开始为 Jami 提供贡献!
报告错误和问题
请参阅 [错误报告指南] (/user/bug-report-guide.md),以获取关于如何报告您在使用Jami时可能遇到的任何问题的详细步骤。
贡献代码
若想开始为 Jami 贡献力量,请查看以下适合初学者的入门任务:https://git.jami.net/groups/savoirfairelinux/-/issues/?sort=created_date&state=opened&label_name[]=good first issue 1.
通过在工单上添加评论直接联系开发人员。这将使开发人员能够指导您完成整个过程。
必须向 https://review.jami.net 推送一个补丁,才能将代码集成到 Jami 中。
参见
有关如何推送补丁的更多信息,请参阅[使用Gerrit](/developer/new-developers/Working with Gerrit.md)指南。
提交消息准则
向Jami提交补丁时,请遵循以下提交消息准则:
第一行应包括变更的组成部分或范围,然后是命令式语气变更的简短摘要(例如,“添加新功能”、“修复错误”、“更新文档”)。
标题中,可对组件名或作用域名采用首字母大写,但标题其余部分应保持小写。
第二行应为空白。
第三行起可用完整句子对变更内容进行较长描述,视需要添加。
50/72规则:第一行不应超过50个字符(理想情况下),其余消息应每行72个字符。这可以在文本编辑器中配置。
如果更改与Jami GitLab中的特定问题有关,请在提交消息中包含问题编号。例如:
GitLab:#123。如果更改与多个问题有关,请列出所有问题。如果更改与不属于项目的问题有关,请使用指向该问题的链接。
提交消息模板:
<Component/Scope>: <short Summary (imperative, max 50 characters)>
<Detailed description (in present tense) of what was changed and why
it was necessary, wrapped at 72 characters per line to maintain
readability. Include any important details that help others understand
the context of the change. Use this space to explain complex changes
or provide background information.>
[GitLab: #<issuenumber>] or [Link to issue]
例如:
ConversationView: add a new function
Adds a new function to the ConversationView class that allows
the user to sort conversations by date. This function is necessary
to improve the user experience and make it easier to find specific
conversations.
GitLab: #123
包装 贾米
有两种可能的方式来打包Jami:
通过我们的内部流程打包,发布至 Snap Store 及 https://dl.jami.net
通过你常用的GNU/Linux 发行版的官方打包渠道。
重要
Jami是一个非常复杂的项目,有很多依赖关系。这不是一项快速简单的任务,需要维护。
备注
如果使用第二个选项打包Jami:
关于内部打包,所有相关内容均位于 extras/packaging/gnu-linux。您可以参考以往的补丁来了解具体需求,例如: https://review.jami.net/c/jami-client-qt/+/28036.
Jami 设有 3 个发布渠道:
内部渠道:用于测试目的
Nightly/Beta/Edge 面向公开测试。
稳定版:面向正式公开发布。
内部渠道通常用于测试新的发行版本,或在打包新 Qt 版本时进行验证。随后,每夜版每周生成一次,稳定版每月生成一次(前提是单元测试全部通过)。
软件包会被推送到:
dl.jami.net (2 台机器,每 15 分钟 rsync 一次)
Ubuntu商店(snapcraft.io/jami)
要新增一个发行版:
添加Dockerfile
修改 Makefile
更新打包脚本
太公保佑
在虚拟机里测试软件包
警告
Chromium 是个难啃的构建环节,常遇到的三个问题是:
GCC太新:
通用修复方式:从 Chromium 的 Gerrit 上取补丁,修 GCC 兼容问题
Python 版本太新:
通用修复方式:用 PyEnv 建一个对应版本的 Python 虚拟环境
缺少依赖:
Qt 配置阶段会列出已构建组件和缺失依赖,通常装个包或升级 node.js 就能解决
注意:如果 Qt 是在未启用 Chromium 的情况下生成的,必须把构建机缓存(/var/cache/jami)里的 Chromium 包清掉,才会重新生成新的
要移除一个发行版:
若某发行版已 EOL,或已有 2 个更新的 LTS,就可以移除(比如 Ubuntu 有 20/22/24 时,可删 20),删掉相关文件和检查项即可
备注
接下来需要做的大改动:
把 jami-daemon 从 autotools 迁到 CMake。
snap 里把 Ubuntu Core 20 换成 Ubuntu Core 22 (UC22)。
只生成一个统一的 Debian 安装包和一个统一的 RPM 安装包。
如果可能,用 Jenkinsfile 同时生成 GNU/Linux、macOS 和 Windows 的软件包。
内部信息(比如如何发布到各应用商店)参见内部 wiki。
贡献本文档
对于这些文件的贡献,从小修正到全新的章节,都很欢迎和赞赏.
本页将带你走一遍新建页面或提交修正的步骤。补丁评审流程和 Jami 其他项目一样,因此不会每条命令都展开讲解。
备注
贡献本文档即表示你同意:你的贡献以 FDL 1.3 版或自由软件基金会后续发布的任一版本发布;且不含不变节、无封面文本、无封底文本。
你也承诺所提交的修改由你本人创作,或复制自公有领域作品、或以与 FDL 兼容的自由许可证发布的作品。未经许可,切勿提交受版权保护的内容。
参见
如果你想帮忙翻译本页,可以加入项目并在 https://explore.transifex.com/savoirfairelinux/ 上开始翻译。
依赖性
需要安装并配置好 Git,使用你的 SSH 密钥对,并在 Jami Gerrit 有账号——补丁就是发到那里评审的。如果需要帮助,参见我们的补丁提交流南开头(TODO)。
要在本地用浏览器预览改动,需要安装以下工具:
$ pip install --upgrade sphinx sphinx_rtd_theme myst_parser
如果想用自动构建 + 浏览器自动刷新功能,还要装 sphinx-autobuild。
$ pip install --upgrade sphinx-autobuild
克隆存储库
复制存储库,并配置按设置,像这样:
$ git clone "ssh://USERNAME@review.jami.net:29420/jami-docs.git"
$ cd jami-docs
$ git config remote.origin.push HEAD:refs/for/master
动手改文件前,建议每个贡献 / 改动都切个新分支,这样后续往本地 main 分支 git pull 上游更新时会更顺:
$ git checkout -b my-example-change
编辑一个页面
页面是用 Markdown 写的。点击任意页面顶部的”View page source”就能打开原始源码,看看它是怎么写的。
接着去改你要改的 .md 文件即可。
审视您的工作
从存储库的底部运行:
$ make clean && make html
现在应该能在浏览器里看文档了,首页在 _build/html/index.html。
警告
这份文档目前没法用最新版 Sphinx 构建。解决办法和进展请见 GitLab 上的这个 issue。
为了自动构建文档,并在保存变更时更新您的浏览器,运行:
$ make clean && make watch
让它在后台跑,然后访问 http://127.0.0.1:8000(不是 本地那个 .html 文件)。
节省你的工作
$ git add source/file/you/edited.md
$ git commit
怎么写合格的 commit message,参考 commit message 规范。
提交变更
第一次推改动时,Gerrit 会报你的 commit 里没有 Change-Id,并给出一条 scp 命令用来装 commit hook。跑完那条命令后,就可以重新 commit 再推送了:
$ git commit --amend --no-edit
$ git push
修改你的工作
reviewer 可能会让你在合入前再改一版补丁,这很正常!改完之后 git add,再跑 git commit --amend 把改动叠进原来的提交里。
备注
--amend 的作用是告诉 Git 修订 最新的那个 commit,而不是新建一个——用 Gerrit 提改动时,更新提案走的就是这个流程。
添加一个页面
如果你想给文档加个全新页面,还得把它加到对应章节的 toctree 指令里。
举例来说,如果你在 user 文件夹里给 Jami 用户手册加了个新页面 hosting-jams-on-aws-guide.md,就要把它加到 user/index.md 的 toctree 指令里,且不要带文件扩展名:
```{toctree}
:maxdepth: 1
bug-report-guide
hosting-jams-on-aws-guide
```