Phabricator/Code/hi

इस दस्तावेज़ में विकिमीडिया के Phabricator उदाहरण के विकास की प्रक्रिया दर्शाई गई है। Phabricator को मीडियाविकि की तरह PHP में लिखा गया है, जिससे विकास में शुरुआत करने में मदद मिल सकती है। इस दस्तावेज़ में हम पहले देखेंगे कि विकिमीडिया पर Phabricator का इस्तेमाल कैसे किया जाता है, और विकास के दौरान किन चीज़ों की अपेक्षा करनी चाहिए। बाद में, कुछ टिप्पणियाँ दी गई हैं कि विकास में शुरुआत कैसे करना है।



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



विकिमीडिया Phabricator पर बग की कार्यप्रवाह
कोई टास्क पूरा करने का फैसला लेने से पहले बग का जीवनचक्र जान लेना अच्छा है। दो परियोजनाएँ हैं: WMF-विशिष्ट बग्स के लिए #phabricator और साधारण Phabricator बग्स के लिए #phabricator-upstream। सॉफ़्टवेयर के बग्स और सुधार के अनुरोध आम तौर पर इस श्रेणी में आएँगे।

Phabricator-अपस्ट्रीम कार्यपटल पर वह प्रक्रिया दर्शाई गई जिसके ज़रिए टास्क्स अपस्ट्रीम बनाए जाने से पहले गुज़रते हैं:


 * बैकलॉग: यह वह जगह है जहाँ नए टास्क्स को डिफ़ॉल्ट से रखा जाता है। यहाँ लंबित टास्क्स भी पाए जा सकते हैं।
 * चर्चा की ज़रूरत है: कभी-कभी किसी टास्क्स को एक चर्चा से फ़ायदा हो सकता है, जिससे सुनिश्चित करना संभव होगा कि ज़्यादा विकिमीडिया योगदानकर्ताएँ एक ही पक्ष में हैं, और यह कि रिपोर्ट या सुझाव के लिए ठोस तर्क हैं।
 * तैयार: इस कॉलम में टास्क्स का यह इंतज़ार है कि कोई अपस्ट्रीम बग ट्रैकर में उनकी प्रतिलिपि बनाएगा।
 * अपस्ट्रीम किया गया: यह कॉलम वह जगह है जहाँ टास्क्स को अपस्ट्रीम रिपोर्ट की जाने पर लाया जाता है।
 * विकिमीडिया के अनुरोध: अपस्ट्रीम रिपोर्ट किए गए कुछ टास्क्स को विकिमीडिया के नाम पर लाकर #wikimedia टैग से चिह्नित कर दिया जाता है, क्योंकि हमें लगता है कि ये ज़्यादा प्रासंगिक हैं।

जब किसी टास्क को अपस्ट्रीम बना दिया गया हो, अपस्ट्रीम विकासक अपना विवेचन भेजते हैं, और इस बात पर सुझाव कि सुविधा को कैसे लागू किया जाना चाहिए। अब विकासक कार्यान्वयन पर शुरुआत कर सकता है।

कुछ मामलों में अपस्ट्रीम विकासक को यह लग सकता है कि सुविधा उनकी योजनाओं से मेल नहीं खाती। अगर ऐसा होता है, विकिमीडिया Phabricator में टास्क को #phabricator-upstream परियोजना से #phabricator परियोजना में ले जाया जाता है, और यह वापस चर्चा के स्तर पर आ जाता है: क्या यह सुविधा लोकल पैच रखने जितनी ज़रूरी है? जब इसका फैसला ले लिया जाए, पैच 'तैयार' पर चला जाएगा और दोबारा कार्यान्वयन की शुरुआत की जा सकती है।

निराशा को रोकने के लिए कृपया कार्यान्वयन पर तब तक शुरुआत न करें जब तक यह स्पष्ट न हो कि या तो अपस्ट्रीम या फिर WMF के अनुरक्षक आपके पैच को स्वीकार करेंगे।

किसी टास्क को कितनी जल्दी अपस्ट्रीम चिह्नित किया जाता है, यह इस बात से पता लगाया जाएगा कि यह कितनी अविवादित ('चर्चा की ज़रूरत है' कॉलम से गुज़रते समय) है और इसकी प्राथमिकता कितनी है, मगर यह आखिर में इसी बात पर निर्भर होगा कि इसे कौन कितनी जल्दी अपस्ट्रीम रिपोर्ट करता है। यह एक वैकल्पिक प्रक्रिया है जिससे टास्क को अपस्ट्रीम बनाए जाने से पहले उसकी औचित्य को जाँचा जाता है। अनुमतियों वाला कोई भी सदस्य इस प्रक्रिया को बाइपास करते हुए अपस्ट्रीम टास्क्स बना सकता है, मगर एक अपस्ट्रीम टास्क प्रस्तुत करने से पहले कृपया Phabricator, Arcanist और libphutil पर योगदान का परिचय पढ़ें।



लोकल बदलाव
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 does not have any frozen APIs which are deemed safe to depend on. At this time we have virtually no modifications to the phabricator core, except for changing the favicon.ico to use Wikimedia colors.

The current code of the Wikimedia Phabricator instance itself:


 * phabricator/phabricator
 * phabricator/arcanist
 * phabricator/libphutil

The current locally-maintained extensions are:


 * Several customizations in one code repository, such as the MediaWiki OAuth extension (not upstreamed; see the Differential revisions and commits at https://secure.phabricator.com/T5096), Security related code, the MediaWiki Userpage field on Phabricator user pages, etc.

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

http://phabricator.local.wmftest.net:8080/
 * Access the Phabricator instance at URL:
 * 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 Cloud VPS VM
If you know how to spin up a VM on Cloud VPS, 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.