ForgeChangelogGradlePlugin : créer un changelog pour forge via gradle
-
@‘Superloup10’:
Non, avec ForgeGradle, tu seras toujours obligé de mettre
minecraft { version = "version_aléatoire" // Version aléatoire peut être lu depuis un fichier externe, mais il sera toujours indiqué dans le build.gradle }Donc pour y accéder, tu seras obligé de passer par ```
project.minecraft.versionOui mais dans tous les cas il faut compiler le projet (pas forcément le build mais le mettre en tant que sous-projet)
-
J’ai rajouté une fonctionnalité : on peut générer les versions via un repo maven (en revanche le changelog pour chaque version est vide puisqu’il n’est pas disponible sur maven)
Par exemple pour le mod FFMT-libs :
{ "homepage": "http://ci.mcnanotech.fr/job/FFMT-libs/", "1.9.4": { "1.6.4.175-mc1.9.4": "", "1.6.3.174-mc1.9.4": "" }, "1.9": { "1.6.3.173-mc1.9": "", "1.6.3.172-mc1.9": "", "1.6.3.170-mc1.9": "", "1.6.3.169-mc1.9": "", "1.6.3.168-mc1.9": "", "1.6.3.167-mc1.9": "", "1.6.3.166-mc1.9": "", "1.6.3.165-mc1.9": "", "1.6.3.164-mc1.9": "", "1.6.3.163-mc1.9": "", "1.6.3.162-mc1.9": "", "1.6.3.160-mc1.9": "" }, "1.8.9": { "1.6.2.159-mc1.8.9": "", "1.6.2.158-mc1.8.9": "", "1.6.2.157-mc1.8.9": "", "1.6.2.155-mc1.8.9": "" }, "1.8.8": { "1.6.2.153-mc1.8.8": "", "1.6.2.152-mc1.8.8": "", "1.6.2.150-mc1.8.8": "", "1.6.2.149-mc1.8.8": "" }, "1.8": { "1.6.1.148-mc1.8": "", "1.6.1.147-mc1.8": "", "1.6.1.146-mc1.8": "", "1.6.1.145-mc1.8": "", "1.6.1.144-mc1.8": "" } } -
J’ai ajouté la génération des versions via git : en revanche si vous souhaitez avoir le changelog de git pour l’instant vous êtes obligé d’avoir ajouté les tags correspondant aux versions car sinon on peut pas trouver les commits correspondants aux versions (j’ajouterai par la suite un moyen de générer ce changelog via les hash des commits).
En revanche je suis bloqué sur un truc : comment générer les versions recommandées et les dernières (pour accéder à la dernière version j’avais pensé à comparer les versions néanmoins le problème est que ça générera la dernière version uniquement pour la dernière version de minecraft).
Voici le code actuellement généré pour un repo git (ici l’exemple est donné via mon repo SCLib) :
{ "homepage": "http://github.com/SCAREXgaming/SCLib/releases", "1.7.10": { "1.7.10-1.0.0": "SCAREX : First commit\nSCAREX : Modified changelog", "1.7.10-1.0.1": "SCAREX : Added gradle wrapper", "1.7.10-1.0.3": "SCAREX : still testing\nSCAREX : always testing\nSCAREX : And again\nSCAREX : no comment", "1.7.10-1.0.4": "SCAREX : …\nSCAREX : ..\nSCAREX : Changed version", "1.7.10-1.0.5": "SCAREX : Trying to add changelog maker", "1.7.10-1.1.0": "SCAREX : Added changelog again\nSCAREX : Finally added all the plugins I wanted", "1.7.10-1.1.1": "SCAREX : Testing things of jitpack.io", "1.7.10-1.1.2": "SCAREX : Nope", "1.7.10-1.2.0": "SCAREX : -Added blocks and items lists -Added energy blocks -Added abstract item\nSCAREX : Modified version", "1.7.10-1.2.1": "SCAREX : Added test files\nSCAREX : Added Mekanism Testing things with jitpack.io\nSCAREX : Testing : added optional parameter when publishing\nSCAREX : Testing with install task\nSCAREX : New test", "1.7.10-1.2.2": "SCAREX : 1.2.2 : - added some CoFH mods for testing - added some source files - fixed bug : the configurator from Mekanism didn\u0027t work\nSCAREX : Renaming + fixed bug" } } -
Version recommandée je pense qu’il faut jenkins.
De même avec jenkins il serai possible de récupérer le message de commit et l’envoyer dans la version associée. -
@‘robin4002’:
Version recommandée je pense qu’il faut jenkins.
De même avec jenkins il serai possible de récupérer le message de commit et l’envoyer dans la version associée.Je connais pas très bien l’API de Jenkins, si quelqu’un peut m’aider

-
Je ne l’ai jamais utilisé non plus.
-
Après le problème aussi c’est que y’a pas tout le monde qui a accès à un Jenkins
-
C’est pas difficile à mettre en place.
Tu peux aussi l’installer en local sur windows. -
@‘robin4002’:
C’est pas difficile à mettre en place.
Tu peux aussi l’installer en local sur windows.Oui si c’est juste pour faire ça autant le faire manuellement (dans tous les cas on peut remplir le json manuellement)
-
Je pense qu’un programme qui remplit le changelog automatiquement n’a qu’un intérêt si un CI est en place.
Car bon, si tu build manuellement le mod en général tu ne fais pas un build à chaque commit, donc tu peux aussi remplir le changelog manuellement avec autre chose que le message de commit.
-
@‘robin4002’:
Je pense qu’un programme qui remplit le changelog automatiquement n’a qu’un intérêt si un CI est en place.
Car bon, si tu build manuellement le mod en général tu ne fais pas un build à chaque commit, donc tu peux aussi remplir le changelog manuellement avec autre chose que le message de commit.
Ce que je veux dire c’est que tu peux toujours créer un script pour faire une partie, personnellement je préfère que ce programme soit totalement compatible avec git (car c’est quelque chose que tout le monde peut avoir) et non avec des choses qui utilisent un serveur.
Je vais voir pour intégrer Jenkins.
En attendant je vais utiliser un comparateur pour trouver toutes les dernières version pour chaque version de minecraft, et ces versions seront aussi automatiquement marquées comme recommandée.
-
Pour ce qui est de comparer les versions : c’est bon je l’ai ajouté.
Actuellement je suis en train de voir pour l’API Jenkins, malheureusement je bloque à un endroit : le json d’une build ne donne pas un accès direct à la version, il ne donne qu’un accès direct à l’id du build ( https://ci.mcnanotech.fr/job/FFMT-libs/175/api/json ). Je voudrai donc savoir si vous auriez un moyen de récupérer cette version facilement ?
-
Le lire dans le fichier build.gradle ?
Je vais voir si je peux faire un script bash pour faire le changelog, ça sera surement plus simple qu’un plugin gradle.
-
@‘robin4002’:
Le lire dans le fichier build.gradle ?
Je vais voir si je peux faire un script bash pour faire le changelog, ça sera surement plus simple qu’un plugin gradle.
Comme je l’ai dit le problème c’est qui faut importer tout le repo pour avoir la version ce qui compliqué beaucoup, sinon je pensais récupérer le nom de l’artifact et le passer dans le pattern de version
-
Le fichier build.gradle se trouve dans le dossier de workspace de jenkins.
Donc je ne vois pas en quoi c’est un problème. -
@‘robin4002’:
Le fichier build.gradle se trouve dans le dossier de workspace de jenkins.
Donc je ne vois pas en quoi c’est un problème.C’est un problème si la variable est modifiée depuis un autre fichier. Par exemple dans mes mods je change la version depuis le gradle.properties
-
Ah oui en effet
-
C’est bon, jenkins a été intégré, voici le fichier généré (sur le jenkins il manquait quelques messages de commits, je peux rien y faire) :
{ "homepage": "http://ci.mcnanotech.fr/job/FFMT-libs/", "promos": { "1.10.2-recommended": "1.7.0.176", "1.10.2-latest": "1.7.0.176" }, "1.9.4": { "1.6.4.175": "Robin : bump version number for mc 1.9.4\n", "1.6.3.174": "" }, "1.9": { "1.6.3.173": "Superloup10 : Update Forge, mappings, gradle - add gradle.properties\n", "1.6.3.172": "Superloup10 : Fix missing mapping\n", "1.6.3.170": "baumeyerkevin : Doc\n", "1.6.3.169": "baumeyerkevin : Fix BlockSittable\n", "1.6.3.168": "Superloup10 : Add registerBlock\n", "1.6.3.167": "baumeyerkevin : Update build.gradle\n", "1.6.3.166": "baumeyerkevin : Reverse last\n", "1.6.3.165": "baumeyerkevin : New option allowing to disable hats\n", "1.6.3.164": "baumeyerkevin : Update FFMTRegistry\n", "1.6.3.163": "baumeyerkevin : Update build\n\nbaumeyerkevin : Update to forge 1805\n", "1.6.3.162": "baumeyerkevin : Fix build\n", "1.6.3.160": "" }, "1.8.9": { "1.6.2.159": "baumeyerkevin : Things\n", "1.6.2.158": "baumeyerkevin : Imporvement of 3D texts\n", "1.6.2.157": "baumeyerkevin : Fix encoding\n", "1.6.2.155": "baumeyerkevin : Update to mc 1.8.9, forge 1669, map 20160102\n" }, "1.8.8": { "1.6.2.153": "Robin : fix drawTexture function\n", "1.6.2.152": "Robin : fix last commit\n", "1.6.2.150": "baumeyerkevin : Keep hovering text in screen\n", "1.6.2.149": "baumeyerkevin : Update to mc\u0026forge 1.8.8\n" }, "1.8": { "1.6.1.148": "baumeyerkevin : Improve slider\n", "1.6.1.147": "Robin : java doc, again\n", "1.6.1.146": "Robin : fix some other javadoc error\n", "1.6.1.145": "Robin : fix some javadoc error\n", "1.6.1.144": "Robin : update gradle\n", "1.6.0.142": "baumeyerkevin : Change things\n", "1.6.0.141": "baumeyerkevin : New GUI\n", "1.6.0.140": "baumeyerkevin : Fix texture\n", "1.6.0.139": "baumeyerkevin : New gui system\n", "1.6.0.138": "baumeyerkevin : things\n", "1.6.0.137": "baumeyerkevin : Little fix\n\nbaumeyerkevin : Little fix\n", "1.6.0.136": "Robin : remove code about NHG\n", "1.6.0.135": "Robin : update forge, avoid to use reflexion for layer\n", "1.6.0.134": "jglrxavpok : Fixed crash on servers related to hats\n", "1.6.0.133": "", "1.6.0.132": "Robin : fix javadoc\n", "1.6.0.130": "", "1.6.0.129": "", "1.5.0.128": "", "1.5.0.127": "", "1.5.0.126": "", "1.5.0.125": "", "1.5.0.120": "", "1.5.0.119": "", "1.5.0.118": "" }, "1.7.2": { "1.4.2.84": "", "1.4.2.83": "", "1.4.2.82": "", "1.4.2.81": "", "1.4.2.80": "", "1.4.2.79": "", "1.4.1.76": "", "1.4.1.75": "", "1.4.0.72": "", "1.4.0.71": "", "1.4.0.70": "", "1.4.0.69": "", "1.4.0.68": "" }, "1.7.10": { "1.5.0.113": "", "1.5.0.112": "", "1.5.0.111": "", "1.5.0.110": "", "1.5.0.105": "", "1.5.0.103": "", "1.5.0.100": "", "1.4.4.99": "", "1.4.4.98": "", "1.4.4.97": "", "1.4.4.96": "", "1.4.4.95": "", "1.4.4.94": "", "1.4.4.93": "", "1.4.3.91": "", "1.4.3.90": "", "1.4.3.89": "", "1.4.3.88": "", "1.4.3.87": "" }, "1.10.2": { "1.7.0.176": "Superloup10 : Bump version, forge version and mappings\n" } }J’ai d’ailleurs remarqué un petit bug : la version 1.10 passe en dessous des autres vu que les versions sont comparés en tant que String, le problème est que je pense que ça alourdira trop le code si je créer un vrai comparateur de versions.
Au passage : la génération du changelog avec jenkins est très longue du au fait qu’il faut accéder à un json par version donc il faudrait que je fasse un peu de multi-threading pour essayer d’accélérer ça.
-
Il y a pas moyen de prendre le fichier existant et de simplement le modifier ?
C’est ce que je pensais faire en bash. -
@‘robin4002’:
Il y a pas moyen de prendre le fichier existant et de simplement le modifier ?
C’est ce que je pensais faire en bash.C’est à dire ? Ajouter à chaque fois la version au changelog quand on build le mod (par exemple) ?