Je viens de mettre à jour 3 sites de Drupal 8 à Drupal 11.
À l'aube de Drupal 8, on disait des mise à jour (màj) des versions majeures (e.g. de 9.x à 10.x) qu'elles allaient être aussi faciles que les màj des versions mineures (e.g. 9.4.x à 9.5.x). Ça c'est le folklore. La réalité est souvent moins rose. Tout dépend de la complexité de la plateforme : les modules installés, le thème, l'étendue du rattrapage, etc.
Conditions
#1 : dans le passage de 8.9.20 à 11.1.6, soit entre le 17 novembre 2021 et 2 avril 2025, on compte 139 + 84 + 29 = 252 versions du coeur de Drupal; et tout le long de la rivière les 'dependencies' répertoriées dans le composer.lock ne cessent d’apparaitre, de changer, d'évoluer et de disparaitre. Diable!
#2 : les modules 'contrib' qui ont la cote lors de la création d'un site subissent les mêmes pressions du temps et de l'évolution technologique. En outre, leurs versions s’accrochent souvent à des versions spécifiques de Drupal.
#3 : les thèmes 'contrib' en vogue lors de la création d'un site et plus particulièrement ceux qui osaient s'éloigner bravement des courants mainstream ont eu toutes les chances de disparaitre au cours des 4 dernières versions majeures. C'est l'entropie qui veux ça.
Dates de péremption
Faites-vous des Martinis maison avec ces 3 conditions 'chik-a-chik-a-chik' et… vos chances de passer de 8 à 9 à 10 à 11 sans sérieuse gueule de bois sont minces.
Quand on promettait que «les màj des versions majeures seraient aussi faciles que les mineures», on sous-entendait, en catimini : à condition de respecter les dates de péremption (elles sont imaginaires ces dates mais leurs conséquences sont bien réelles), c'est-à-dire à condition d'être plus ou moins et en tout temps à jour, disons à l'intérieur d'une fenêtre de quelques mois.
Dit autrement, les chances de passer de 8.9.20 à 9.1.0 en décembre 2020 étaient très bonnes; mais la même transition en avril 2025 est une toute autre histoire, entre autres parce qu'à l'époque, en 2020, on pouvait compter sur Composer 1.x; alors qu'en 2025 Drupal ne supporte plus cette version de Composer. Résultat, on est pris au piège dans un labyrinthe de culs-de-sac :
- Root composer.json requires composer/installers ^1.2 -> satisfiable by composer/installers[v1.7.0].
- composer/installers v1.7.0 requires composer-plugin-api ^1.0 -> found composer-plugin-api[2.6.0] but it does not match the constraint.
Bienvenue dans l'enfer des dépendances circulaires! Chik-a-chik-a-chik…
On peut certes éviter tout ça en effectuant une migration des données avec Migrate et sa suite, directement dans un D11, mais ça c'est un autre sujet. On peut aussi, à nos risques et périls, supprimer le composer.lock et croiser les doigts…
La morale de la fable Le lièvre et la tortue de Jean de La Fontaine, vous vous souvenez ?
Rien ne sert de courir; il faut partir à point.
Post-scriptum
Pour deux des trois sites, j'ai réussi au bout de nombreuses tentatives crises de nerfs à franchir le mur de 8.9.20 à 9.1, c'est le plus difficile des trois murs, les deux autres étant 9.5.11 à 10.0 et 10.4.7 à 11.0. Mais à quel prix !? Ah… il faut également jongler avec les versions de PHP qui, elles, passent de 7.3 à 7.4 à 8.0 à 8.1 et à 8.3.
Et pour le 3e site vous me demandez ? Échec et mat, fanion blanc, reddition sans condition, un thème obsolète et maudit, faut accepter de payer l'intérêt de la dette : tout reconstruire de zéro dans un Drupal 11.x.
Fait. Mais où est la joie dans tout ça, je vous le demande !? Bon… la dette technologique a été effacée, certes, mais pas la dette qui apparait maintenant au grand jour : les contenus sont complètement obsolètes! Que faire du passé ? Chik-a-chik-a-chik…
Et puis dans quel état sont les bases de données de ces deux sites ? Mon instinct me dit qu'elles sont fragiles parce que leurs origines remontent à presque 10 ans.
Pour être franc, j'ai décidé de reconstruire l'un des deux autres sites, celui sur lequel vous naviguez présentement, car je faisais face à d'étranges problèmes de préfixes de langues, et ça c'est plutôt de mauvaise augure. Les certitudes valent leur pesant d'or!
Post mortem
- Le plus satisfaisant ? La mise en place d'un processus CI/CD : Ddev <-> GitLab <-> cPanel qui automatise les màj et les déploiements. La bonne nouvelle ? Avec tous ces Martinis, on est déjà quasi embaumé. DANGER : ne pas incinérer!