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 (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.
- Installer VirtualBox (doc 5.1 avec Fedora 24 ou encore sur Fedora : doc en Français)
- Installer Vagrant
- 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
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 :
- créer dans le Wiki de Vagrant (http://127.0.0.1:8080/wiki/) le compte "Selenium user" avec le mot de passe "vagrant"
- 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