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 पर योगदान का परिचय पढ़ें।



लोकल बदलाव
जैसा पिछले अनुभाग में बताया गया है, हम लोकल पैचेस को न्यूनतम मात्रा में रखने की कोशिश करते हैं। पैचेस अनुरक्षित करने और उन्हें अपस्ट्रीम के बदलावों से मर्ज करने के लिए ज़्यादा संसाधन उपलब्ध नहीं हैं। इसलिए किसी भी लोकल पैच के बारे में सबसे पहले #phabricator परियोजना पर चर्चा की जानी चाहिए। किसी Phabricator एक्सटेंशन को अनुरक्षित करना काफ़ी आसान हो जाता है अगर Phabricator के मूल से नए / अस्थिर API-ओं का इस्तेमाल न किया जाए। हालाँकि एक्सटेंशनों को मर्ज करने की ज़रूरत नहीं जिससे उनमें कोड के टकराव नहीं आते, उन्हें हर बार अपस्ट्रीम बदलावों से पुल करने पर परीक्षण की ज़रूरत होती है। Phabricator पर कोई स्थगित API में है जिसपर निर्भर रहना सुरक्षित समझा जाए। इस समय हमने Phabricator के मूल पर ज़्यादातर कोई बदलाव नहीं किया है, सिवाय favicon.ico को बदलकर विकिमीडिया के रंगों में लाने के।

The current code of the Wikimedia Phabricator instance itself:


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

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


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



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



सेटअप करना
सेटअप करने का सबसे आसान तरीका है '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 देखें।