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 :
Si la config correspond à celle d'un module personnalisé => OK
Sinon, modgen regarde le topmodel.lock :
Si le module est listé : on regarde si la version est installée, sinon on l'installe (on peut avoir deux versions installées côte à côte, mais topmodel ne chargera que celle qui est listée)
Si le module n'est pas listé => On cherche le module sur Nuget et on l'installe dans sa dernière version et on met à jour le topmodel.lock (s'il existe pas = erreur)
Les modules seront téléchargés dans un dossier .modgen à côté du fichier de config.
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
Si xxx vaut all, alors on vide les modules du lockfile et on supprime le dossier .modgen.
Si xxx vaut un nom de config, alors on retire cette config du lockfile et on supprime tous les modules installé avec cette config,
Le mécanisme normal de modgen tourne ensuite et réinstallera la dernière version des modules demandés.
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 letopmodel.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 :Sinon, modgen regarde le
topmodel.lock
:topmodel.lock
(s'il existe pas = erreur)Les modules seront téléchargés dans un dossier
.modgen
à côté du fichier de config.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
xxx
vautall
, alors on vide les modules du lockfile et on supprime le dossier.modgen
.xxx
vaut un nom de config, alors on retire cette config du lockfile et on supprime tous les modules installé avec cette config,Le mécanisme normal de
modgen
tourne ensuite et réinstallera la dernière version des modules demandés.