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

**URL:** <https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708>\
**Category:** Développement\
**Created:** [Novembre 28, 2022, 8:46 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708 "2022-11-28T08:46:08Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Novembre 28, 2022, 8:46 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/1 "2022-11-28T08:46:08Z")

</div>

Salut les [@contributors](https://community.gladysassistant.com/groups/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](https://github.com/GladysAssistant/Gladys/pull/1617) ), ce qui nous débloque un paquet de chantiers 🙂

**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:

> <https://github.com/GladysAssistant/Gladys/pull/1656>
>
> \### Pull Request check-list
> 
> To ensure your Pull Request can be accepted as fa…st as possible, make sure to review and check all of these items:
> 
> \- \[x\] Are tests passing? (\`npm test\` on both front/server)
> \- \[x\] Is the linter passing? (\`npm run eslint\` on both front/server)
> \- \[x\] Did you run prettier? (\`npm run prettier\` on both front/server)
> \- \[x\] If you are adding a new features/services, did you run integration comparator? (\`npm run compare-translations\` on front)
> 
> \### Description of change
> 
> Upgrading to Node.js 18 LTS for the server & Node.js 16 LTS for the front

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](https://github.com/GladysAssistant/Gladys/pull/1630) ), 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:

 ![Screenshot 2022-11-28 at 15.41.56](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/d/d92083f29c8a5762e865f693c455caa0272a801f.png)

**Avant (exemple sur la dernière PR)**

 ![Screenshot 2022-11-28 at 15.13.55](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/3/3f039d8868ee4779ca95c561149c6af49b33f560.png)

**Maintenant (Sur ma PR):**

 ![Screenshot 2022-11-28 at 15.13.25](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/2/29174cea5ed0d3ef38ff158c0c4e4425eea434ad.png)

---

<div class="post-metadata">

**Author:** ![lmilcent](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/lmilcent/32/7023_2.png) [@lmilcent](https://community.gladysassistant.com/u/lmilcent)\
**Post date:** [Novembre 28, 2022, 8:53 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/2 "2022-11-28T08:53:24Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Novembre 28, 2022, 9:02 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/3 "2022-11-28T09:02:43Z")

</div>

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:

 ![Screenshot 2022-11-28 at 15.56.39](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/3/3e2256370f95311df8d9dc4fde31628c4c00f4b4.png)

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](https://nodejs.org/api/n-api.html#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 🙂

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Novembre 28, 2022, 9:18 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/4 "2022-11-28T09:18:49Z")

</div>

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

```auto
gladysassistant/gladys:upgrade-node-18

```

Je suis preneur de retours 🙂

Edit: tag dev désormais:

> [@chart\_with\_upwards\_trend Passage à Node.js LTS 16/18 + fin de Open-Zwave](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/8):
>
> L’image Docker sur le tag :dev est désormais basée sur Node.js 18 LTS: gladysassistant/gladys:dev

---

<div class="post-metadata">

**Author:** ![lmilcent](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/lmilcent/32/7023_2.png) [@lmilcent](https://community.gladysassistant.com/u/lmilcent)\
**Post date:** [Novembre 28, 2022, 6:09 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/5 "2022-11-28T18:09:18Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Pti\_Nico](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pti_nico/32/273_2.png) [@Pti\_Nico](https://community.gladysassistant.com/u/Pti_Nico)\
**Post date:** [Novembre 29, 2022, 5:39 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/6 "2022-11-29T17:39:28Z")

</div>

> [@pierre-gilles](#):
>
> @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](https://github.com/GladysAssistant/Gladys/pull/1630) ), est-ce que tu pourrais à la limite faire une PR séparée pour Cypress ? (Limite attend que je merge ma PR Node 18)

Je vois ça dès que possible 😉

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Décembre 1, 2022, 5:23 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/7 "2022-12-01T05:23:28Z")

</div>

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 ! 🥳

J’ai mis à jour la documentation développeur Linux/MacOS qui est maintenant bien plus claire à mon sens, fini open-zwave 🙂

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

 ![Screenshot 2022-12-01 at 12.22.28](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/fc15843b5f6a9ee8375e51c54430e049e1a8a534.jpeg)

> **[Mettre en place un environnement de développement sous Mac/Linux | Gladys...](https://gladysassistant.com/fr/docs/dev/setup-development-environment-mac-linux/)**
>
> Vous trouverez ici les instructions pour mettre en place un environnement de développemment Gladys 4.

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 !

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Décembre 1, 2022, 5:33 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/8 "2022-12-01T05:33:55Z")

</div>

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

```auto
gladysassistant/gladys:dev

```

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Décembre 1, 2022, 7:26 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/9 "2022-12-01T07:26:36Z")

</div>

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

 ![Screenshot 2022-12-01 at 14.24.32](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/c/c593893ef4ffcf01cb11975a6fc89d1961de94b0.jpeg)

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:

> <https://github.com/GladysAssistant/Gladys/issues/1659>
>
> As we are trying to improve CI speed, some single tests are taking 10 seconds an…d could maybe be improved?
> 
> \*\*Example:\*\*
> 
> ✓ should saveConfiguration: init docker container no present (no user) (10008ms)

> <https://github.com/GladysAssistant/Gladys/issues/1660>
>
> ✓ should saveConfiguration: init docker container no present (no user) (10007ms)

---

<div class="post-metadata">

**Author:** ![Pti\_Nico](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pti_nico/32/273_2.png) [@Pti\_Nico](https://community.gladysassistant.com/u/Pti_Nico)\
**Post date:** [Décembre 1, 2022, 4:00 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/10 "2022-12-01T16:00:21Z")

</div>

@pierre-gilles j’ai revu ma PR 😉

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Décembre 1, 2022, 10:42 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/11 "2022-12-01T22:42:28Z")

</div>

> [@pierre-gilles](#):
>
> 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 !

C’est fait

> <https://github.com/GladysAssistant/v4-website/pull/149>

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Décembre 2, 2022, 7:32 UTC](https://community.gladysassistant.com/t/passage-a-node-js-lts-16-18-fin-de-open-zwave/7708/12 "2022-12-02T07:32:10Z")

</div>

> [@Pti\_Nico](#):
>
> @pierre-gilles j’ai revu ma PR 😉

Génial ! C’est bon pour moi, mergé 🙂

> [@VonOx](#):
>
> C’est fait

Efficace 😃 C’est mergé, le nouveau tutoriel Windows est live sur le site:

> **[Mettre en place un environnement de développement sous Windows | Gladys...](https://gladysassistant.com/fr/docs/dev/setup-development-environment-windows/)**
>
> Vous trouverez ici les instructions pour mettre en place un environnement de développemment Gladys 4 sur Windows.
