Phabricator/Code/hi

This document describes the development process for Wikimedia's Phabricator instance. Phabricator is written in PHP, just like MediaWiki, which should help in getting started with development. In this document, we will first take a look at how Wikimedia is using Phabricator, and what to expect during development. Afterwards, there are a few notes on how to get started with the actual development.

विकिमीडिया पर फ़ैब्रिकेटर
विकीमीडिया अपस्ट्रीम से न्यूनतम परिवर्तन के साथ एक फ़ैब्रिकेटर इंस्टेंस का उपयोग करता है। इसका कारण अपस्ट्रीम डेवलपर्स की उच्च विकास गति है - स्थानीय पैच बनाए रखना बोझिल है। इसके अपवाद 'एक्सटेंशन' हैं, जो एक अलग निर्देशिका में रहते हैं और इस प्रकार नियमित विलय की आवश्यकता नहीं होती है। इस प्रकार किसी अन्य बदलाव को अपस्ट्रीम से गुज़रना पड़ता है। यह एक बड़ी बाधा की तरह लगता है, लेकिन व्यवहार में, अपस्ट्रीम रखरखाव सुझावों का जवाब देने में बहुत तत्पर हैं।

विकिमीडिया फ़ैब्रिकेटर बग वर्कफ़्लो
कार्यों में से किसी एक को लेने से पहले एक बग के जीवन चक्र को समझना सहायक होता है। दो परियोजनाएं हैं: #phabricator for WMF-specific bugs and #phabricator-upstream for general Phabricator bugs. Software bugs and enhancement requests will typically fall in this second category.

फ़ैब्रिकेटर-अपस्ट्रीम वर्कबोर्ड उस प्रक्रिया को दिखाता है जो कार्य को अपस्ट्रीम बनाने से पहले जाता है:

एक बार एक कार्य अपस्ट्रीम हो जाने के बाद, अपस्ट्रीम डेवलपर्स उनके मूल्यांकन के साथ प्रतिक्रिया देते हैं, और सुझाव कैसे लागू किया जाना चाहिए इसके सुझाव। इस बिंदु पर एक डेवलपर कार्यान्वयन के साथ शुरू कर सकते हैं।
 * बैकलॉग: यह वह जगह है जहां नए कार्य डिफ़ॉल्ट रूप से जमीन पर आते हैं। यहां तक ​​कि स्थगित कार्य भी मिल सकते हैं।
 * चर्चा की ज़रूरत है: कभी-कभी किसी कार्य को एक चर्चा से फायदा होगा, यह सुनिश्चित कर लें कि अधिक विकिमीडिया योगदानकर्ता एक ही पृष्ठ पर हैं और रिपोर्ट या प्रस्ताव अच्छी तरह से तर्क दिया गया है।
 * Ready to go: tasks in this column are waiting for someone to copy them to the upstream bug tracker.
 * अपस्ट्रीम: यह कॉलम वह जगह है जहां कार्य को अपस्ट्रीम की सूचना दी जाती है।
 * Wikimedia requests: a few requests reported upstream are made in the name of Wikimedia and get marked with the #wikimedia tag, because we consider that they have a higher relevance.

कुछ मामलों में, अपस्ट्रीम डेवलपर्स तय करेंगे कि एक सुविधा उनकी योजनाओं में फिट नहीं है। In this case, the task in Wikimedia Phabricator is moved from the #phabricator-upstream project to the #phabricator project, and ends up back into the discussion stage: is this feature important enough to maintain local patches? एक बार यह निर्णय लेने के बाद, पैच 'तैयार करने के लिए तैयार' हो जाएगा, और कोई कार्यान्वयन के साथ शुरू कर सकता है।

निराशा को रोकने के लिए, कृपया कार्यान्वयन के साथ शुरू न करें जब तक कि यह ऊपर की ओर स्पष्ट न हो या डब्लूएमएफ रखरखाव आपके पैच को स्वीकार करे।

How fast a task is reported upstream may depend of how uncontroversial is (going through the Need Discussion column) and how high is its priority, but it ultimately depends on who takes the time to report it upstream.

This is an opt-in process aimed to check the appropriateness and relevance of a task before being created upstream. Anyone with permissions in upstream can create tasks upstream bypassing this process, however, before submitting an upstream task, please read Introduction to contributing to Phabricator, Arcanist and libphutil.

Anyone can discuss upstream bugs and features in https://discourse.phabricator-community.org/ - see https://discourse.phabricator-community.org/t/guide-reporting-a-bug/938 and https://secure.phabricator.com/book/phabcontrib/article/feature_requests/ for more information.

Local changes
As mentioned in the previous section, we try to keep local patches to a minimum. There are limited resources available to maintain patches, and to merge them with changes from upstream. Any local patches therefore have to be discussed within the #phabricator project. It's significantly less work to maintain a phabricator extension, as long as care is taken in avoiding the use of particularly new / unstable APIs from phabricator's core. Although extensions don't require merging and potential code conflicts, they do require testing each time we pull in upstream changes. Phabricator is a very fast moving project and they don't have any frozen APIs which are deemed safe to depend on. At this time we have virtually no modifications to the phabricator core, with the exception of changing the favicon.ico to use Wikimedia colors.

The current locally-maintained extensions are:
 * The MediaWiki OAuth extension (Not upstreamed; see the Differential revisions and commits at https://secure.phabricator.com/T5096).
 * Security extension (Wikimedia's specific development while upstream implements their solution for private projects).
 * MediaWiki Userpage field
 * Sprint extension

There is also a set of custom scripts to generate Phabricator-derived visual reports. They are not part of the Wikimedia Phabricator production codebase. See Phlogiston for more information.

Site configuration
Most of the configuration is set through the web interface. Defaults (shared between https://phabricator.wikimedia.org and e.g. https://phab.wmflabs.org) are set using the puppet maniphest.

Setting up
The easiest way to get set up is by using MediaWiki-Vagrant using the 'phabricator' role. Follow the steps on MediaWiki-Vagrant to install MediaWiki-Vagrant, then enable the phabricator role using


 * The Phabricator install is located in `/srv/phabricator/` (?) on the VM. To edit and submit a patch:

Congratulations, you have submitted your first patch!

Using a Labs VM
If you know how to spin up a VM on Labs, and have the rights to do so, you can create an instance with the `phabricator::labs` role. This should give you a basic setup with the same configuration as https://phab.wmflabs.org.

Migration code from Bugzilla, RT, Mingle, Trello to Phabricator
The scripts that Wikimedia used for migrating its Bugzilla and RT data to Phabricator are available. Note that the migration code is not bug-free and that it was only written and used for the specific configurations of Wikimedia's tools. Also note other migration scripts, e.g. the GStreamer project used a phill script by Emanuele Aina to import their data from Bugzilla into Phabricator in 2015.

Data was migrated from Mingle to Phabricator via a script available in P129.

The scripts to migrate data from Trello to Phabricator are available. See T821 for more information.