From 52cf8bb57d5e4f506c6dccb4e23296a51b693a57 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 3 Jul 2023 11:40:27 +0200 Subject: [PATCH 01/13] docs(adr): propose other ways to set nodejs versions --- docs/adr/0018-specifier-version-nodejs.md | 4 +- docs/adr/0049-specifier-version-nodejs.md | 72 +++++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 docs/adr/0049-specifier-version-nodejs.md diff --git a/docs/adr/0018-specifier-version-nodejs.md b/docs/adr/0018-specifier-version-nodejs.md index 63568f856b9..1d7924157d4 100644 --- a/docs/adr/0018-specifier-version-nodejs.md +++ b/docs/adr/0018-specifier-version-nodejs.md @@ -4,7 +4,9 @@ Date : 2020-01-18 ## État -Accepté +Amendé par [0049-specifier-version-nodejs.md][0049] + +[0049]: ./0049-specifier-version-nodejs.md ## Contexte diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md new file mode 100644 index 00000000000..228d9122add --- /dev/null +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -0,0 +1,72 @@ +# 18. Spécifier la version de NodeJS + +Date : 2023-07-03 + +Remplace l'[ADR #18](./0018-specifier-version-nodejs.md). + +## État + +Amende [0018-specifier-version-nodejs.md][0018] + +[0018]: ./0018-specifier-version-nodejs.md + +En discussion + +## Contexte + +Suite à l'ADR 18, nous avons constaté plusieurs limites à notre manière de préciser les versions de Node.js compatibles : +- On ne peut pas fixer de version mineure de Node.js malgré que l'API ne fonctionne pas dans les version antérieures à la 16.15. Toute personne souhaitant installer Pix peut avoir ce soucis. +- Les développeurs peuvent ne pas monter leur version de Node.js pendant très longtemps, ce qui induit un écart important entre la version utilisée en local, de la CI et de l'exécution en production. Cet écart ne permet pas de prévoir les comportements de l'application entre ces 3 environnements. +- Ces écarts sont assez difficiles à comprendre. + +### Solution n°1 : Forcer la même version complète de Node sur les environnements + +On peut mettre à jour les 3 versions correspondantes aux 3 environnements en même temps. + +#### Avantages +- Pas d'écart de version possible entre les 3 environnements. +- Clarification du choix de version : toujours la même. +- Moins de gestion de compatibilité sur des versions non gérées. +- Probablement automatisable. +- Mises à jour de Node pour les développeurs plus régulière. + +#### Inconvénients +- Mises à jour de Node pour les développeurs plus régulière, nécessite des `nvm install`/`nvm use`. +- On calque les montées de versions de Node au bon vouloir de Circle CI de mettre à jour leurs images. +- Retard minime possible à cause du délai de mise à jour des versions de Node côté Circle CI. + +### Solution n°2 : Forcer la même version complète de Node dans le .nvmrc et le `engines`. + +Pour ne pas se lier à Circle CI. + +#### Avantages +- Aucun écart lié à Node entre l'environnement de dev et de production. +- Écart de version minime entre les 3 environnements. +- Moins de gestion de compatibilité sur des versions non gérées. +- Probablement automatisable. +- Mises à jour de Node pour les développeurs plus régulière. +- Minimise les soucis de sécurité potentiels en production. + +#### Inconvénients +- La CI peut ne pas être exactement la même version que les 2 autres environnements. +- Mises à jour de Node pour les développeurs plus régulière, nécessite des `nvm install`/`nvm use`. + +### Solution n°3 : Ajouter une version mineure de Node dans le .nvmrc et le `engines` + +Permettre de spécifier une version mineure (en plus de la majeure) pour préciser la version minimale nécessaire. C'est ce qui a été fait pour l'API avec #6512 car elle ne fonctionnait plus à partir d'une certaine version mineure de Node. + +#### Avantages +- Gestion plus fine de la compatibilité. +- Permet de forcer la mise à jour des développeurs quand une version mineure n'est plus compatible. +- Garantie qu'on utilise la dernière version de Node en production donc normalement une meilleure sécurité. + +#### Inconvénients +- C'est subjectif de savoir si une montée de version est nécessaire ou pas. Il faut préciser quand est-ce que c'est nécessaire ? +- L'écart entre les versions des 3 environnements (et les soucis que ça cause) reste présent. + +## Décision +A discuter en Tech Days avant de faire une proposition. + +## Conséquences + +/!\ Compatibilité Pix UI lors de la mise à jour. From 874efccb64a9e83e251266c4f3cf96d45069b887 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Thu, 6 Jul 2023 11:19:47 +0200 Subject: [PATCH 02/13] docs(adr): review with tech days team --- docs/adr/0049-specifier-version-nodejs.md | 81 +++++++++++++++-------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 228d9122add..722f64acd7c 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -1,4 +1,4 @@ -# 18. Spécifier la version de NodeJS +# 49. Spécifier la version de NodeJS Date : 2023-07-03 @@ -14,59 +14,82 @@ En discussion ## Contexte -Suite à l'ADR 18, nous avons constaté plusieurs limites à notre manière de préciser les versions de Node.js compatibles : -- On ne peut pas fixer de version mineure de Node.js malgré que l'API ne fonctionne pas dans les version antérieures à la 16.15. Toute personne souhaitant installer Pix peut avoir ce soucis. -- Les développeurs peuvent ne pas monter leur version de Node.js pendant très longtemps, ce qui induit un écart important entre la version utilisée en local, de la CI et de l'exécution en production. Cet écart ne permet pas de prévoir les comportements de l'application entre ces 3 environnements. -- Ces écarts sont assez difficiles à comprendre. +Avec l'ADR 18, nous avons choisi : +- PAAS : préciser la version majeure de Node uniquement. +- CI : préciser une version exacte de Node. +- Local : préciser la version majeure de Node uniquement. -### Solution n°1 : Forcer la même version complète de Node sur les environnements +Nous avons constaté plusieurs limites à ce choix : +- L'API ne fonctionne plus en version antérieure à Node@v16.15. L'ADR précédant ne nous permet pas de fixer de version mineure minimum donc un risque d'incompatibilité est présent. +- Fixer la version majeure uniquement peut provoquer des problèmes de reproductibilité car nos 3 environnements ont chacun une version de Node différente. Notamment en local, il est arrivé que certains développeurs restent en version antérieure à la 16.15 lorsque nous avons dû supprimer la compatibilité de ces versions. -On peut mettre à jour les 3 versions correspondantes aux 3 environnements en même temps. +### Solution n°1 : Forcer la même version exacte minimum de Node sur tous les environnements + +Cette solution consiste à mettre à jour les 3 versions des 3 environnements en même temps. #### Avantages -- Pas d'écart de version possible entre les 3 environnements. -- Clarification du choix de version : toujours la même. +- Limite l'écart de version possible entre les 3 environnements. +- Clarification du choix de version compatible. - Moins de gestion de compatibilité sur des versions non gérées. -- Probablement automatisable. -- Mises à jour de Node pour les développeurs plus régulière. +- Automatisable avec Renovate. +- Mises à jour de sécurité de Node en local plus régulière. +- Alerte en local que la version utilisée n'est pas bonne. #### Inconvénients -- Mises à jour de Node pour les développeurs plus régulière, nécessite des `nvm install`/`nvm use`. -- On calque les montées de versions de Node au bon vouloir de Circle CI de mettre à jour leurs images. +- Nécessite des `nvm install` plus réguliers. +- On synchronise les montées de versions de Node avec les mises à jour des images Node de Circle CI. - Retard minime possible à cause du délai de mise à jour des versions de Node côté Circle CI. -### Solution n°2 : Forcer la même version complète de Node dans le .nvmrc et le `engines`. +### Solution n°2 : Forcer la même version exacte minimum de Node en local et sur le PAAS -Pour ne pas se lier à Circle CI. +Notre CI évoluerai de son côté, pour éviter la synchronisation avec les images Node Circle CI. #### Avantages -- Aucun écart lié à Node entre l'environnement de dev et de production. -- Écart de version minime entre les 3 environnements. +- Limite l'écart de version possible entre les 3 environnements. +- Clarification du choix de version compatible. - Moins de gestion de compatibilité sur des versions non gérées. -- Probablement automatisable. -- Mises à jour de Node pour les développeurs plus régulière. -- Minimise les soucis de sécurité potentiels en production. +- Automatisable avec Renovate. +- Mises à jour de sécurité de Node en local plus régulière. +- Alerte en local que la version utilisée n'est pas bonne. #### Inconvénients -- La CI peut ne pas être exactement la même version que les 2 autres environnements. -- Mises à jour de Node pour les développeurs plus régulière, nécessite des `nvm install`/`nvm use`. +- Nécessite des `nvm install` plus réguliers. +- La reproductibilité en CI n'est pas assurée. -### Solution n°3 : Ajouter une version mineure de Node dans le .nvmrc et le `engines` +### Solution n°3 : Ajouter la version mineure minimum de Node en local et sur le PAAS -Permettre de spécifier une version mineure (en plus de la majeure) pour préciser la version minimale nécessaire. C'est ce qui a été fait pour l'API avec #6512 car elle ne fonctionnait plus à partir d'une certaine version mineure de Node. +Permettre de spécifier une version mineure (en plus de la majeure) pour préciser la version minimale nécessaire. C'est ce qui a été fait sur le PAAS pour l'API avec #6512 car elle ne fonctionnait plus avec des versions inférieures à la 16.15 de Node. #### Avantages - Gestion plus fine de la compatibilité. - Permet de forcer la mise à jour des développeurs quand une version mineure n'est plus compatible. -- Garantie qu'on utilise la dernière version de Node en production donc normalement une meilleure sécurité. #### Inconvénients -- C'est subjectif de savoir si une montée de version est nécessaire ou pas. Il faut préciser quand est-ce que c'est nécessaire ? -- L'écart entre les versions des 3 environnements (et les soucis que ça cause) reste présent. +- La reproductibilité entre les 3 environnements n'est pas assurée. +- Non automatisable avec Renovate. +- Nécessite des `nvm install` plus réguliers. ## Décision -A discuter en Tech Days avant de faire une proposition. + +Lors des Tech Days 2023, une équipe s'est formée sur le sujet des montées de version. Après avoir corrigé la version de Node embarquée dans l'API qui était impaire, nous avons expérimenté les montées de version automatisées de Node sur [un fork du monorepo](https://github.com/1024pix/pix-renovate-test). + +En faisant évoluer [notre configuration Renovate](https://github.com/1024pix/renovate-config), nous avons observé que l'outil force l'ajout du numéro de patch si on précise la version mineure requise. + +Fort de ces expérimentations, l'équipe propose de choisir [la solution 1](### Solution n°1 : Forcer la même version exacte minimum de Node sur tous les environnements). ## Conséquences -/!\ Compatibilité Pix UI lors de la mise à jour. +Il faut migrer le format d'écriture des numéros de versions de Node et npm : +- Dans les `.nvmrc`, préciser le numéro de version exacte. Exemple : `16.20.1` +- Dans les `package.json`, préciser le numéro de version exacte minimum de `node`. On propose d'utiliser le même format que pour les dépendances. Exemple : `^16.20.1`. +- Dans les `package.json`, préciser le numéro de version exacte minimum de `npm`. Exemple : `^8.13.2`. + +> **Note** +> +> Suite à cette implémentation, les développeurs devront relancer un `nvm install`, cela deviendra une habitude. + +Renovate nous proposera dès lors les montées de versions groupées de Node et npm dès qu'une nouvelle version de l'image Node Circle CI est publiée. + +On peut commencer cette migration par le monorepo, avant de migrer nos dépendances comme `pix-ui`. + +Sur le PAAS, rien ne change car on utilisera toujours la dernière version disponible. From fe561614882aa74b6b5bf69f3c2f0871e52ca6fe Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Thu, 6 Jul 2023 15:29:23 +0200 Subject: [PATCH 03/13] fix(adr): do not fix npm version --- docs/adr/0049-specifier-version-nodejs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 722f64acd7c..086da847f2f 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -79,16 +79,16 @@ Fort de ces expérimentations, l'équipe propose de choisir [la solution 1](### ## Conséquences -Il faut migrer le format d'écriture des numéros de versions de Node et npm : +Il faut migrer le format d'écriture des numéros de versions de Node.js : - Dans les `.nvmrc`, préciser le numéro de version exacte. Exemple : `16.20.1` - Dans les `package.json`, préciser le numéro de version exacte minimum de `node`. On propose d'utiliser le même format que pour les dépendances. Exemple : `^16.20.1`. -- Dans les `package.json`, préciser le numéro de version exacte minimum de `npm`. Exemple : `^8.13.2`. +- Dans les `package.json`, ne pas préciser le numéro de version exacte minimum de `npm` pour utiliser celle embarquée par défaut par Node.js. On peut directement supprimer cette contrainte pour éviter les soucis lors des futures de migration de Node. > **Note** > > Suite à cette implémentation, les développeurs devront relancer un `nvm install`, cela deviendra une habitude. -Renovate nous proposera dès lors les montées de versions groupées de Node et npm dès qu'une nouvelle version de l'image Node Circle CI est publiée. +Renovate nous proposera dès lors les montées de versions groupées de Node dès qu'une nouvelle version de l'image Node Circle CI est publiée. On peut commencer cette migration par le monorepo, avant de migrer nos dépendances comme `pix-ui`. From 453c5a37a703e5e366fc72a92b98a0e95009d79a Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:14:41 +0200 Subject: [PATCH 04/13] docs: remove repetition --- docs/adr/0049-specifier-version-nodejs.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 086da847f2f..b1a89fee0d9 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -84,10 +84,6 @@ Il faut migrer le format d'écriture des numéros de versions de Node.js : - Dans les `package.json`, préciser le numéro de version exacte minimum de `node`. On propose d'utiliser le même format que pour les dépendances. Exemple : `^16.20.1`. - Dans les `package.json`, ne pas préciser le numéro de version exacte minimum de `npm` pour utiliser celle embarquée par défaut par Node.js. On peut directement supprimer cette contrainte pour éviter les soucis lors des futures de migration de Node. -> **Note** -> -> Suite à cette implémentation, les développeurs devront relancer un `nvm install`, cela deviendra une habitude. - Renovate nous proposera dès lors les montées de versions groupées de Node dès qu'une nouvelle version de l'image Node Circle CI est publiée. On peut commencer cette migration par le monorepo, avant de migrer nos dépendances comme `pix-ui`. From 6c7ff624d75bd553189feb0c2dca65a8c989c25d Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:16:21 +0200 Subject: [PATCH 05/13] docs: add precisions on Node odd versions maintenance Co-authored-by: Anne-Marie --- docs/adr/0049-specifier-version-nodejs.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index b1a89fee0d9..5f79faf5df8 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -71,7 +71,9 @@ Permettre de spécifier une version mineure (en plus de la majeure) pour précis ## Décision -Lors des Tech Days 2023, une équipe s'est formée sur le sujet des montées de version. Après avoir corrigé la version de Node embarquée dans l'API qui était impaire, nous avons expérimenté les montées de version automatisées de Node sur [un fork du monorepo](https://github.com/1024pix/pix-renovate-test). +Lors des Tech Days 2023, une équipe s'est formée sur le sujet des montées de version. Après avoir corrigé la version de Node embarquée dans l'API qui était non maintenue nous avons expérimenté les montées de version automatisées de Node sur [un fork du monorepo](https://github.com/1024pix/pix-renovate-test). + +NB : Après six mois, les versions impaires (9, 11, etc.), ne sont plus maintenues et sont donc hors LTS [voir la doc](https://nodejs.dev/en/about/releases/) En faisant évoluer [notre configuration Renovate](https://github.com/1024pix/renovate-config), nous avons observé que l'outil force l'ajout du numéro de patch si on précise la version mineure requise. From b6c261f29effad06b067b15fea101ee3e46437a4 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:18:15 +0200 Subject: [PATCH 06/13] docs: add example of what could happen today Co-authored-by: Anne-Marie --- docs/adr/0049-specifier-version-nodejs.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 5f79faf5df8..6530fadb8a8 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -18,7 +18,10 @@ Avec l'ADR 18, nous avons choisi : - PAAS : préciser la version majeure de Node uniquement. - CI : préciser une version exacte de Node. - Local : préciser la version majeure de Node uniquement. - +Par exemple, si l'on spécifie la version 16 : +- en local, on peut utiliser la `16.1.0` +- dans la CI, on peut utiliser la `16.2.8` +- dans le PAAS, on peut utiliser la `16.5.1` Nous avons constaté plusieurs limites à ce choix : - L'API ne fonctionne plus en version antérieure à Node@v16.15. L'ADR précédant ne nous permet pas de fixer de version mineure minimum donc un risque d'incompatibilité est présent. - Fixer la version majeure uniquement peut provoquer des problèmes de reproductibilité car nos 3 environnements ont chacun une version de Node différente. Notamment en local, il est arrivé que certains développeurs restent en version antérieure à la 16.15 lorsque nous avons dû supprimer la compatibilité de ces versions. From 6a697549983d3950943e53b0071008a1c5178220 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:21:45 +0200 Subject: [PATCH 07/13] docs: add precisions on what we had to deal with Co-authored-by: Anne-Marie --- docs/adr/0049-specifier-version-nodejs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 6530fadb8a8..e3063734d47 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -23,7 +23,7 @@ Par exemple, si l'on spécifie la version 16 : - dans la CI, on peut utiliser la `16.2.8` - dans le PAAS, on peut utiliser la `16.5.1` Nous avons constaté plusieurs limites à ce choix : -- L'API ne fonctionne plus en version antérieure à Node@v16.15. L'ADR précédant ne nous permet pas de fixer de version mineure minimum donc un risque d'incompatibilité est présent. +- Un bug corrigé par la [PR 6512](https://github.com/1024pix/pix/pull/6512) nous oblige à fixer une version minimale. - Fixer la version majeure uniquement peut provoquer des problèmes de reproductibilité car nos 3 environnements ont chacun une version de Node différente. Notamment en local, il est arrivé que certains développeurs restent en version antérieure à la 16.15 lorsque nous avons dû supprimer la compatibilité de ces versions. ### Solution n°1 : Forcer la même version exacte minimum de Node sur tous les environnements From ff335387044a9aa89dc123e28f037ad687e434a4 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:23:17 +0200 Subject: [PATCH 08/13] docs: be more precise on first solution intro Co-authored-by: Anne-Marie --- docs/adr/0049-specifier-version-nodejs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index e3063734d47..c378b520015 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -28,7 +28,7 @@ Nous avons constaté plusieurs limites à ce choix : ### Solution n°1 : Forcer la même version exacte minimum de Node sur tous les environnements -Cette solution consiste à mettre à jour les 3 versions des 3 environnements en même temps. +Cette solution consiste à mettre à jour la version de node dans chacun des 3 environnements en même temps. #### Avantages - Limite l'écart de version possible entre les 3 environnements. From cbbe7428082854a20b84ab60540019b9500d83b9 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:24:35 +0200 Subject: [PATCH 09/13] docs: remove repeated context infos Co-authored-by: Anne-Marie --- docs/adr/0049-specifier-version-nodejs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index c378b520015..09a18e2623c 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -61,7 +61,7 @@ Notre CI évoluerai de son côté, pour éviter la synchronisation avec les imag ### Solution n°3 : Ajouter la version mineure minimum de Node en local et sur le PAAS -Permettre de spécifier une version mineure (en plus de la majeure) pour préciser la version minimale nécessaire. C'est ce qui a été fait sur le PAAS pour l'API avec #6512 car elle ne fonctionnait plus avec des versions inférieures à la 16.15 de Node. +Permettre de spécifier une version mineure (en plus de la majeure) pour préciser la version minimale nécessaire. #### Avantages - Gestion plus fine de la compatibilité. From e6e6f2be9b425e893c397408f5bc3c8929e1d5a0 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:30:55 +0200 Subject: [PATCH 10/13] docs: reorder context informations --- docs/adr/0049-specifier-version-nodejs.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 09a18e2623c..95d83d61eca 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -18,13 +18,13 @@ Avec l'ADR 18, nous avons choisi : - PAAS : préciser la version majeure de Node uniquement. - CI : préciser une version exacte de Node. - Local : préciser la version majeure de Node uniquement. -Par exemple, si l'on spécifie la version 16 : -- en local, on peut utiliser la `16.1.0` -- dans la CI, on peut utiliser la `16.2.8` -- dans le PAAS, on peut utiliser la `16.5.1` + Nous avons constaté plusieurs limites à ce choix : - Un bug corrigé par la [PR 6512](https://github.com/1024pix/pix/pull/6512) nous oblige à fixer une version minimale. -- Fixer la version majeure uniquement peut provoquer des problèmes de reproductibilité car nos 3 environnements ont chacun une version de Node différente. Notamment en local, il est arrivé que certains développeurs restent en version antérieure à la 16.15 lorsque nous avons dû supprimer la compatibilité de ces versions. +- Fixer la version majeure uniquement peut provoquer des problèmes de reproductibilité car nos 3 environnements ont chacun une version de Node différente. Notamment en local, il est arrivé que certain(e)s développeurs(euses) restent en version antérieure à la 16.15 lorsque nous avons dû supprimer la compatibilité de ces versions. Par exemple, si l'on spécifie la version 16 : + * en local, on peut utiliser la `16.1.0`. + * dans la CI, on peut utiliser la `16.2.8`. + * dans le PAAS, on peut utiliser la `16.15.0`. ### Solution n°1 : Forcer la même version exacte minimum de Node sur tous les environnements From 2f8538183757b40c85e020b458e2a6bb87e889d6 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:37:03 +0200 Subject: [PATCH 11/13] docs: use 'specify' instead of 'force' --- docs/adr/0049-specifier-version-nodejs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 95d83d61eca..49e66124d71 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -26,7 +26,7 @@ Nous avons constaté plusieurs limites à ce choix : * dans la CI, on peut utiliser la `16.2.8`. * dans le PAAS, on peut utiliser la `16.15.0`. -### Solution n°1 : Forcer la même version exacte minimum de Node sur tous les environnements +### Solution n°1 : Spécifier la même version exacte minimum de Node sur tous les environnements Cette solution consiste à mettre à jour la version de node dans chacun des 3 environnements en même temps. @@ -43,7 +43,7 @@ Cette solution consiste à mettre à jour la version de node dans chacun des 3 e - On synchronise les montées de versions de Node avec les mises à jour des images Node de Circle CI. - Retard minime possible à cause du délai de mise à jour des versions de Node côté Circle CI. -### Solution n°2 : Forcer la même version exacte minimum de Node en local et sur le PAAS +### Solution n°2 : Spécifier la même version exacte minimum de Node en local et sur le PAAS Notre CI évoluerai de son côté, pour éviter la synchronisation avec les images Node Circle CI. @@ -80,7 +80,7 @@ NB : Après six mois, les versions impaires (9, 11, etc.), ne sont plus maintenu En faisant évoluer [notre configuration Renovate](https://github.com/1024pix/renovate-config), nous avons observé que l'outil force l'ajout du numéro de patch si on précise la version mineure requise. -Fort de ces expérimentations, l'équipe propose de choisir [la solution 1](### Solution n°1 : Forcer la même version exacte minimum de Node sur tous les environnements). +Fort de ces expérimentations, l'équipe propose de choisir la solution 1. ## Conséquences From 91a1e6e96036c41ec17e39bf7c5f9ae3c357682a Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Tue, 1 Aug 2023 11:32:43 +0200 Subject: [PATCH 12/13] docs: be more precise about PaaS versioning --- docs/adr/0049-specifier-version-nodejs.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index 49e66124d71..c3cd40bde89 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -93,4 +93,5 @@ Renovate nous proposera dès lors les montées de versions groupées de Node dè On peut commencer cette migration par le monorepo, avant de migrer nos dépendances comme `pix-ui`. -Sur le PAAS, rien ne change car on utilisera toujours la dernière version disponible. +Sur le PaaS, dans sa version actuelle, rien ne change car on utilisera toujours la dernière version disponible. +À l'avenir, la version du PaaS sera synchronisée avec les 2 autres versions. From a9a6f697c8f62aab7b1168d81ceb51871f72c462 Mon Sep 17 00:00:00 2001 From: Yann Bertrand <5855339+yannbertrand@users.noreply.github.com> Date: Tue, 1 Aug 2023 11:33:45 +0200 Subject: [PATCH 13/13] docs: add Circle restriction on Node version --- docs/adr/0049-specifier-version-nodejs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/adr/0049-specifier-version-nodejs.md b/docs/adr/0049-specifier-version-nodejs.md index c3cd40bde89..f4b9393aa94 100644 --- a/docs/adr/0049-specifier-version-nodejs.md +++ b/docs/adr/0049-specifier-version-nodejs.md @@ -16,7 +16,7 @@ En discussion Avec l'ADR 18, nous avons choisi : - PAAS : préciser la version majeure de Node uniquement. -- CI : préciser une version exacte de Node. +- CI : préciser une version exacte de Node (parce que imposé par la CI). - Local : préciser la version majeure de Node uniquement. Nous avons constaté plusieurs limites à ce choix :