Phabricator/Code/nl

Dit document beschrijft het ontwikkelproces van deze Wikimedia's Phabricator instantie. Phabricator is geschreven in PHP, net als like MediaWiki, dat zou het starten met het ontwikkelen moeten helpen. We kijken eerst hoe Wikimedia Phabricator gebruikt en wat we bij de ontwikkeling verwachten. Achteraf maken we dan wat opmerkingen over hoe we beginnen met de actuele ontwikkeling.



Phabricator op de Wikimedia
Wikimedia gebruikt de Phabricator met minimale aanpassingen op de upstream versie. De reden hiervoor is de grote ontwikkelingsstappen van de upstream ontwikkelaars, het onderhouden van lokale aanpassingen is lastig. De uitzonderingen zijn de extensies, die in productie in een afzonderlijke repository staan en dus regelmatig samengevoegd hoeven te worden. Alle andere wijzigingen worden dus via de upstream gedaan. Dit lijkt een beperking, maar in de praktijk reageren de upstream beheerders erg vlot op suggesties.



Wikimedia Phabricator werkschema fouten
Het is belangrijk om de levensduur van een bug te begrijpen voor aan een van de taken te beginnen. Er zijn twee projecten: #phabricator voor WMF-specifieke bugs en #phabricator-upstream voor algemene Phabricator bugs. Software bugs en uitbreidingsverzoeken vallen in de tweede categorie.

Het Phabricator-upstream werkbord toont het proces dat door taken wordt doorlopen voordat ze upstream aangemaakt worden:


 * Backlog: dit is waar standaard de taken komen te staan. Geweigerde (stalled) taken staan daar ook.
 * Need discussion: soms is een taak gebaat bij een discussie, de Wikimedianen zijn dan meer op dezelfde pagina wat dan zal zorgen voor meer en betere argumenten in het rapport / voorstel.
 * Ready to go: taken in deze kolom wachten op iemand die ze kopieert naar de upstream bug tracker.
 * Upstreamed: een taak wordt in deze kolom gezet zodra is aangegeven is dat upstream zijn.
 * Wikimedia requests: een paar verzoeken gaven aan dat iets upstream is gemaakt in naam van Wikimedia en worden dan hier voorzien van het #wikimedia tag, wij nemen aan dat deze wat meer relevant zijn.

Nadat een taak is 'upstreamed', dan geeft die ontwikkelaar hun beoordeling door met suggesties over hoe de functie moet worden geïmplementeerd. De ontwikkelaar kan nu beginnen met de implementatie.

Een ontwikkelaar kan besluiten dat een functie niet in diens plannen past. De taak in Wikimedia Phabricator wordt dan verplaatst van het #phabricator-upstream project nar het #phabricator project, het eindigt dan in de de discussie fase: is die functie belangrijk genoeg om lokale patches te blijven krijgen? Als er een beslissing valt dat dat zo is, dan zal de patch worden verplaatst naar 'Ready to go', er kan dan weer iemand met de implementatie beginnen.

Start niet alvast met de implementatie voordat duidelijk is of upstream of de WMF beheerders uw patch zullen accepteren.

Over de snelheid van doorlopen is weinig te zeggen, het hangt af of het gevoelig ligt of onduidelijk is (de tijd in de kolom 'Need Discussion'), de prioriteit en van degene die de kar trekt. Dit is een opt-in proces bedoeld voor het controleren van de aimed to check the toepasbaarheid en relevantie van een taak voordat het upstream gemaakt wordt. Iedereen met rechten in upstream kan daar taken aanmaken en dit proces overslaan, lees echter voordat u dat doet wel Introductie bijdrage geven in Phabricator, Arcanist en libphutil.



Lokale aanpassingen
Zoals eerder aangegeven proberen we de lokale patches tot een minimum te beperken. Er zijn beperkte bronnen beschikbaar om patches te onderhouden en ze samen te voegen met wijzigingen van upstream. Daarom moeten alle lokale patches eerst besproken worden in het project #phabricator. Het onderhouden van een phabricator extensie is veel minder werk,als tenminste het gebruik van nieuwe of onstabiele API's van de Phabricator's core wordt voorkomen. Ook al is er bij extensies geen spraken van het samenvoegen van code en mogelijke code conflicten, er is natuurlijk wel elke keer testen nodig bij wijzigingen in de upstream. Phabricator heeft geen 'bevroren' API's waar je dus veilig van afhankelijk kan zijn omdat er geen aanpassingen meer aan worden gedaan. Op ht moment zijn er geen modificaties in de phabricator core, behalve de wijziging van het favicon.ico zodat het Wikimedia kleuren gebruikt.

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.



Website configuratie
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.



Instellen
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!



Cloud VPS VM gebruiken
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.



Migratie code van Bugzilla, RT, Mingle, Trello naar 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.