User:Karima Rafes/Comment Hacker MediaWiki?

Cette page est un pense bête sur la méthode qu'utilise les développeurs de MediaWiki pour modifier et tester le logiciel MediaWiki.

Environnement de tests
Ce sont les tests qui orientent les développements donc il faut commencer par avoir un environnement permettant de tester ses propres modifications avant de le pousser dans Git.

Installations
Je ne sais pas exactement la raison du choix de tel ou tel technologie mais voici ce qu'il faut installer.

Serveur virtuel : MediaWiki-Vagrant
Les équipes MédiaWiki ont fabriqué un serveur virtuel qui peut fonctionner sur le poste des développeurs. Il contient un serveur Apache, MySql, la dernier version de Mediawiki et les connecteurs permettant l'utilisation d'outils de développement.


 * 1) Installer VirtualBox (doc 5.1 avec Fedora 24 ou encore sur Fedora : doc en Français)
 * 2) Installer Vagrant
 * 3) Récupérer le code et lancer le serveur virtuel :

Si vous lancez maintenant, vous aurez probablement une erreur au moment où du montage "Mounting NFS shared folders...". C'est un blocage de SELinux (regarder les erreurs dans le log) et du firewall. Pour Fedora 24, il faut :
 * Choisir "Configuration: Permanent"
 * Zone : Interne
 * Activer les services "mountd", "nfs" et "rpc-bind"
 * Ajouter Port 2049 UDP (nécessaire ?)
 * dans Option faire recharger les paramétres

Normalement, ensuite cette commande doit fonctionner.

La première fois, le serveur prend plusieurs minutes pour démarrer mais la second fois, cela ne prend que quelques secondes.

Pour terminer l'installation, il faut lancer le terminal ssh (il n'y a pas de mot de passe) et demander de mettre à jour le serveur:



Pour quitter la console ssh faire :. Ensuite, dans le fichier  il faudra modifier la ligne   par cette ligne. Pour finir, il faut mettre à jour le serveur avec la commande.

Le code est localisé dans  et les tests dans

Certain des scénarios sont précédés du mot "@login". Cela signifie que le scénario va avoir besoin d'un compte sur le Wiki pour passer ce scénario. Suivez les étapes suivantes pour le configurer :
 * 1) créer dans le Wiki de Vagrant (http://127.0.0.1:8080/wiki/) le compte "Selenium user" avec le mot de passe "vagrant"
 * 2) créer le fichier  config/secret.yml et insérer le texte suivant

Pour indiquer à la machine virtuelle où effectuer les tests, il faut initialiser la variable d'environnement MEDIAWIKI_URL et donc utiliser par exemple la commande  ou encore sur votre wiki en local.

En bref pour lancer les tests, voici les commandes :

Le rapport des tests est dans le répertoire

Le navigateur par défaut est Firefox (pour changer de navigateur c'est dans ce fichier /features/support/env.rb).

Pour plus d'infos voir :
 * Browser testing at WMF
 * Quality Assurance/Browser testing/Running and writing tests

Automate de tests : qa-browsertests pour vos tests
Pour rajouter vos tests, vous devrez installer le browsertests en local, voici ce qu'il faut faire :

Il est conseillé de lire le fichier README.md pour configurer ruby. Si vous voulez rajouter des gem, il faut le mettre dans le fichier Gemfile, ensuite refaire  et pour finir mettre le "require" dans le fichier env.rb.

Je vous conseille de fabriquer un script permettant de configurer l'environnement d’exécution de ce programme. Ce script contiendra l'adresse du Wiki à tester et la commande d’exécution du programme pour lancer tous les tests:

Ou un seul fichier de tests :

Installer une nouvelle extension dans Vagrant
Pour rajouter une extension, il faut rajouter son rôle dans le puppet.

Par exemple, pour installer l'extension LinkedWiki dans le wiki, il faut rajouter dans le fichier  :

Puis rajouter dans le fichier vagrant/puppet/manifests/roles.pp :

Pour finir, il faut exécuter la commande :

Si on avait supprimé un rôle du fichier site.pp, on aurait exécuté les commandes suivantes :

jenkins
integration/jenkins-job-builder-config repo

https://gerrit.wikimedia.org/r/#/c/72333/

Mediawiki
Vagrant se met à jour automatiquement mais il ne met pas à jour MediaWiki. Il vous faudra faire les commandes suivantes :

Faire une évolution
Il faut lire la page Gerrit/Tutorial au moins une fois (je sais c'est dur) Ensuite voici ce qu'il faut retenir.

Pour chaque évolution, il faut créer avant une branche et ne jamais bosser sur la branche master mais avant il faut être certain d'être sur la dernière version.

Mise à jour du master :

Créer une nouvelle branche (avec un nom correcte car elle s'affichera ensuite dans les logs de l'IRC de Mediawiki) :

Vous pouvez vérifier avec la commande  que vous avez changé de branche.

Vous pouvez ensuite faire vos modifications et lancer les tests localement sur Vagrant.

est la commande que vous devez déjà savoir lire sinon je vous conseille de relire la doc de Gerrit. permet de voir les modifications qui ne sont pas encore ajouter à cette évolution et  affiche les modifications qui seront prises en compte.

Ajouter vos modifications à la futur évolution :

J'utilise l'option -i car cela permet d'avoir une petite interface interactive. On termine avec un  pour vérifier que l'on a oublié aucun fichier.

Ajouter vos modifications à votre dépôt local :

Remettre à jour vos fichiers dans votre branche:

Proposer vos évolutions dans Gerrit :

Vous pourrez alors voir le lien qui pointe sur la page vous permettant d'évaluer cette évolution (et le bouton "submit" si vous êtes le responsable de ce projet).

Retourner sur la branche master et la mettre à jour :

Pour finir supprimer la branche temporaire :

Faire un patch
Un patch est une correction dans une évolution proposée. Cela évite de recréer des branches à chaque correction.

Créer la branche pour rapatrier l'évolution : Le numéro est celui contenu dans le lien de l'évolution dans Gerrir. Par exemple : l'évolution 72326 a le lien https://gerrit.wikimedia.org/r/#/c/72326/

Ensuite c'est comme d'habitude où vous devrez utiliser la commande  pour ajouter vos modifications.

Ajouter votre patch à votre dépôt local :

Proposer votre patch dans Gerrit :

Versions de téléchargement
Mettre à jour d'autres branches de Gerrit : http://stackoverflow.com/questions/12840279/how-to-merge-the-gerrit-branch-to-another-gerrit-branch

Javascript
Manual:Coding conventions/JavaScript