Web

Mettre à jour son projet Composer et envisager sereinement la montée de version à Drupal 9

by Romain Dalverny 5 janvier 2021

Ces dernières semaines, des failles « critiques » ont été découvertes dans le core de Drupal (on en profite pour remercier l’équipe de sécurité Drupal qui s’occupe du suivi des bogues et met à disposition des mises à jour rapidement). Personnellement, j’ai dû mettre à jour deux sites qui n’ont pas eu l’occasion d’avoir un suivi régulier. J’ai trouvé une multitude d’articles au sein de la communauté qui m’ont permis d’effectuer ces montées de version sans douleur. Je vous propose ici de regrouper ces informations. 

Je pars du principe que vous connaissez Composer et que votre projet est déjà en place avec lui. 

Dans un premier temps, si ce n’est pas déjà fait, nous allons passer notre projet Composer vers drupal/core-recommended et nous mettrons à jour nos fichiers du Core. Dans un second temps, nous monterons la version de nos modules contribués. Puis, je vais vous parler de plusieurs plugins Composer qui sont utiles à Kaliop avec Drupal. Nous terminerons par le passage vers Drupal 9.  

Migrer son projet Composer vers 8.8.0 et mettre à jour le core de Drupal 

Avant la version 8.8.0 de core de Drupal, nous utilisions dans Composer la combinaison des packages “webflo/drupal-core-strict » et “drupal/core”. Depuis, un nouveau template Composer pour Drupal est sorti. Il se nomme “drupal/core-recommended”. Il permet une sécurisation des dépendances du core de Drupal. C’est-à-dire que la version de Drupal que vous utilisez actuellement utilise exactement les mêmes versions de dépendances (Symfony, Guzzle, Twig, Laminas,…) testées pour le développement de votre version de Drupal. 

Comment savoir si vous l’utilisez déjà ? En lançant tout simplement cette commande :  

composer show drupal/core-recommended 

Si des informations vous sont retournées sur le package, c’est que vous êtes à jour et vous pouvez passer au chapitre suivant. Sinon, voici une procédure à suivre, bien qu’elle doive être adaptée à chaque projet. 

Pour commencer nous allons supprimer les packages que nous n’allons plus utiliser :

composer remove drupal-composer/drupal-scaffold
composer remove drupal/core
composer remove webflo/drupal-core-strict
composer remove webflo/drupal-core-require-dev

Ensuite, nous allons ajouter les nouvelles dépendances dont nous avons besoin. Durant l’ajout de ces nouvelles dépendances, je me suis retrouvé avec de nombreux conflits de versions. Si ce problème vous arrive, voici ce que je vous préconise :

  • Soit de mettre à jour les modules contribués existants en amont. Mais il y a un risque d’anomalies sur ces modules en fonction des retards pris dans leur monté de version.
  • Soit l’option que je vous recommande, mais qui est plus lourde à mettre en place. Elle consiste à fixer la version de l’ensemble des modules contribués. Une fois cela fait, on enlève l’ensemble des require drupal/{module} et on garde ces lignes dans un fichier à part. On doit se retrouver avec un “require” qui ne contient plus de dépendance commençant par “drupal/*”. Voici la liste de commandes à lancer :
composer update 
composer require drupal/core-composer-scaffold "version" 
composer require drupal/core-recommended "version" 
composer require drupal/core-dev "version" --dev 

Enfin, on remet l’ensemble des modules précédemment enlevé dans leur version fixée et on relance la commande :

composer update 

Vous vous retrouvez alors avec un fichier composer.json et composer.lock qui suit le nouveau standard.  

Je vous rajoute deux commandes qui m’ont été utiles pour comprendre les problèmes de dépendances que j’ai pu avoir lors de ces montées de version.

Cette commande vous indique quels sont les paquets qui ont en dépendance un paquet donné : 

composer why drupal/commerce -t -r

Cette commande vous indique quels sont les dépendances de ce paquet donné : 

composer show --tree drupal/commerce

A consulter :

https://www.drupal.org/docs/updating-drupal/updating-drupal-core-via-composer 

https://www.drupal.org/docs/updating-drupal/migrating-the-composer-project-for-drupal-earlier-than-880 

Mettre à jour vos modules contrib

Maintenant que nous avons le core de Drupal à jour, nous pouvons nous concentrer sur la mise à jour de nos modules. Pour lister les modules qui ne sont pas à jour, vous pouvez lancer cette commande :

composer outdated –direct

Si vous souhaitez vous concentrer sur les modules avec des failles de sécurité :

drush pm:security

Je vous conseille de mettre à jour vos modules un par un :

composer update drupal/modulename --with-dependencies

Enfin, pensez bien après chaque mise à jour à actualiser la base de données, vider les caches et exporter les potentielles modifications :

drush updatedb --no-post-updates 
drush cache:rebuild 
drush updatedb 
drush cache:rebuild 
drush config:export –diff

A consulter : https://www.drupal.org/docs/updating-drupal/updating-modules-and-themes-using-composer

Liste de plugins Composer supplémentaires

Voici une liste de packages supplémentaires bien utiles, dont on se sert en fonction du contexte à ajouter à Composer.  

Composer-patches

Package qui applique un correctif à partir d’un fichier local ou distant à tout paquet requis avec Composer. 

Prestissimo et Optimize Composer for Drupal projects 

Prestissimo et Optimize, deux plugins qui permettent d’optimiser les performances de Composer avec Drupal.

A l’heure où j’écris cet article, Composer 2 est sorti. La communauté, hyper réactive, a déjà rédigé un article pour vous préparer à y passer .

Composer Manifest

Un plugin Composer qui maintient un simple fichier YAML listant tous les paquets installés avec leur numéro de version. 

Dotenv Component 

Symfony Dotenv analyse les fichiers .env pour rendre les variables d’environnement qui y sont stockées accessibles via $_SERVER ou $_ENV. 

Pour les mots de passe et clés d’API, je ne préconise pas cette solution.  Nos amis de Kuzzle ont créé un outil.

Drupal Finder 

Fournit une classe permettant de localiser une installation Drupal dans un chemin donné. 

File Path Utility 

Cet ensemble offre des fonctions utilitaires robustes et multi-plateformes pour normaliser, comparer et modifier les chemins d’accès aux fichiers et les URL. 

En route vers Drupal 9 

À ce moment de l’article, votre site est au top de sa forme (ou en carafe.. on connaît tous les montées de version qui se passent mal…). Peut-on envisager de passer à Drupal 9 ? 

Théoriquement, oui. Mais en pratique, pas toujours… cela va dépendre de la compatibilité des modules contribués et custom que vous avez installés. Drupal 8.8.0 est la première version totalement compatible pour passer à Drupal 9. Si vous souhaitez savoir où vous en êtes, nous vous conseillons le module “Upgrade status”. Il scanne le dossier “modules” et vous indique pour chaque module s’il est Drupal 9 friendly

Si votre site est remonté comme D9 friendly, alors vous pouvez lancer les commandes : 

composer require drupal/core-recommended:~9.0.0@dev --no-update
composer require --dev drupal/dev-dependencies:~9.0.0@dev --no-update
composer update

A consulter : https://www.drupal.org/docs/upgrading-drupal/how-to-prepare-your-drupal-7-or-8-site-for-drupal-9/upgrading-a-drupal-8-site

 

Nous voici à la fin de cette belle aventure. Comme je l’ai dit en début d’article, merci aux auteurs de l’ensemble de ces excellentes sources d’information qui m’ont aidé à la rédaction et j’espère que cet article aura pu vous aider. Pour aller plus loin, je vous invite à visionner le webinar dédié à Drupal 9 et au futur de Drupal

Romain Dalverny

Romain Dalverny

Développeur Web

Je suis passionné par Drupal et des événements autour de l'Open source.

Commentaires

Ajouter un commentaire

Votre commentaire sera modéré par nos administrateurs

Vous avez un projet ? Nos équipes répondent à vos questions

Contactez-nous