Firefox 贡献者快速参考

此过程的某些部分,包括克隆和编译,即使在现代硬件上也可能需要很长时间。如果在任何时候遇到问题,请随时在 https://chat.mozilla.org#introduction 频道中提问。

请随时查看 设置参与 Firefox 代码库的工作 以获取更详细的教程。

开始前

请注册并为以下平台创建您的帐户:

Bugzilla:基于 Web 的通用错误跟踪系统。要注册 Phabricator,请确保在 Bugzilla 中启用双因素身份验证(我的资料 >> 编辑资料和偏好设置 >> 双因素身份验证)。

Phabricator:基于 Web 的软件开发协作工具,主要用于代码审查。请获取 API 令牌(设置 >> Conduit API 令牌)

Windows 依赖项

  1. 您需要 支持的 Windows 版本

  2. 下载 MozillaBuild 软件包。 安装目录应为

    $ c:\mozilla-build\
    
  3. 在继续下一步之前,请确保已满足 Windows 先决条件

注意

本教程中的所有命令都必须在 MozillaBuild 软件包提供的 shell 中运行(start-shell.bat)

有关在 Windows 上构建 Firefox 的更多信息

引导 Firefox 源代码副本

您可以下载源代码,并让 Firefox 自动下载并安装其需要的其他依赖项。以下命令根据您的操作系统,将下载大量数据(Firefox 历史记录的数年!)然后引导您完成交互式设置过程。

下载可能需要 40 分钟到两个小时(取决于您的连接),并且存储库的大小应小于 5GB(构建后约 20GB)。

**建议使用默认选项。**如果您不打算编写 C++ 或 Rust 代码,请选择 工件模式,并在引导程序末尾按照说明创建 mozconfig 文件。

在 Windows 上设置 Firefox

$ cd c:/
$ mkdir mozilla-source
$ cd mozilla-source
$ wget https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py

# To use Git as your VCS
$ python3 bootstrap.py --vcs=git

# To use Mercurial as your VCS
$ python3 bootstrap.py

有关 为 Windows 构建 Firefox 的更多信息。

在 macOS 和 Linux 上设置 Firefox

$ curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O

# To use Git as your VCS
$ python3 bootstrap.py --vcs=git

# To use Mercurial as your VCS
$ python3 bootstrap.py

有关 为 Linux 构建 Firefox为 MacOS 构建 Firefox 的更多信息。

为 Android 设置 Firefox

$ curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O

# To use Git as your VCS
$ python3 bootstrap.py --vcs=git

# To use Mercurial as your VCS
$ python3 bootstrap.py

有关 为 Android 构建 Firefox 的更多信息

设置编辑器

注意

Visual Studio Code 是推荐的 Firefox 开发编辑器。并非因为它比其他编辑器更好,而是因为我们决定将精力集中在一个编辑器上。

设置编辑器是贡献过程的重要组成部分。集成 lint 和其他功能可以节省您的时间,并有助于减少构建和审查周期。

请参阅我们的 编辑器页面,了解有关如何设置您喜欢的编辑器的更多信息

构建和运行

系统引导完成后,运行

$ cd mozilla-unified
$ ./mach build

这将检查依赖项并开始构建。这将需要一段时间;几分钟到几个小时,具体取决于您的硬件。

注意

如果您经常构建 Firefox,请将 ac_add_options --with-ccache=sccache 添加到 .mozconfig 中。sccache 通过缓存编译结果来显著加快构建速度。Firefox 构建系统将自动下载 sccache。

注意

默认构建是带有优化的编译构建。查看 mozconfig 文件文档 以查看其他构建选项。如果您不打算更改 C++ 或 Rust 代码,则 工件构建 会更快。

运行它

$ ./mach run

此命令将在新窗口中打开您本地构建的 Firefox。

有关在 Linux 上构建 Firefox 的更多信息 / 有关在 MacOS 上构建 Firefox 的更多信息

如果您遇到构建错误,请参考您特定操作系统的“构建 Firefox”的更详细文档,特别是“故障排除”部分。

编写补丁

在代码库中进行所需的更改。您可以查找 Searchfox 中的 UI 文本以找到正确的文件。

注意

如果您不确定需要进行哪些更改,或需要错误指导者的帮助,请随时使用 Bugzilla 上的 needinfo 功能(“请求信息”)以引起指导者的注意。

进行更改后,可视化您的更改以确保包含所有必要的工作

# Mercurial
# For files changed/added/removed
$ hg status

# For detailed line changes
$ hg diff

# Git
# For files changed/added/removed
$ git status

# For detailed line changes
$ git diff

然后提交您的更改

# Mercurial
$ hg commit

# Git
$ git commit

提交消息应如下所示:

Bug xxxx - Short description of your change. r?reviewer

Optionally, a longer description of the change.

确保您以这种格式包含错误编号和至少一位审查者(或审查者组)。

例如,以下是一个良好的提交消息示例:“Bug 123456 - 对演示 shell 进行空检查,以便在按钮在其自己的 onclick 处理程序期间自行移除时不会崩溃。r=person”

查找审查者或审查组,最简单的方法是在相关文件上运行 hg log <modified-file>(或 git log <modified-file>,如果您使用的是 git),并查看通常是谁在审查实际更改(即不是重新格式化、变量重命名等)。

要在存储库中可视化您的补丁,请运行

# Mercurial
$ hg wip

# Git
$ git show

有关如何使用补丁堆栈的更多信息

有关 Mercurial 的更多信息

确保更改符合编码风格

要检测编码风格违规,请使用 mach lint

$ ./mach lint path/to/the/file/or/directory/you/changed

# To get the autofix, add --fix:
$ ./mach lint path/to/the/file/or/directory/you/changed --fix

更多信息

本地测试更改

要运行测试,请使用 mach test 以及路径。但是,解析结果并不总是很容易。

$ ./mach test dom/serviceworkers

要运行基于 GTest(基于 C/C++ 的单元测试)的测试,请运行

$ ./mach gtest 'QuotaManager.*'

远程测试更改

运行 Firefox 的所有测试需要很长时间,并且需要在具有各种配置的多个操作系统上进行。要构建 Firefox 并将其测试运行在持续集成服务器 (CI) 上,有多种 选择任务的选项 可用。

要自动选择最有可能受您的更改影响的任务,请运行

$ ./mach try auto

要使用模糊搜索界面手动选择任务,请运行

$ ./mach try fuzzy

要重新运行相同的任务

$ ./mach try again

Treeherder(我们的持续集成系统)也可以附加新作业。由于每个审查都有关联的 try CI 运行,这使得这项工作更容易。有关更多信息,请参阅 try 构建的分析器符号

注意

这需要 1 级提交访问权限

如果您没有此访问级别,可以请您的审查者为您提交补丁。

更多信息

提交补丁

要提交补丁以供审查,我们使用一个名为 moz-phab 的工具。要安装它,请运行

$ ./mach install-moz-phab

一旦您想提交补丁(请确保您 使用了正确的提交消息),请运行

$ moz-phab

它会将所有当前应用的补丁发布到 Phabricator 并通知审查者。

如果您在彼此之上编写了多个补丁

$ moz-phab submit <first_revision>::<last_revision>

有关如何使用 Phabricator 和 MozPhab 的更多信息

更新工作目录

如果您已完成一个补丁并希望返回到顶端以创建新的补丁

$ hg pull central
$ hg up central

更新已提交的补丁

审查者很少会接受补丁的第一个版本。此外,由于代码审查机器人可能会建议一些改进,因此可能需要更改您的补丁。

如果您的补丁未加载到您的工作目录中,则首先需要重新应用它

$ moz-phab patch D<revision_id>

# Or you can use the URL of the revision on Phabricator
$ moz-phab patch https://phabricator.services.mozilla.com/D<revision_id>

在工作文件夹中进行更改并运行

# Or, if you need to pass arguments, e.g., changing the commit message:
$ hg commit --amend

# Git
$ git commit --amend

修改补丁后,您需要再次使用 moz-phab 提交它。

警告

不要使用hg commit --amend -mgit commit --amend -m

Phabricator 通过在创建修订时编辑提交消息来跟踪修订,以添加一个特殊的Differential Revision: <url>行。

当使用--amend -m时,该行将丢失,导致在重新提交时创建新的修订,这不是期望的结果。

如果您进行了许多更改,您可以使用以下命令压缩或编辑提交

# Mercurial
$ hg histedit

# Git
$ git rebase -i

提交步骤与初始补丁相同。

有关如何使用补丁堆栈的更多信息

从存储库中检索新的更改

要从存储库中拉取更改,请运行

# Mercurial
$ hg pull --rebase

# Git
$ git pull --rebase

在代码库中推送更改

一旦更改被接受,并且您修复了审查者发现的任何剩余问题,审查者应该合并该补丁。

如果补丁几天后没有合并到“自动合并”(集成分支)中,请随时联系审查者和/或在#introduction频道上联系@Aryx或@Sylvestre。

合并过程将自动关闭审查和错误。

更多信息

为 GeckoView 贡献代码

请注意,GeckoView 的设置和贡献流程与 Firefox 不同;GeckoView 的设置和贡献文档位于geckoview.dev

有关贡献的更多文档

如何为 Firefox 贡献代码

为 Mozilla 项目贡献代码

https://mozilla-version-control-tools.readthedocs.io/en/latest/devguide/contributing.html

https://moz-conduit.readthedocs.io/en/latest/phabricator-user.html

https://mikeconley.github.io/documents/How_mconley_uses_Mercurial_for_Mozilla_code