klee-contrib / topmodel

Outil de modélisation et générateurs pour divers langages
https://klee-contrib.github.io/topmodel/#/
MIT License
9 stars 9 forks source link

[modgen] Modularisation de modgen #253

Closed JabX closed 2 weeks ago

JabX commented 1 year ago

Présentation

Afin de ne plus lier les évolutions de générateurs aux mises à jour de Topmodel lui-même, et d'offrir la flexibilité aux utilisateurs d'installer ou non les générateurs dont ils ont besoin, on va arrêter de packager les générateurs avec modgen et les télécharger à la demande selon la configuration.

Les modules de générateurs existants (C#, Java, Sql, JS, Traductions) seront publiés séparément sur Nuget, avec leurs propres numéros de versions (qui commenceront tous à 1.0.0). Ils auront "nativement" en dépendance la version de topmodel avec laquelle ils ont été publiés, qui sera la version minimale nécessaire pour que modgen accepte de les charger. On supposera (au moins pour l'instant), que tout module de générateur sera compatible avec toute version de topmodel plus récente (sauf si la version majeure n'est pas la même).

L'idée est de conserver la mise à jour automatique de modgen, mais elle ne mettra à jour que topmodel lui même, et non les modules installés (qui pourront bien sûr être mis à jour manuellement). On se retrouvera donc souvent avec une version de modgen "plus récente" que les générateurs, donc ce cas doit fonctionner autant que possible. Les utilisateurs pourront donc toujours être à jour sur topmodel, mais sans à avoir nécessairement à intégrer les potentiels breaking changes des générateurs immédiatement.

Les versions de modules installés seront listées dans le topmodel.lock. modgen déterminera automatiquement les générateurs dont il a besoin en lisant le topmodel.config, selon les configs utilisées et les modules personnalisés renseignés.

Cette évolution marquera la première montée de version majeure de TopModel, vers 2.0.

Fonctionnement détaillé

Commande modgen

(Pour rappel, un module est un package C# dont le nom est TopModel.Generator.{module}, et il doit comprendre une classe de configuration {module}Config.cs et son schéma json {module}.config.json)

1) modgen charge les modules de générateurs personnalisés. Si un module personnalisé dépend d'un module existant, lors il sera enregistré en dépendance dans le topmodel.lock avec la version exacte renseignée dans son csproj. Si la dépendance existe déjà avec une version différente => erreur. 2) modgen parcourt les configs paramétrées :

3) modgen vérifie que la version minimale de chaque module est bien inférieure à la version de modgen installée => sinon erreur 4) On lance la génération comme d'habitude

Commande modgen --update xxx

Le mécanisme normal de modgen tourne ensuite et réinstallera la dernière version des modules demandés.