Point d’étape SPIP 5 & calendrier

Bonjour à tous·tes

J’aimerai aborder quelques points sur l’état d’évolution de SPIP 5 et le calendrier actuellement prévu (1er juillet).

Il y aurait différents points à discuter relativement à l’architecture du code PHP et JS ; je vais essayer de créer différents chapitres pour résumer quelques points.

Sur le code

A. État actuel

SPIP 5 à ce jour n’a pas vraiment de grosses nouveautés fonctionnelles : il y a différentes petites améliorations, mais (à ma connaissance) pas d’éléments fondamentalement nouveaux ou modifiés pour les rédacteurices, l’éditorial, ou l’écriture de squelettes.

L’essentiel du travail en cours et réalisé par certain·es est dans les coulisses, sur l’architecture du code.

SPIP 5 actuellement a reçu une grosse refonte du code javascript via les travaux de @placido ; l’ensemble semble fonctionnel, il pourrait y avoir une documentation plus détaillée, et il reste quelques points au moins à traiter. Éventuellement il y a un projet de déplacer du code dans un dépôt spip/frontend (je n’ai pas suivi cette partie là), qui n’est pas réalisée non plus à ce jour.

Côté PHP, SPIP 5 a commencé un découpage plus conséquent en dépots Composer plus autonomes (en classes, testés), dans spip-league/* , avec différents éléments de logger, de cache, de filesystem, notamment. Une évolution bienvenue mais qui reste très contenue également.

Enfin quelques modifications envoyées (notamment sur la méthode de sérialisation des configurations) peuvent déjà impacter les migrations et des plugins devront s’adapter à cela — tout comme ils devront s’adapter possiblement aux modifications de JS.

B. Avancée intégrable

Une série de PR sont en cours sur Refactor bootstrap SPIP avec composants symfony (#6087) · Issues · spip / spip · GitLab où l’état, bien que non définitif et non appliqué sur l’ensemble du code encore (notamment les plugins-dist), apporte un usage plus approfondi de briques Symfony, notamment le http-kernel, l’event-dispatcher, l’injection de dépendances, une commande CLI intégrée.

De nos tests et quelques retours, on est assez contents de ce premier pas d’évolution (James & moi en tout cas) : une bonne partie du legacy continue de fonctionner alors que des éléments « modernes » peuvent être utilisés, tel que des paramètres de configuration DI, des attributs comme #[AsPipelineListener] et l’injection de dépendance dans des classes de plugins. C’est une étape transitoire, mais qui apporte une première base pour avancer. Je n’entre pas dans les détails ici.

Les « refactors » amenés par ces PR sont assez conséquents. Nous avons également — disclaimer — utilisés des outils d’IA contrôlés et dirigés pour nous aider : le volume de code de SPIP et ses plugins est conséquent et nous sommes à peine 2 sur ces sujets PHP ; cela nous a aussi un peu remotivés après différentes tentatives locales avortées tant la tache de déspaghettification est fastidieuse…

C. Futurs possibles

Je parle côté PHP uniquement, mais la PR précédente n’est qu’une première étape. Idéalement il faudrait pouvoir

  • se passer de la majorité des variables globales (et constantes variables ^^) dans SPIP qui posent différents soucis sur l’architecture du code et les tests, empêchent une injection de dépendance correcte dans un conteneur de services, empêchent d’utiliser notamment symfony/runtime en mode worker (bon, ça on en est très loin)
  • pour cela avoir des objets PHP dédiés en priorité pour les config/meta (un gros chantier déjà) et pour l’API SQL (autre gros chantier, et sans utiliser Doctrine) ; et d’autres éléments que je n’ai pas en tête là et dont beaucoup sont très spécifiques à une globale donnée.
  • générer et gérer des objets Response (a minima dans les actions) ; (on triche un peu dans la PR précédente en attendant mieux).
  • permettre d’avoir un unique point d’entrée public/index.php sur lequel pointerait le vhost : c’est probablement une étape très compliquée car l’imbrication « route / url » vs « chemin physique » de SPIP est très forte et confondue à différents endroits du code.

Sur le calendrier

La date du 1er juillet 2026 initialement prévue (d’une date déjà reportée plusieurs fois depuis le 1er janvier 2025) arrive à grand pas. Plusieurs possibilités sont discutables pour la suite en fonction des motivations et énergies de la communauté.

Un petit vote pour avoir quelques opinions (clôture le 25 mai)

Quel(s) choix préférer ?
  • Maintenir la date, conserver l’état actuel (« on » stabilise sans prendre trop de risques)
  • Maintenir la date, merger les PR 6087, pas plus (on n’est pas à l’abri de surprises, de bugs, mais on suppose que ça va dans le bon sens)
  • Repousser la date, merger les PR 6087, pas plus (ça va dans le bon sens, mais on laisse le temps de stabiliser un peu, sans aller plus loin)
  • Repousser la date, merger les PR 6087 et aller plus loin. Faire disparaître ces globales, autres services injectables (config, sql…) :wink:
  • Arrêter avec Symfony (vous nous faites chier avec votre lubie architecture PHP / Composer / Symfony / Injection de dépendances / obsession Globales → allez jouer ailleurs)
  • Arrêter avec l’IA (vous nous faites chier avec votre usage de l’IA ; c’est trop problématique → allez jouer ailleurs)
0 votant

Merci de votre lecture & participation.
N’hésitez pas à commenter et contribuer à la réflexion !

7 « J'aime »

Merci beaucoup ! Je pense que vu l’état des forces et du code, il vaut mieux avancer tant que la motivation est là. Surtout que vous documentez tout cela au fur et à mesure ! Et qu’en plus vous assurez la retrocompat. Donc merci beaucoup !

2 « J'aime »

Merci pour ce point.

Un enjeu auquel je suis sensible, c’est la clarification du code PHP dans lequel certains mécanismes, comme la gestion des nommages et décodages d’urls, que tu évoques, me semblent trop opaques actuellement, avec des fonctions polyvalentes, de la réentrance, parfois des pipelines et de potentielles surcharges.

Un autre enjeu c’est l’autonomie de SPIP comme environnement de développement. PHP était lax et SPIP bénéficiait de ce lax, fournissait des diagnostics et outils suffisants pour mettre au point les squelettes. Les PHPs modernes devenant de plus en plus stricts, le code SPIP peut gagner en qualité, mais il ne faudrait pas que ça dégrade l’expérience du dev de squelette. Je veux pas devoir sortir xdebug et explorer les logs PHP du serveur (pas les logs spip) pour mettre au point un squelette SPIP. Pour moi ce serait ça la grosse évolution-correction qui compte.

Pour les échéances, je n’ai pas l’intention de sauter sur SPIP5 à sa parution pour migrer mes sites dessus alors ça ne me gêne pas du tout d’attendre que l’écureuil finisse sa mutation… en choucas ? en sanglier ?

1 « J'aime »

Puisque je suis pour reporter la date et aller plus loin et qu’il faudra certainement fixer une nouvelle date, je propose de décaler de 6 mois, ce qui donnerait une release de la 5.0 le 1er décembre 2026.

1 « J'aime »

ça fait 5, pas 6 :stuck_out_tongue:

tant qu’a devoir faire un gros « saut » lors du passage en SPIP 5, autant prendre le temps pour avoir un ensemble cohérent…
Merci beaucoup pour ce point clair et précis !

1 « J'aime »

Bonjour,

Ce n’est qu’une remarque personnelle, mais cette date enterrerait définitivement mes espoirs de faire migrer le dernier site SPIP encore maintenu chez nous dans une version prometteuse. La retraite est plus attirante ! Qu’à cela ne tienne, ils resteront en 4.4 jusqu’à la toute fin de cette LTS. :smiley:

Je me donc permis de voter pour l’option la plus plébiscitée : Aller plus loin.

Toutefois, fin novembre, une version de PHP8.6 et de Symfony 8.2 devraient sortir. Je suppose qu’il y aura une version 5.0-beta de SPIP de quelques semaines … Je trouve que c’est plutôt malheureux pour SPIP que cela tombe au beau milieu de ces sorties.

D’autant plus malheureux que cela entrainera probablement un décalage pour SPIP4.4 avec l’extension du support de futures versions de PHP tout en maintenant PHP7.4, puisque LTS … Je plains les mainteneurs en repensant au grand écart qu’avait connu SPIP3.2 !

Je vous souhaite bon courage et bravo pour votre persévérance.

1 « J'aime »

Huhu, my bad, 5.03 très cher :smiley:

Il semble qu’une écrasante majorité souhaite un report de la sortie et d’aller au delà sur des transformations architecturales en SPIP 5. Nous continuerons d’avancer sur ces points James & moi si on maintient cette motivation pour les refactors, l’achitecture et la DX.

Cela laissera quelques petits mois supplémentaires pour les autres personnes qui souhaiteraient mettre en place ou revoir des fonctionnalités pour l’espace d’administration et de rédaction ou des squelettes par défaut… si jamais des gens ont un peu de temps à consacrer !

Nous allons donc activer les PR autour du ticket 6087, les relire et les intégrer dans la foulée ; sachant que certains éléments seront revus ultérieurement donc.

2 « J'aime »

Voilà, PR publiées, CI installées ou corrigées, prêt à être mergé (il semble qu’il n’y ait que sur spip/spip où il faudra revoir le composer.json). Plein de pastilles vertes ; ce qui reste en draft sur le ticket sont des PR d’autres sujets pour plus tard…

2 « J'aime »

Super, il faut qu’on pense à mettre à jour James / supported-versions · GitLab en conséquence :slight_smile:

2 « J'aime »

Merci pour toutes ces avancées.

Je peux me re-pencher sur le sujet après les fusions de refactorisation plugin_config (il me faudra sans doute adapter certains parties).

3 « J'aime »

Et c’est mergé.

La suite prochainement avec un nouveau ticket.

Et hop chore(roadmap): update dates (!44) · Requêtes de fusion · James / supported-versions · GitLab

Edit : suite aux remarquer de @GilO et après échanges en privé, je pense qu’il serait plus raisonnable de sortir la 5.0 mi janvier 2027. Je mettrait à jour la PR et y corrigerai un pétouille de décalage de date entre la 5.4 et la 6.0 qui doivent sortir en même temps.

1 « J'aime »

et ça nous laissera aussi un peu de temps pour le support PHP8.6 de la LTS (avant qu’elle ne le devienne) :wink:

On vient d’intégrer un composant pour les config (globales meta, lire_config / ecrire_config)

Pour la suite on doit revoir encore le bootstrap de SPIP, et on va intégrer une « façade » pour les besoins les plus courants (ie: Spip::config(), Spip::logger()…)

2 « J'aime »