This page is a translated version of the page Phabricator/Code and the translation is 97% complete.
Outdated translations are marked like this.

本文档描述了维基媒体的Phabricator实例的开发过程。Phabricator是用PHP,编写的,就像MediaWiki一样,它应该有助于入手开发。

在本文档中,我们将首先了解维基媒体如何使用Phabricator,以及在开发过程中需要注意的事项。 之后,还有一些关于如何开始实际开发的说明。

维基媒体上的Phabricator

维基媒体使用Phorge(以前称作 Phabricator)实例,上游的改动极少,因为维护本地补丁非常麻烦。 对此的例外是扩展,它们是位于某個单独的存储库中,因此不需要定期合并。 因此,任何其他变化都必须通过上游。这听起来像是一个主要障碍,但在实践中,上游维护人员非常迅速地回应建议。

维基媒体Phabricator bug工作流程

在完成其中一项任务之前,了解错误的生命周期很有帮助。这里有两个项目: #phabricator用于WMF特定的错误和 #phabricator-upstream用于一般的Phabricator/Phorge问题。软件错误和增强请求通常属于第二类。

Phabricator上游工作板显示任务在上游创建之前经历的过程:

积压任务: 这是新任务的默认位置。 停滞的任务也可以在这里找到。
准备就绪:有可能进入Phorge的错误追踪器的任务。當这样做时,您必须遵循:
上游:已向上游报告的任务。对于某些任务,这可能指的是旧的上游(secure.phabricator.com 直到2021年),对于某些任务,这可能指的是当前的上游(we.phorge.it)。
已解决的上游问题:相关的上游任务已关闭,可能有相关的提交。为反映维基媒体 Phabricator 中的这一特定变更,可能仍有必要计划在维基媒体中进行升级。
上游的反馈:仍需或仍有待上游讨论。

一旦任务被发佈到上游,上游开发人员就会作出回应,提出他们的评估意见以及如何实现该功能的建议。 此时,开发人员可以开始部署。

在某些情况下,上游开发人员将决定某项功能不适合他们的计划。 在这种情况下,Wikimedia Phabricator中的任务从#phabricator-upstream项目转移到#phabricator项目,最终回到讨论阶段:这个功能是否足以维护本地补丁? 一旦决定了这一点,就可以开始著手实施。

为了增加您的代码获得批准的机会,并避免不便,请联系 Phorge 或 WMF 维护者,讨论可能的实施方案。

联系 Phorge(上游)

本地更改

如上一节所述,我们尽量减少本地补丁。 可用于维护补丁并将其与上游修改合并的资源有限。 因此,任何本地补丁都必须在 #phabricator 项目中进行讨论。 只要注意避免使用 phabricator 内核中特别新/不稳定的 API,维护 phabricator 扩展的工作量就会大大减少。 虽然扩展不需要合并和潜在的代码冲突,但每次我们拉入上游变更时,都需要对其进行测试。 Phorge 没有任何被认为可以安全依赖的冻结 API。

维基媒体 Phabricator 实例本身的当前代码:

当前本地维护的扩展有:

站点配置

大部分配置都是通过网络界面设置的。默认值(https://phabricator.wikimedia.orghttps://phabricator.wmcloud.org/ 等共享)通过傀儡操纵员Scap模板设置(参见phab:T239355)。

设置

请参阅Phabricator/Local Dev Environment

另一种设置方法是使用MediaWiki-Vagrant中的 "phabricator "角色。按照MediaWiki-Vagrant上的步骤安装 MediaWiki-Vagrant,然后使用以下命令启用 phabricator 角色

vagrant roles enable phabricator --provision

使用一個云端虛擬專用伺服器(VPS)虚拟机

如果您知道如何在云端虛擬專用伺服器(VPS)上启动虚拟机,并且拥有这样做的权限,您可以使用 `phabricator::labs` 角色创建一个实例。这将为您提供与 https://phabricator.wmcloud.org/ 相同配置的基本设置。

从Bugzilla、RT、Mingle、Trello迁移代码到 Phabricator

维基媒体用于将其Bugzilla和RT数据迁移到 Phabricator 的脚本已可用。 请注意,迁移代码并非无错误,而且它只是为维基媒体工具的特定配置而编写和使用的。 还请注意其他迁移脚本,例如,GStreamer 项目在2015年使用了 Emanuele Aina编写的 phill 脚本,将数据从Bugzilla导入Phabricator。

数据通过 phab:P129 中的脚本从 Mingle 迁移到 Phabricator。

可使用脚本将数据从 Trello 迁移到 Phabricator。 有关更多信息,请参阅phab:T821