# Stabilitätspunkte, Abhängigkeitsaktualisierung & Codequalität

**URL:** <https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121>\
**Category:** Développement\
**Created:** [22. Februar 2021 um 10:57 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121 "2021-02-22T10:57:20Z")\
**Posts on this page:** 20\
**Page:** 2

<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:** [22. März 2021 um 06:13 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/21 "2021-03-22T06:13:51Z")

</div>

@VonOx Ich finde, dass die aktuelle Buildzeit der PRs wirklich lang ist (fast 20-25 Minuten), was das Mergen mehrerer PRs sehr lang macht.

Aktuell dauert es, um 3 PRs zu mergen, wenn ich das sauber mache, indem ich jede PR einzeln merge, um einen sauberen Commit zu haben, 1,5 Stunden, egal was der Inhalt der PRs ist und ohne die Reviewzeit mitzuzählen ^^

Daher habe ich recherchiert und einen ersten Optimierungsansatz gefunden: die Aufgaben besser parallelisieren.

Zum Beispiel braucht die Aufgabe «&nbsp;Build Front + Docker Magic&nbsp;» nicht die Aufgabe «&nbsp;Test-Server&nbsp;» (für eine PR, auf Master wollen wir, dass die Tests vor dem Docker-Build durchlaufen, aber hier ist das nicht so relevant), also frage ich mich, ob wir die Abhängigkeit entfernen könnten?

Ich habe eine PR erstellt:

> <https://github.com/GladysAssistant/Gladys/pull/1104>
>
> \### 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:
> 
> \- \[\] If your changes affects code, did your write the tests?
> \- \[\] Are tests passing? (\`npm test\` on both front/server)
> \- \[\] Is the linter passing? (\`npm run eslint\` on both front/server)
> \- \[\] Did you run prettier? (\`npm run prettier\` on both front/server)
> \- \[\] If you are adding a new features/services, did you run integration comparator? (\`npm run compare-translations\` on front)
> \- \[\] If your changes modify the API (REST or Node.js), did you modify the API documentation? (Documentation is based on comments in code)
> \- \[\] If you are adding a new features/services which needs explanation, did you modify the user documentation? See \[the GitHub repo\](https://github.com/GladysAssistant/v4-website) and the \[website\](https://gladysassistant.com).
> \- \[\] Did you add fake requests data for the demo mode (\`front/src/config/demo.json\`) so that the demo website is working without a backend? (if needed) See \[https://demo.gladysassistant.com\](https://demo.gladysassistant.com).
> 
> NOTE: these things are not required to open a PR and can be done afterwards / while the PR is open.
> 
> \### Description of change
> 
> Please provide a description of the change here. It's always best with screenshots, so don't hesitate to add some!

 ![Screenshot 2021-03-22 at 14.13.30](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/fe45fb85d71a85372e32b10dd568aca741078a2b.png)

---

<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:** [22. März 2021 um 07:49 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/23 "2021-03-22T07:49:35Z")

</div>

Für mich war die Logik am Anfang, dass es keinen Sinn macht, das Frontend und Docker zu bauen, wenn die Tests fehlschlagen, daher die Sequenz.

Wie du willst!

---

<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:** [22. März 2021 um 07:53 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/24 "2021-03-22T07:53:20Z")

</div>

Ja, ich verstehe die Logik, außer dass es am Ende besser ist, alles gleichzeitig zu starten, auf jeden Fall haben wir am Ende den Abschlussbericht.

Wenn man alles parallelisiert, hat man eine Gesamt-Testzeit von 12 Minuten, das ist immer noch viel, aber es ist halb so lang 🙂 Das macht für mich einen großen Unterschied. 25 Minuten Buildzeit habe ich das Gefühl, total unproduktiv zu sein, ich verbringe meine Zeit damit zu warten ^^

---

<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:** [26. März 2021 um 07:29 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/25 "2021-03-26T07:29:53Z")

</div>

Zur Info, ich habe die Abhängigkeiten aktualisiert (hauptsächlich Backend, etwas Frontend, aber solange wir keine Tests haben, ist es schwierig) und auf GitHub Actions einen Sicherheitsaudit-Schritt für die Abhängigkeiten hinzugefügt.

Siehe

> <https://github.com/GladysAssistant/Gladys/commit/fecd2e751b267c3c6ab0beb443cb85aaf3ba5030>
>
> \* Update dependencies
> 
> \* Add dependencies security audit in GitHub action

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [26. März 2021 um 11:10 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/26 "2021-03-26T11:10:20Z")

</div>

Für Cypress denke ich, dass wir eine gute Arbeitsbasis haben, die Anmeldung und die Bluetooth-Seite (echtes Testen + Mocks) sind getestet.  
Eine Frage beschäftigt mich: Wie können wir diese Tests in den PRs am Leben erhalten?  
Ich muss also prüfen, ob die Testabdeckung mit Cypress erfolgen kann.

---

<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:** [26. März 2021 um 11:28 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/27 "2021-03-26T11:28:12Z")

</div>

Du sprichst über das Reporting bei Codecov?

---

<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:** [26. März 2021 um 12:28 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/28 "2021-03-26T12:28:21Z")

</div>

> [@AlexTrovato](#):
>
> Eine Frage beschäftigt mich: Wie kann man diese Tests in den PRs am Leben erhalten?  
> Ich muss also prüfen, ob die Testabdeckung mit Cypress erfolgen kann.

Ja, ich denke, man braucht Code Coverage, so wie beim Backend 🙂

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [27. März 2021 um 09:03 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/29 "2021-03-27T09:03:26Z")

</div>

Oh jeez, das wird kompliziert, das von Cypress verwendete Code-Coverage-Plugin basiert auf einer Babel 7.x-Version, aber preact-cli 2.x erzwingt die Babel-Version 6.x… ich fange an zu schwitzen…

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [27. März 2021 um 09:48 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/30 "2021-03-27T09:48:31Z")

</div>

Um dieses Problem zu lösen, habe ich eine „vorübergehende und schnelle“ Migration von preact-cli auf v3 durchgeführt, und jetzt habe ich einen schönen Bericht

(screenshot geschnitten)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/f127389ec6059bd0eebae9fccf5253919cf10036.png)

Ich denke, dass wir also

1. so viel wie möglich „Augenmaß“-Abdeckung mit Cypress erstellen müssen
2. [mergebare Tests (mit CI)]
3. die Migration von preact durchführen (nicht so einfach)
4. die Cypress-Abdeckung aktivieren
5. die Testbatterie von Cypress ergänzen
6. wenn die Abdeckung zufriedenstellend ist, die Migration von preact und die Abdeckung zusammenführen

---

<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:** [29. März 2021 um 01:19 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/31 "2021-03-29T01:19:12Z")

</div>

> [@AlexTrovato](#):
>
> faire la migration preact (pas si simple)

Autsch! Die Migration zu Preact wird hart, ich habe es mehrmals versucht und geschwitzt, es ist wirklich nicht offensichtlich 😛

Ansonsten finde ich die Idee gut, brauchst du Hilfe bei der Migration zu Preact? Wenn du auf etwas feststeckst, lass es uns wissen 🙂

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [29. März 2021 um 05:44 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/32 "2021-03-29T05:44:16Z")

</div>

Ja, ich bin einverstanden, dass wir die Aufgaben aufteilen.  
Für den Teil mit den Cypress-Tests werde ich allein ewig brauchen. Ich frage mich, ob nicht jeder Entwickler das Thema in die Hand nehmen sollte, um sich „weiterzubilden“ und zumindest seine eigenen Dienste zu testen.  
Ansonsten wäre es gut, parallel mit der Migration zu Preact zu beginnen und die kritischen Punkte zu notieren, um sicherzustellen, dass wir sie mit Cypress abdecken.

---

<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:** [29. März 2021 um 07:37 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/33 "2021-03-29T07:37:39Z")

</div>

Ich bin einverstanden!

[@contributors](https://community.gladysassistant.com/groups/contributors) Für den Fall, dass ihr es noch nicht gesehen habt, arbeitet @AlexTrovato an der Hinzufügung von Frontend-Tests, die uns dabei helfen werden, Frontend-Regressionen besser zu überwachen. Dafür brauchen wir die Hilfe von euch allen, um jeden Service zu testen 🙂

Wie organisieren wir uns?

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [29. März 2021 um 07:59 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/34 "2021-03-29T07:59:55Z")

</div>

Man muss von meiner Version ausgehen

[https://github.com/GladysAssistant/Gladys/pull/1086](https://github.com/GladysAssistant/Gladys/pull/1086)

et ich denke, man sollte nach und nach in diesen Zweig mergen.  
Für jeden getesteten Dienst einen PR erstellen, nicht in Richtung master, sondern in Richtung dieses Zweigs ( **falls möglich** ) und nach und nach mergen.

Ich stehe natürlich für Fragen oder Blockaden zur Verfügung, die bereits vorhandenen Beispiele sollten ausreichen, um die Testbatterie zu vervollständigen, aber es ist sehr wahrscheinlich, dass neue, nicht „bedachte“ Fälle auftreten.  
Ich denke zum Beispiel an WebSocket, das ich nicht untersucht habe.

Auf meiner Seite behalte ich meinen Zweig «&nbsp;migration preact 3 temporaire&nbsp;» mit Abdeckung, ich könnte die Abdeckung lokal ausführen, um den Beitragenden zu signalisieren, wenn ein «&nbsp;großer&nbsp;» Teil fehlt.  
Wir werden die Abdeckung verfeinern / ergänzen, sobald die Migration validiert ist, denn in meinem temporären Migrationszweig sind viele Funktionen außer Betrieb.

@pierre-gilles ich weiß, dass deine Zeit kostbar ist, also ich würde gerne den «&nbsp;core&nbsp;»-Teil zusätzlich zu meinen Diensten übernehmen, aber ich werde wahrscheinlich nicht in der Lage sein, den Gateway-Teil abzudecken.  
Wenn du daran interessiert bist, dich «&nbsp;auszubilden&nbsp;», können wir teilen.

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [30. März 2021 um 21:05 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/35 "2021-03-30T21:05:30Z")

</div>

Nur eine zusätzliche Information.  
Für jeden „neuen“ Test muss ein JWT-Token über /login generiert werden, und man stößt schnell auf diesen Fehler „Status: 429 - Zu viele Anfragen“.  
Möglicherweise muss eine Konfiguration hinzugefügt werden, um diese Prüfung auf Serverseite zu deaktivieren.

Dieses Problem tritt beim Erstellen der Tests auf, bei jedem neuen Test, jedem neuen Lauf, startet man von vorne (wenn ALLE Tests ausgeführt werden, wird das beim ersten Mal generierte Token während des gesamten Vorgangs beibehalten).  
Das ist eher lästig.

---

<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:** [30. März 2021 um 22:35 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/36 "2021-03-30T22:35:56Z")

</div>

Kann man die Variable `NODE_ENV` überprüfen und die Überprüfung der Anzahl der durchgeführten Anfragen deaktivieren, wenn `NODE_ENV=development` ist?

---

<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:** [31. März 2021 um 00:25 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/37 "2021-03-31T00:25:32Z")

</div>

> [@AlexTrovato](#):
>
> Für jeden „neuen“ Test muss ein JWT-Token über /login generiert werden, und man kommt schnell zu diesem Fehler „Status: 429 - Too Many Requests“.  
> Möglicherweise muss eine Konfiguration hinzugefügt werden, um diese Prüfung auf Serverseite zu deaktivieren.

Warum holst du dir nicht einfach ein JWT beim Starten der Tests (so eine Art before() wie bei mocha, keine Ahnung, ob das existiert?)

Das erscheint mir schwer, bei jedem Test ein Login durchzuführen!

> [@AlexTrovato](#):
>
> Ich weiß, dass deine Zeit wertvoll ist, also würde ich gerne den „core“-Teil übernehmen

Ich denke, es wäre gut, wenn ich mich auch weiterbilde! Ich würde dann unterstützen, sobald ich die aktuellen Themen (zigbee2mqtt und Co.) abgeschlossen habe.

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [31. März 2021 um 06:37 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/38 "2021-03-31T06:37:16Z")

</div>

@pierre-gilles wenn du die Tests entwickelst und deinen neuen Test speicherst, wird Cypress neu geladen (wie der Frontend mit nodemon) und startet von vorne.

Im Fall, dass du alle Tests auf einmal startest, wird dieses Token tatsächlich in der Umgebungsvariable von Cypress gespeichert,  
aber es ist wirklich während der Testentwicklungsphase, in der du «&nbsp;Schritt für Schritt&nbsp;» vorgehst, dass das Problem auftritt, denn es ist sehr schwierig, einen guten «&nbsp;grafischen&nbsp;» Test beim ersten Mal zu schreiben, und selbst wenn das der Fall ist, muss man jeden Test nach dem Schreiben testen können, also die Cypress-Umgebung aktualisieren, also ein neues Token generieren.

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [31. März 2021 um 09:59 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/39 "2021-03-31T09:59:37Z")

</div>

Okay, nachdem ich den ganzen Vormittag damit gespielt habe, scheint es kein echtes Problem zu sein, sondern eher auf einen Bug in den „spezial“ Befehlen cypress-gladys (helpers) zurückzuführen zu sein, die ich eingerichtet hatte, um den Token zu verwalten 🙂

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [31. März 2021 um 16:39 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/40 "2021-03-31T16:39:48Z")

</div>

Dadurch konnte ich die WebSocket (zum Erzwingen/Simulieren eines Ereignisses) verwenden.

Weitere Info: Nach der Überprüfung der npm-Abhängigkeitslücken schlägt der Build aufgrund von sequelize-cli und nyc fehl: [https://www.npmjs.com/advisories/1654](https://www.npmjs.com/advisories/1654).

---

<div class="post-metadata">

**Author:** ![AlexTrovato](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alextrovato/32/10705_2.png) [@AlexTrovato](https://community.gladysassistant.com/u/AlexTrovato)\
**Post date:** [2. April 2021 um 08:36 UTC](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121/41 "2021-04-02T08:36:41Z")

</div>

Um den Fortschritt der Cypress-Abdeckung zu verfolgen, habe ich ein GitHub-Projekt erstellt.

[https://github.com/orgs/GladysAssistant/projects/4](https://github.com/orgs/GladysAssistant/projects/4)

[Vorherige Seite](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121.md?page=1)

[Nächste Seite](https://community.gladysassistant.com/t/point-stabilite-mise-a-jour-des-dependance-qualite-de-code/6121.md?page=3)
