Un Makefile est un fichier contenant des rules, (des fonctions) permettant d’exécuter une suite d'action. Beaucoup utilisé dans les langages compilés pour permettre de gérer la compilation d'un programme, c'est aussi utilisable dans le cadre d'un projet php.
J'ai découvert les Makefile après avoir commencé à utiliser docker pour mes projets web.
Quand on utilise docker pour le php les binaires php (drush, composer, drupal-console...) sont à exécuter dans le container php et non pas sur notre machine hôte.
Ce qui donne des commandes ressemblant à :
docker-compose exec php drush crdocker-compose exec php composer install
au lieu de simples
drush crcomposer install
ça n'est pas la mort, mais un développeur est feignant.
L'ensemble d'images docker docker4drupal propose un Makefile avec des rules permettant d’exécuter drush ou composer plus simplement :
make drush crmake composer install
C'est très pratique, mais on peut aller encore plus loin et écrire nos propres rules en les ajoutant à la suite du fichier. Voici par exemple une rules pour supprimer la base de données et la recréer :
## db-empty : drop and recreate database.PHONY: db-emptydb-empty: @docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "DROP DATABASE IF EXISTS $(DB_NAME)" @echo Database $(DB_NAME) dropped @docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "CREATE DATABASE $(DB_NAME)"
Un autre exemple pour afficher en continu le contenu du fichier drupal_debug.txt (voir : Drupal - Découvrez la fonction ddm, pour débuguer même en aveugle) :
## dd-tail : show the tail of drupal-debug.txt file.PHONY: dd-taildd-tail: tail -f $(LOCAL_TMP_PATH)/drupal_debug.txt
Vous voyez ici l'utilisation de variables, comme $(DB_HOST) qui sont définies dans le fichier .env :
Image
À force d'ajouter des rules au fur et a mesure, j'ai finis par en avoir pas mal. J'ai fais un petit boulot de généralisation et tout est maintenant sur un dépôt github : https://github.com/kgaut/drupal-makefile.
L'installation est relativement rapide est simple :
Ajoutez le package à vos dépendances
composer require kgaut/drupal-makefile
Modifiez votre fichier .env et ajoutez les variables nécessaires présentées ici : https://github.com/kgaut/drupal-makefile/blob/master/.env.example
Si vous n'avez pas d'environnement de prod ou de preprod, vous pouvez supprimer les variables correspondantes ou bien les garder pour plus tard.
Enfin, il faudra lier ce nouveau fichier makefile à votre fichier makefile principal, à la racine de votre projet, en ajoutant après la ligne include .env, la ligne suivante :
include vendor/kgaut/drupal-makefile/drupal.mk
Les différentes rules sont présentées ici : https://github.com/kgaut/drupal-makefile#availables-rules
Une que j'utilise régulièrement est : db-prod-import qui fait en fait appel à plein d'autres rules :
Suppression de la base de données local et récréation (via db-empty)
Récupération du dump de base de données le plus récent en prod (via db-prod-get)
Import de ce dump en local (db-import)
Vidage des cache, mises à jour de base de données, import de la configuration et affiche un lien de connexion en tant qu'utilisateur 1 (via db-post-import)
Évidement tout ça est très lié à mon organisation de projet, mais vous pouvez certainement en récupérer des idées ou de l'inspiration.
N'hésitez-pas à suggérer des modifications ou des améliorations !