Phabricator/Code/hi

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



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



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

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


 * बैकलॉग: यह वह जगह है जहाँ नए टास्क्स को डिफ़ॉल्ट से रखा जाता है। यहाँ लंबित टास्क्स भी पाए जा सकते हैं।
 * तैयार: इस कॉलम में टास्क्स का यह इंतज़ार है कि कोई अपस्ट्रीम बग ट्रैकर में उनकी प्रतिलिपि बनाएगा।
 * अपस्ट्रीम किया गया: यह कॉलम वह जगह है जहाँ टास्क्स को अपस्ट्रीम रिपोर्ट की जाने पर लाया जाता है।
 * Solved upstream
 * Feedback from Upstream

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

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

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



लोकल बदलाव
जैसा पिछले अनुभाग में बताया गया है, हम लोकल पैचेस को न्यूनतम मात्रा में रखने की कोशिश करते हैं। पैचेस अनुरक्षित करने और उन्हें अपस्ट्रीम के बदलावों से मर्ज करने के लिए ज़्यादा संसाधन उपलब्ध नहीं हैं। इसलिए किसी भी लोकल पैच के बारे में सबसे पहले #phabricator परियोजना पर चर्चा की जानी चाहिए। किसी Phabricator एक्सटेंशन को अनुरक्षित करना काफ़ी आसान हो जाता है अगर Phabricator के मूल से नए / अस्थिर API-ओं का इस्तेमाल न किया जाए। हालाँकि एक्सटेंशनों को मर्ज करने की ज़रूरत नहीं जिससे उनमें कोड के टकराव नहीं आते, उन्हें हर बार अपस्ट्रीम बदलावों से पुल करने पर परीक्षण की ज़रूरत होती है। Phabricator पर कोई स्थगित API में है जिसपर निर्भर रहना सुरक्षित समझा जाए। The current code of the Wikimedia Phabricator instance itself:
 * https://gitlab.wikimedia.org/repos/phabricator/phabricator
 * https://gitlab.wikimedia.org/repos/phabricator/arcanist

वर्तमान में लोकल रूप से अनुरक्षित एक्सटेंशन्स हैं:


 * [|एक ही रिपॉज़िटरी पर कई अनुकूलन], जैसे मीडियाविकि OAuth एक्सटेंशन (अपस्ट्रीम नहीं किया जाता है; https://secure.phabricator.com/T5096 पर Differential revisions and commits देखें), सुरक्षा-संबंधित कोड, और Phabricator सदस्य पृष्ठों पर MediaWiki Userpage फ़ील्ड, आदि।
 * Antivandalism, still in Gerrit and to be moved to GitLab.



साइट का कॉन्फ़िगरेशन
ज़्यादातर कॉन्फ़िगरेशन को वेब इंटरफ़ेस के ज़रिए सेट किया जाता है। डिफ़ॉल्ट्स (https://phabricator.wikimedia.org और उदाहरणस्वरूप https://phab.wmflabs.org के बीच साँझित) को पपेट Maniphest की मदद से सेट किया जाता है।



सेटअप करना
See Phabricator/Local Dev Environment.

सेटअप करने का सबसे आसान तरीका है 'phabricator' रोल की मदद से MediaWiki-Vagrant का इस्तेमाल करना। MediaWiki-Vagrant पर चरणों का पालन करें, और इसकी मदद से phabricator रोल सक्षम करें:


 * इस URL पर Phabricator उदाहरण पर जाएँ: http://phabricator.local.wmftest.net:8080/
 * Phabricator स्थापना VM के `/srv/phabricator/` (?) में मौजूद है। पैच सम्पादित और प्रस्तुत करने के लिए:



क्लाउड VPS VM का इस्तेमाल करना
अगर आपको पता है कि क्लाउड VPS में VM का इस्तेमाल कैसे करना है, और आपके पास ऐसा करने का अधिकार है, आप `phabricator::labs` रोल के साथ एक उदाहरण बना सकते हैं। इससे आपको https://phab.wmflabs.org की तरह कॉन्फ़िगरेशन के साथ एक सेटअप मिल जाएगा।



Bugzilla, RT, Mingle, Trello से Phabricator पर कोड माइग्रेट करना
विकिमीडिया द्वारा अपनी Bugzilla और RT डेटा को माइग्रेट करने के लिए उपयुक्त स्क्रिप्ट्स उपलब्ध हैं। ध्यान रखें कि माइग्रेशन के कोड में बग्स हो सकती हैं, और इसे सिर्फ विकिमीडिया के उपकरणों के कॉन्फ़िगरेशन्स के लिए लिखा गया था। और दूसरे माइग्रेशन स्क्रिप्ट्स पर भी गौर करें, उदाहरणस्वरूप GStreamer परियोजना ने 2015 में अपनी डेटा को Bugzilla से Phabricator पर लाने के लिए Emanuele Aina द्वारा एक फ़िल स्क्रिप्ट का इस्तेमाल किया।

डेटा को P129 पर उपलब्ध एक स्क्रिप्ट की मदद से Mingle से Phabricator पर माइग्रेट किया गया था।

Trello से Phabricator पर डेटा को माइग्रेट करने के लिए स्क्रिप्ट्स उपलब्ध हैं। अधिक जानकारी के लिए T821 देखें।