En 2024, je cherchais du travail. J’ai décidé de proposer mes services en tant que consultant en communautés. Cependant, la plupart des gens étaient surtout intéressés par une aide technique pour réparer ou mettre à jour leurs sites Discourse. Un client potentiel m’a demandé si je pouvais ajouter un formulaire de contact pour permettre aux personnes sans compte d’envoyer des retours. J’ai fait des recherches et j’ai conclu que ce n’était pas possible. Mais comme j’avais beaucoup de temps libre, j’ai suivi le tutoriel pour les développeurs de plugins pour voir ce que je pouvais faire. Finalement, j’ai développé un plugin de formulaire de contact et signé ce client.[1]
Pour que tout le monde soit clair sur ce point : je ne suis pas un programmeur frontend ! Cela fait 13 ans que je ne suis plus programmeur professionnel d’aucune sorte. Je sais comment créer un formulaire HTML et c’est à peu près la limite de mes connaissances. J’ai donc lutté avec la section Ember et Handlebars du tutoriel et assemblé un bricolage qui fonctionnait suffisamment bien. Heureusement, j’étais à l’aise avec les systèmes de templating, les ayant utilisés dans un emploi précédent.
J’ai trouvé un emploi à la Fondation OpenSSL[2] et j’ai surtout abandonné mes clients. Mais le client pour qui j’avais créé le plugin m’a gardé en rétention car il appréciait vraiment mon travail. (J’ai réalisé plusieurs projets sans rapport pour lui.) Afin de justifier ma rétention, j’ai décidé de mettre à niveau son serveur Discourse. Voici ce que j’ai vu :
Seul ce message apparaissait sur le site de mon client car j’avais été stupide : j’avais installé, mais pas activé, le plugin de contact sur mon site de test. J’ai donc rapidement activé le mode sans échec et désactivé le plugin. Le week-end dernier, j’ai passé du temps à comprendre ce qui avait mal tourné et comment je pouvais le réparer pour mon client.
Après quelques recherches, j’ai trouvé Dépréciation de l’extension de fichier .hbs dans les thèmes et les plugins :
Dans la dernière version de Discourse, l’utilisation de fichiers
.hbsdans les thèmes et les plugins est dépréciée. Le support de ce format de fichier sera supprimé après la prochaine version ESR.
C’était en mars, ce qui signifie que j’aurais dû avoir jusqu’à la fin septembre pour le corriger si j’étais sur la version ESR. Mais ma configuration Discourse utilise “tests-passed”[3], donc j’ai eu l’erreur quelques mois plus tôt, je suppose.
Puisque je devrai le réparer de toute façon (ou décevoir mon client), je me suis lancé dans les instructions : Mise à jour automatique des thèmes et des plugins vers le format de fichier .gjs. La première étape consistait à installer un environnement de développement puisque j’avais changé d’ordinateur portable depuis la dernière fois que j’avais essayé cela.[4] Lorsque j’ai enfin réussi à faire fonctionner Discourse et à vérifier que mon plugin était cassé localement, j’ai lancé le processus de lint[5] :
$ pnpm eslint --fix .
/Users/jericson/src/discourse-contact-plugin/assets/javascripts/discourse/components/contact-form.js
1:8 error Use Glimmer components(@glimmer/component) instead of classic components(@ember/component) ember/no-classic-components
3:16 error Native JS classes should be used instead of classic classes ember/no-classic-classes
3:16 error Please switch to a tagless component by setting `tagName: ''` or converting to a Glimmer component ember/require-tagless-components
20:3 error Use the @action decorator instead of declaring an actions hash ember/no-actions-hash
✖ 4 problems (4 errors, 0 warnings)
Bien qu’il soit agaçant de devoir modifier mon plugin, le processus de lint m’a au moins aidé à nettoyer et moderniser mon code. Cependant, le script automatisé a échoué lors de la tentative de conversion vers le format .gjs. J’ai donc décidé d’essayer https://ask.discourse.com/
J’ai 12 questions là-bas. Je ne les partagerais pas avec un humain car elles ne sont que les élucubrations d’un programmeur de plus en plus frustré. À un moment donné, le bot a suggéré une “approche moderne plus robuste” pour l’un de mes sous-problèmes qui comprenait… un fichier .js et un fichier .hbs.
Je sais pourquoi cela arrive. Il est entraîné sur les discussions de Meta Discourse et il y a encore beaucoup de publications contenant du code Handlebars, y compris la deuxième partie du tutoriel officiel pour les développeurs de plugins. Ce contenu sera mis à jour avec le temps, mais je crains que cela prenne un peu plus de temps car le conseil officiel pour obtenir de l’aide lors de la mise à niveau est de demander au chatbot plutôt que de poser des questions sur Meta Discourse.
Je suppose que je ne devrais pas me plaindre ; cela m’a aidé à trier mon code et probablement avec moins de friction que de demander aux humains.
Stabilité de la plateforme
Je travaille maintenant pour la Fondation OpenSSL. Vous connaissez probablement OpenSSL à cause de Heartbleed. Il est utilisé partout. La version la plus populaire à télécharger est la 1.1.1, qui a atteint sa fin de vie en 2023. La suivante la plus populaire est la 3.0, sortie en 2021, mais qui est toujours prise en charge en tant que version à support à long terme (LTS). Ensuite vient la 3.5, notre dernière version LTS. Ces trois versions représentent presque 2/3 des téléchargements depuis GitHub.
C’est un peu décevant car la 3.5 possède de nouvelles fonctionnalités intéressantes. Mais en fin de compte, les fonctionnalités qui intéressent le plus les gens sont une combinaison de SSL/TLS et de primitives cryptographiques. À moins que vous ne soyez enthousiaste à l’idée des algorithmes cryptographiques post-quantiques, vous repousserez la douleur de la mise à niveau aussi longtemps que possible.
OpenSSL est bien plus bas dans la pile que Discourse, bien sûr. Mais le principe est le même. À moins qu’il y ait une nouvelle fonctionnalité, les gens ne sont pas intéressés par des mises à jour destructrices. Je sais que vous êtes enthousiastes à l’idée des nouvelles fonctionnalités ajoutées à Discourse. Je comprends le désir de modifier une API pour obtenir des optimisations plus tard. Je m’inquiète simplement que se déplacer trop vite nuise à Discourse en tant que plateforme sur laquelle les communautés sont construites.
En parlant de cela, il existe une présentation très utile intitulée Gardening Platforms écrite par Alex Komoroske. La diapositive 90 commence une section intitulée “Plateforme + Écosystème” qui explique comment les plateformes doivent coévoluer avec leurs écosystèmes. Dans ce cas, Discourse est la plateforme qui soutient un écosystème de concepteurs de plugins et de thèmes, de services d’hébergement, de la communauté Meta Discourse et même des communautés construites sur Discourse. Une observation importante dans les notes de l’orateur de la diapositive 98 :
Mais ils ne sont pas indépendants ; ils sont liés symbiotiquement.
Les actions se produisant dans l’un influencent l’autre, et vice versa. Considérez cela comme des boucles de rétroaction les reliant dans les deux sens.
Ils ne sont pas rigidement liés ; c’est plus comme un élastique qui les relie. C’est une attraction gravitationnelle.
Si une plateforme et un écosystème évoluent trop vite l’un par rapport à l’autre, le lien se brise avec des effets désastreux. Je fais confiance à Discourse pour bien agir envers l’écosystème. C’est juste que, pour moi, les week-ends comme le dernier ont ébranlé cette confiance.
Je suis moyennement fier de mon travail, même si cela a fini par être un site assez statique. ↩︎
Présage ! ↩︎
Cela doit aussi être mis à jour ↩︎
Redis et Rails étaient plus difficiles à installer que je ne m’en souvenais. ↩︎
Pas avant d’avoir passé beaucoup de temps à échouer à récupérer
eslint.config.mjs, cependant. ↩︎

