MirLabs / Le blog

Mon site se met à jour pendant que je dors, et je valide le matin

· Cyril Delage

Mettre à jour un projet Symfony, c'est le travail qu'on repousse toujours. Personne ne le voit, ça ne rapporte rien tout de suite, et ça peut tout casser. Alors on attend. Puis une faille sort, et le retard d'un an devient un problème du jour au lendemain.

J'ai plusieurs sites et peu de temps. Je voulais que les montées de version se préparent toutes seules, sans jamais partir en production sans mon accord. C'est devenu Uplift, un bundle Symfony open source, avec son compagnon Rehearsal.

Ce que fait un passage

  1. Il monte les versions, dans une politique que je fixe. Pour chaque couche (PHP, Symfony, les autres paquets) : rien, correctifs seulement, versions mineures, ou versions majeures. Et un plafond PHP pour les serveurs qui ne peuvent pas aller plus loin.
  2. Il avance d'une marche à la fois. D'abord la dernière version mineure, puis la majeure suivante, jamais un saut de trois versions d'un coup. Un vieux projet rattrape son retard en plusieurs passages, chacun testé.
  3. Il corrige ce qui est devenu obsolète, avec Rector.
  4. Il adopte les nouveautés du framework quand c'est sans risque : l'attribut #[AsCommand], #[MapRequestPayload], ce genre de choses.
  5. Il lance les tests et écrit un rapport.
  6. Il ne pousse rien et ne déploie rien. Le changement attend dans mon back-office, où je le valide ou le rejette.

Le premier vrai passage

Avant d'en parler, je l'ai fait tourner sur une vraie application Symfony 7.3. Résultat :

  • Symfony 7.3.11 → 7.4.21 ;
  • 40 paquets mis à jour, 11 contraintes de composer.json réécrites ;
  • 1 fichier corrigé par Rector ;
  • 2 nouveautés adoptées ;
  • tests au vert.

Ce premier test a surtout servi à trouver un bug. Le processus des tests héritait de l'environnement de développement, ce qui les faisait échouer. Uplift en concluait que chaque mise à jour cassait le projet, et annulait tout. Sur le papier, tout fonctionnait. C'est pour ça que ce test tourne maintenant à chaque modification du bundle.

Pourquoi pas Dependabot ou Renovate ?

Ils sont très bien pour proposer de nouvelles versions de paquets. Mais ils s'arrêtent là : ils ne réécrivent pas le code qui devient obsolète, n'adoptent pas les nouveautés du framework, et ne connaissent pas les limites de votre serveur. Uplift fait la boucle complète pour PHP et Symfony, puis me laisse la décision.

Le matin

Le changement arrive dans Rehearsal, une page de mon admin, sous forme de carte : « 7.3.11 → 7.4.21, 40 paquets, tests passés ». Je l'essaie, je valide ou je rejette avec un commentaire. Cinq minutes, au lieu d'une demi-journée.

Si vous avez des projets Symfony qui prennent du retard, les deux bundles sont gratuits. Et si vous préférez que quelqu'un s'en occupe, écrivez-moi.

Un projet du même genre ?Intégration de l'IA, site à rendre lisible par les assistants, sécurité : parlons-en.
Me contacter

À lire aussi