-
ProblématiqueLe projet est actuellement en node 14. On souhaite le passer en node 20. Un projet pose problème pour la migration, le projet alert-cli et la dépendance nodegit qui n'est plus mise à jour. L'objectif ici est de comprendre son utilité et d'identifier les alternatives. Pourquoi nodegit ?Voici le workflow d'alert-cli :
Pour faire la diff, on va procéder comme suit :
Ensuite, on charge le fichier en json via le path fournit dans le patch et on utilise les json pour détecter les modifications entre les fichiers sans avoir besoin de nodegit. Donc nodegit est utilisé pour détecter entre 2 tags, les fichiers modifiés et si c'est un ajout, modification ou suppression. |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments
-
Alternative à nodegitLa première idée est de trouver une librairie permettant de réaliser les mêmes opérations que nodegit. Une rapide recherche montre très peu d'alternatives disponibles et maintenues. Il y a https://github.com/isomorphic-git/isomorphic-git mais il ne supporte pas la méthode diff qui est celle qui nous intéresse. |
Beta Was this translation helpful? Give feedback.
-
Utilisation de l'API githubL'idée est d'utiliser l'API github pour récupérer la diff entre les tags. On va s'appuyer sur ce type de résultat : SocialGouv/kali-data@v2.563.0...v2.564.0 On peut récupérer le tags ici : https://api.github.com/repos/SocialGouv/kali-data/tags?per_page=30&page=1 Ensuite, on peut obtenir la diff ici : https://api.github.com/repos/SocialGouv/kali-data/compare/v2.563.0...v2.564.0?per_page=30&page=1 on retrouve donc les informations nécessaires pour reproduire le comportement d'aujourd'hui sans nodegit. |
Beta Was this translation helpful? Give feedback.
-
Utilisation d'un changelogOn utilise actuellement la lib semantic-release. Cette dernière permet de faire un Changelog mais il ne contient que la liste des commits inclues dans la release et non la diff des fichiers. Semantic-release accepte des plugins dont un qui permet l'exécution de commande (@semantic-release/exec). On pourrait utiliser ces fonctionnalités pour générer un fichier de diff qui serait inclu dans le repo. Par contre, il faut trouver le moyen de générer une sortie du git diff avec tous les éléments dont on a besoin dans le format JSON. Cela semble assez complexe, j'ai trouvé un exemple pour faire un git log en json : https://gist.github.com/dmegorov/b64dcea2eed31e02c916fc6ed9111f4f#file-git-log2json-sh |
Beta Was this translation helpful? Give feedback.
-
Ne pas utiliser de diffDans cette solution, on va retirer la logique de faire un diff pour récupérer la liste des fichiers modifiés. On va le faire manuellement. On peut utiliser une lib comme https://www.npmjs.com/package/dir-compare qui va permettre de reproduire une sortie similaire à ce que fait un git diff patch. (https://gliviu.github.io/dc-api/interfaces/Difference.html) |
Beta Was this translation helpful? Give feedback.
Utilisation de l'API github
L'idée est d'utiliser l'API github pour récupérer la diff entre les tags. On va s'appuyer sur ce type de résultat : SocialGouv/kali-data@v2.563.0...v2.564.0
On peut récupérer le tags ici : https://api.github.com/repos/SocialGouv/kali-data/tags?per_page=30&page=1
Ensuite, on peut obtenir la diff ici : https://api.github.com/repos/SocialGouv/kali-data/compare/v2.563.0...v2.564.0?per_page=30&page=1
on retrouve donc les informations nécessaires pour reproduire le comportement d'aujourd'hui sans nodegit.