Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TECH] Montée de version des dépendances de Pix API #1433

Merged
merged 36 commits into from
May 22, 2020

Conversation

jbuget
Copy link
Contributor

@jbuget jbuget commented May 17, 2020

🦄 Problème

Il y a longtemps que nous n'avons pas fait une passe pour monter de version les dépendances du projet Pix API.

Au lancement de Pix, les montées de version des dépendances étaient multi-hebdomadaires.

Il est important de mettre à jour régulièrement les dépendances pour les raisons courantes suivantes :

  • correction de failles de sécurité ou renforcement de mesures existantes
  • correction de bugs et amélioration de la stabilité
  • gain de performances
  • ajout ou enrichissement de fonctionnalités
  • amélioration ou standardisation des API, signatures ou mécanismes proposés
  • modernisation des façons de faire qui permettent de découvrir, apprendre et maîtriser des concepts, techniques ou pratiques au-delà du projet (donc connaissances réutilisables sur d’autres contextes / projets / technos)
  • amélioration de la navigation et exploitation de la documentation (plutôt qu’essayer des options qui finalement ne correspondent pas à la bonne version)
  • et de façon générale, sentiment d’hygiène et de confiance en l’équipe qui maintient le projet

Les risques (qui sont le pendant des gains ci-dessus) :

  • incompatibilité des plugins (notamment entre eux)
  • bugs ou régression
  • manque de doc à jour
  • montée en compétence quand nouveaux concepts (ex : syntaxe AngleBracket)
  • efforts d’adaptation (c’est pour ça qu’il vaut mieux le faire très souvent)

🤖 Solution

Toutes les dépendances de Pix API ont été montées (patch, minor ou major) sauf celles trop problématiques :

  • bookshelf :
  • pg :
    • tentative de passage de 7.x à 8.x
    • la nouvelle version renforce la sécurité par défaut
    • ce qui empêche le déploiement sur Scalingo (du fait de l'auto-génération de certificats SSL par Scalingo)
    • on a déjà prisla main sur l'option knex.Client ssl qui est variabilisée via DATABASE_SSL_ENABLED sauf que l'ancienne option était un booléen quand maintenant il faut faut passer un objet JSON
  • xml-crypto :
    • j'étais surpris de voir une version minor bloquée (via ~1.0.x plutôt que ^1.y.z)
    • la version minor introduit une problème
    • du fait de cette particularité, je n'ai pas cherché plus loin et j'ai laissé la lib en l'état

🌈 Remarques

J'ai monté chaque lib une-à-une, en jouant bien tous les tests d'API à chaque fois, et en relançant l'application from scratch (avec suppression des conteneurs Docker-Compose) pour certaines libs que j'ai estimées plus sensibles :

  • hapi
  • knex
  • redis
  • redlock
  • pg (qui fonctionnait bien en local, avant de péter Scalingo)
  • xlsx : avec test d'export CSV

J'ai vérifié qu'il n'y avait pas plus de messages de warning côté console navigateur pour les apps Ember.

J'ai aussi vérifié la connexion tout ça.

Pour la montée de hapi, j'ai rencontré les points suivants :

  • le code HTTP par défaut remonté par hapi n'est plus 200 mais 204
  • par défaut, les requêtes de type form-multipart ne sont plus autorisées

💯 Pour tester

Pas le choix. Il faut faire une repasse globale.

@pix-service
Copy link
Contributor

@jbuget jbuget marked this pull request as ready for review May 18, 2020 13:49
Copy link
Contributor

@aceol aceol left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK a part le nom du test. Ca fait beaucoup de MAJ en tout cas!

@jbuget jbuget force-pushed the tech-bump-dependencies branch from 40b71dd to 1d115ff Compare May 18, 2020 21:53
Copy link
Member

@laura-bergoens laura-bergoens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good to know -> knexjs n'utilise désormais plus les promesses Bluebird 👀

@jbuget
Copy link
Contributor Author

jbuget commented May 19, 2020

Good to know -> knexjs n'utilise désormais plus les promesses Bluebird 👀

Ca va modifier l'erreur Sentry sur Knex.

image

@laura-bergoens laura-bergoens force-pushed the tech-bump-dependencies branch from 1d115ff to fa5d660 Compare May 19, 2020 16:45
// when
const response = await server.inject(options);

// then
expect(response.statusCode).to.equal(200);
expect(response.statusCode).to.equal(204);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mais euh… ? Il y a un corps de réponse à POST /api/token, c'est faux de renvoyer 204 ? 🤯

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bien vu. J'ai un peu corrigé les tests pour qu'ils correspondent mieux à la réalité, mais je pense qu'il faudrait aller beaucoup plus loin , quite à revoir les tests de POST /api/token complètement, les centraliser, uniformiser et surtout renforcer.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ben déjà les tests qui regarde le statusCode mais pas le contenu qui va avec je les trouve pénibles à comprendre. En l'occurrence il semblerait que le code renvoyait une réponse vide (ce qui déclenchait un 204 dans le nouvel Hapi) mais je ne comprends pas pourquoi 🤯

@jonathanperret
Copy link
Contributor

Le lien est cassé. Est-ce que tu fais référence à ce changement : hapijs/hapi#3919 ?

Si oui je m'attendrais à ce que cette ligne, ajoutée pour obtenir le comportement qui est maintenant par défaut, soit enlevée du coup :

emptyStatusCode: 204

Le fait que des tests soient cassés par ce changement semble indiquer qu'ils n'utilisent pas la même configuration Hapi que le serveur de production…

api/package.json Outdated Show resolved Hide resolved
jbuget added 9 commits May 22, 2020 10:22
This hapi version contains breaking changes, cf. https://hapi.dev/resources/changelog.

We are impacted by 2 of them that will be fixed in next commits :
- default empty reponse status code is now 204 (instead of 200)
- enforce media type checking
… reponse

See hapijs/hapi#4017 section "Change default empty status code to 204"
See hapijs/hapi#4017 section "Change route options.payload.multipart to false by default"
Concerned dependencies:
- sentry
- swagger
@jbuget jbuget force-pushed the tech-bump-dependencies branch from c30e129 to fe0bac3 Compare May 22, 2020 08:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants