User:Karima Rafes/Comment Hacker MediaWiki?

From mediawiki.org

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 (OBSOLETE)[edit]

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[edit]

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[edit]

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 :
$ git clone --recursive --depth=1  https://gerrit.wikimedia.org/r/mediawiki/vagrant
$ cd vagrant
$ ./setup.sh
$ firewall-config

Si vous lancez maintenant vagrant up, 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.

$ vagrant up

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:

$ vagrant ssh
$ update-guest-additions
Le terminal ssh permet d'utiliser des outils comme phpsh qui permet de tester des lignes PHP qui utiliseront les lib MediaWiki.

Pour quitter la console ssh faire : logout (ou exit)
Pour stopper l'instance vagrant : vagrant halt

Si on demande un mot de passe se sera toujours vagrant. Par exemple, le mot de passe du compte admin du Wiki sera `admin` / `vagrant`.

Pour plus de détails voir : MediaWiki-Vagrant/Installation details

Automate de tests : qa-browsertests pour les tests de MediaWiki[edit]

Les équipes de développement utilisent des outils comme Selenium et autres pour automatiser les tests.

Ils ont donc conçu un puppet "qa-browsertests" permettant de l'installer au sein du serveur virtuel Vagrant.

Pour l'installer, il faut démarrer le serveur avec la commande vagrant up. Ensuite, dans le fichier vagrant/Roles.yaml il faudra modifier la ligne # - role::browsertests par cette ligne - role::browsertests . Pour finir, il faut mettre à jour le serveur avec la commande vagrant provision.

Le code est localisé dans /srv/browsertests et les tests dans /srv/browsertests/features

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 mediawiki_password: vagrant

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 export MEDIAWIKI_URL=http://en.wikipedia.beta.wmflabs.org/wiki/ ou encore sur votre wiki en local export MEDIAWIKI_URL=http://127.0.0.1:8080/wiki/.

En bref pour lancer les tests, voici les commandes :

$ cd vagrant
$ vagrant up
(modifier le fichier Roles.yaml)
$ vagrant provision
$ vagrant ssh -- -X
$ cd /srv/browsertests
$ export MEDIAWIKI_URL=http://127.0.0.1:8080/wiki/
$ bundle exec rake

Le rapport des tests est dans le répertoire /srv/browsertests/reports

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 :

Automate de tests : qa-browsertests pour vos tests[edit]

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

$ git clone ssh://<username>@gerrit.wikimedia.org:29418/qa/browsertests 
# ou bien : git clone  https://github.com/wikimedia/qa-browsertests.git 
$ \curl -L https://get.rvm.io | bash -s stable --ruby  --auto-dotfiles
$ cd browsertests
$ gem update --system
$ gem install bundler
$ bundle install

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 bundle install 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:

cd browsertests
export MEDIAWIKI_URL=http://127.0.0.1:8080/wiki/
bundle exec rake

Ou un seul fichier de tests :

cd /srv/browsertests
export MEDIAWIKI_URL=http://127.0.0.1:8080/wiki/
bundle exec cucumber features/wikilove.feature

Installer une nouvelle extension dans Vagrant[edit]

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 vagrant/Roles.yaml :

 - role::linkedwiki

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

# == Class: role::linkedwiki
class role::linkedwiki {
        package { 'php5-curl': }

	include role::mediawiki

	@mediawiki::extension { 'LinkedWiki': }
}

Pour finir, il faut exécuter la commande :

$ vagrant provision

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

$ vagrant destroy
$ vagrant up

jenkins[edit]

integration/jenkins-job-builder-config repo

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

Mise à jour[edit]

Mediawiki[edit]

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

$ cd vagrant/mediawiki
$ git pull
$ "/usr/bin/php" "/home/.../opt/composer.phar" update
$ cd ..
$ vagrant ssh
$ php /vagrant/mediawiki/maintenance/update.php

Fabriquer un nouveau test[edit]

...[edit]

Lancer le test[edit]

cd ~/git/browsertests
export MEDIAWIKI_URL=http://127.0.0.1:8080/wiki/
bundle exec cucumber features/foo.feature

Développement[edit]

Installation de git-review[edit]

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

Savoir utiliser ssh-agent[edit]

Si vous avez eu la bonne idée de mettre une phrase pour sécuriser votre clé, vous allez vite comprendre que ces deux lignes sont indispensables pour éviter de ré-écrire en permanence cette phrase.

eval `ssh-agent`
ssh-add ~/.ssh/id_rsa

Faire une évolution[edit]

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 :

git pull origin master

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

git checkout -b BRANCHNAME master

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

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

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

Ajouter vos modifications à la futur évolution :

git add -i

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

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

git commit

Voir les commits en attente du dépôt local :

git log --branches --not --remotes

Remettre à jour vos fichiers dans votre branche:

git pull origin master
git rebase master

Proposer vos évolutions dans Gerrit :

git review -R

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 :

git checkout master
git pull origin master
git remote update

Pour finir supprimer la branche temporaire :

git branch -d BRANCHNAME

Faire un patch[edit]

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 :

git review -d <change number>

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 git add -i pour ajouter vos modifications.

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

git commit --amend

Proposer votre patch dans Gerrit :

git review -R

Versions de téléchargement[edit]

Il faut désactiver dans Gerrit "Reject implicit merges when changes are pushed for review".

Mettre à jour d'autres branches de Gerrit avec master :

git checkout --track origin/REL1_33
git merge master
git commit --amend
git review -R

Signaler un bug[edit]

Corriger un bug[edit]

Qualité du code[edit]

Javascript[edit]

Manual:Coding conventions/JavaScript