pix icon indicating copy to clipboard operation
pix copied to clipboard

[TECH] Utiliser pnpm

Open francois2metz opened this issue 1 year ago • 3 comments

:unicorn: Problème

Notre mono-repo actuel contient des scripts divers et varié pour tenter de maintenir les dépendances de nos différentes applications a jour. La plupart de nos applications partagent des dépendances similaires qui sont téléchargé et dupliqué.

:robot: Proposition

Utiliser PNPM https://pnpm.io/ Cela a nécessiter la modification du buildpack nodejs: https://github.com/Scalingo/nodejs-buildpack/compare/master...1024pix:nodejs-buildpack:master Cela pose des questions de maintenance de ce buildpack.

:rainbow: Remarques

Ceci est la première étape pour tenter de moderniser les outils du mono-repos. Une prochaine étape pourrait être d'utiliser circletron qui utilise l'API dynamique de circleci et pnpm pour ne tester que le code qui a réellement changer. https://github.com/circletron/circletron Cela aurait pour avantager de réduire le temps de build pour un certain nombre de PRs. Une étape suivante pourrait également de rapatrier l'ensemble des applications qui sont nécessaire pour faire fonctionner Pix qui sont réparties dans différents repos ce qui rend les évolutions et la maintenance plus compliqué.

:100: Pour tester

  1. CI verte
  2. Déploiement vert

francois2metz avatar Sep 26 '23 13:09 francois2metz

Une fois les applications déployées, elles seront accessibles via les liens suivants :

Les variables d'environnement seront accessibles via les liens suivants :

pix-bot-github avatar Sep 26 '23 13:09 pix-bot-github

J'ai testé un peu la CLI de mon côté.

npm install => pnpm install (alias pnpm i) Petit plaisir si on a déjà installé les dépendances précédemment, un cache local permet de reset les dépendances en offline. Le install global ne fonctionne pas cependant - d'autres téléchargements sont tentés après les dépendances node. pnpm install --offline évite ce problème.

pnpm run liste les scripts à dispo (je connais pas d'équivalent npm).

Les scripts peuvent être lancé sans run (à la yarn). Ex : pnpm clean à la racine.

On peut utiliser les scripts des sous-dossiers comme pnpm start dans l'API.

J'ai pas compris comment lancer un script dans un package uniquement, ni dans un ensemble de packages (ex : api, mon-pix). Le --filter ne fonctionne pas dans mes essais.

A la racine, pnpm start fail à cause de audit-logger.

Le param --frozen-lockfile est automatiquement utilisé si la var d'env CI est settée.

Les doubles dash -- ne sont pas nécessaires avec pnpm, on peut les supprimer de nos scripts.

Je crois pas que les pnpm exec soient nécessaires dans les cas où les dépendances sont installées (confirmé avec db:migrate qui utilise knex en local). C'est nécessaire pour le déploiement ?


Sinon, j'ai pas trop compris ajustements de versions avec des tags GitHub, mais ça se raccourci en supprimant git+https://github.com/, seuls ${orga}/${repo}#${hash} sont nécessaires.

Dans nos dépendances on a aussi https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz que je trouve chelou, mais j'ai pas la connaissance.

Merci @Tarektouati pour le coup de main sur cette revue.

yannbertrand avatar Oct 06 '23 08:10 yannbertrand

J'ai testé un peu la CLI de mon côté.

npm install => pnpm install (alias pnpm i) Petit plaisir si on a déjà installé les dépendances précédemment, un cache local permet de reset les dépendances en offline. Le install global ne fonctionne pas cependant - d'autres téléchargements sont tentés après les dépendances node. pnpm install --offline évite ce problème.

pnpm run liste les scripts à dispo (je connais pas d'équivalent npm).

npm run fait la même chose 👍🏾

Les scripts peuvent être lancé sans run (à la yarn). Ex : pnpm clean à la racine.

Merci pour l'info, je vais simplifier nos scripts.

On peut utiliser les scripts des sous-dossiers comme pnpm start dans l'API.

J'ai pas compris comment lancer un script dans un package uniquement, ni dans un ensemble de packages (ex : api, mon-pix). Le --filter ne fonctionne pas dans mes essais.

Le --filter se base sur le nom de package, donc il faut faire --filter pix-api pour l'api (par exemple).

A la racine, pnpm start fail à cause de audit-logger.

audit-logger étant en typescript, une étape de transpilation est nécessaire. Il faut donc invoquer le build avant le start pour cette application.

Le param --frozen-lockfile est automatiquement utilisé si la var d'env CI est settée.

Effectivement, on peut simplifier.

Les doubles dash -- ne sont pas nécessaires avec pnpm, on peut les supprimer de nos scripts.

Effectivement, on peut simplifier là aussi.

Je crois pas que les pnpm exec soient nécessaires dans les cas où les dépendances sont installées (confirmé avec db:migrate qui utilise knex en local). C'est nécessaire pour le déploiement ?

Sinon, j'ai pas trop compris ajustements de versions avec des tags GitHub, mais ça se raccourci en supprimant git+https://github.com/, seuls ${orga}/${repo}#${hash} sont nécessaires.

Dans nos dépendances on a aussi https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz que je trouve chelou, mais j'ai pas la connaissance.

Merci @Tarektouati pour le coup de main sur cette revue.

HEYGUL avatar Oct 07 '23 15:10 HEYGUL

Je n'ai plus l'énergie / envie d'avance ce sujet. Je clos donc la PR.

HEYGUL avatar Apr 17 '24 15:04 HEYGUL