📈 Passage à Node.js LTS 16/18 + fin de Open-Zwave

Salut les @contributors !

J’ai mergĂ© la PR qui retire l’intĂ©gration Open-Zwave ( Remove Open-Zwave integration by Pierre-Gilles · Pull Request #1617 · GladysAssistant/Gladys · GitHub ), ce qui nous dĂ©bloque un paquet de chantiers :slight_smile:

Ce que j’ai en tĂȘte :

  1. Passage Ă  Node.js 16/18
  2. Passage à la Webcrypto API pour Gladys Plus au lieu du polyfill qu’on utilisait jusque-là
  3. Mise à jour des dépendances serveurs
  4. Mise à jour des dépendances front
  5. Mise Ă  jour des Github Actions
  6. Mise Ă  jour de Cypress

Ce que j’ai fais pour l’instant :

1., 2., 3. (en partie) et 5. dans cette PR:

Pour l’instant je passe à Node.js 18 sur le serveur, et Node.js 16 sur le front, car preact-cli tourne sous Webpack 4 qui n’est pas compatible avec Node.js 18 pour l’instant.

@Pti_Nico Je me suis basé sur ton boulot sur ta PR ( ci: update CI deprecated actions by NickDub · Pull Request #1630 · GladysAssistant/Gladys · GitHub ), est-ce que tu pourrais à la limite faire une PR séparée pour Cypress ? (Limite attend que je merge ma PR Node 18)

Avant/AprĂšs

Je pensais pas que ça allait ĂȘtre aussi impressionnant, mais en gros voilĂ  la vitesse d’exĂ©cutions des tests de PR:

Avant (exemple sur la derniĂšre PR)

Maintenant (Sur ma PR):

7 « J'aime »

Comme quoi garder les logiciels et technologies à jour c’est important et ça sert à quelque chose :blush:

J’avoue que c’est assez fou comme gain de perf !

Plusieurs raisons Ă  cette amĂ©lioration, ce n’est pas juste passer Ă  Node.js 16/18 qui est la clĂ© :

  • Open-Zwave Ă©tait une librairie basĂ©e sur des binding C++ qui devait ĂȘtre buildĂ©e Ă  chaque npm install + docker build dans chaque architecture. Retirer cette lib a pas mal contribuĂ©.
  • Avant Node.js 16, l’API Webcrypto n’était pas disponible dans Node.js donc j’utilisais un polyfill qui devait ĂȘtre compilĂ© Ă  chaque npm install + chaque docker build dans chaque architecture.

Dans le code du gateway, le changement ressemble à ça:

Ce qui retire node-webcrypto-ossl qui Ă©tait une tannĂ©e Ă  compiler, et on passe par l’API native Node.js.

Potentiellement, ça améliore les performances et la stabilité de la partie Gladys Plus car on passe par une API native bétonnée et officielle.

  • On passe Ă  une version plus rĂ©cente de sqlite3 qui a les bons bindings avec la Node-API, et qui est normalement prĂ©-compilĂ© pour chaque architecture, pareil on s’économise un build par npm install + build docker par architecture.

En gros, l’écosystĂšme a pas mal Ă©voluĂ© et le fait de ne pas utiliser la derniĂšre version de Node nous empĂȘchait de passer Ă  plein de nouvelles optimisations.

L’autre avantage de tout ça, c’est qu’on va avoir un onboarding dĂ©veloppeur beaucoup plus facile, et donc ça retirera un frein au dĂ©veloppement de service Gladys.

On va pouvoir mettre à jour les tutos, et ça sera beaucoup plus simple :slight_smile:

3 « J'aime »

J’ai une premiùre image Docker tournant sous Node.js 18:

gladysassistant/gladys:upgrade-node-18

Je suis preneur de retours :slight_smile:

Edit: tag dev désormais:

1 « J'aime »

J’avoue que pour l’environnement de dev, le module a compiler zwave Ă©tait une tannĂ©e !

1 « J'aime »

Je vois ça dÚs que possible :wink:

1 « J'aime »

Pour info, j’ai intĂ©grĂ© les diffĂ©rents retours fait sur la PR et mergĂ© la PR sur master pour que toutes les PR en cours puissent s’adapter et profiter des amĂ©liorations de vitesse de build ! :partying_face:

J’ai mis Ă  jour la documentation dĂ©veloppeur Linux/MacOS qui est maintenant bien plus claire Ă  mon sens, fini open-zwave :slight_smile:

Pour info, au final je suis passé à Node.js 18 sur le back et le front, donc pas de Node 16.

Pour la documentation Windows, est-ce que quelqu’un pourrait faire une passe et vĂ©rifier que tout marche bien avec Node.js 18 LTS sur WSL et mettre Ă  jour la documentation ? Merci !

L’image Docker sur le tag :dev est dĂ©sormais basĂ©e sur Node.js 18 LTS:

gladysassistant/gladys:dev

Sur Apple M1 Pro, c’est vraiment impressionnant maintenant, les 1785 tests du backend passent en 1 minute :sweat_smile: Je gagne un temps fou de dev !

Et encore, on a de la marge d’amĂ©liorations, il y a 4-5 tests sur les services MQTT et Zigbee2mqtt qui prennent 10 secondes chacun, donc quasiment la moitiĂ© des tests est passĂ© sur ces intĂ©grations.

J’ai crĂ©Ă© des issues Github pour ces tests:

2 « J'aime »

@pierre-gilles j’ai revu ma PR :wink:

1 « J'aime »

C’est fait

1 « J'aime »

GĂ©nial ! C’est bon pour moi, mergĂ© :slight_smile:

Efficace :smiley: C’est mergĂ©, le nouveau tutoriel Windows est live sur le site:

1 « J'aime »