pix
pix copied to clipboard
[TECH] Utiliser pnpm
: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
- CI verte
- Déploiement vert
Une fois les applications déployées, elles seront accessibles via les liens suivants :
Les variables d'environnement seront accessibles via les liens suivants :
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.
J'ai testé un peu la CLI de mon côté.
npm install
=>pnpm install
(aliaspnpm 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. Leinstall
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 deaudit-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'envCI
est settée.
Effectivement, on peut simplifier.
Les doubles dash
--
ne sont pas nécessaires avecpnpm
, 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é avecdb:migrate
qui utiliseknex
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.
Je n'ai plus l'énergie / envie d'avance ce sujet. Je clos donc la PR.