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