Plugin post installation hook

Bonjour,

Je souhaiterais avoir une méthode de « post installation » de mes plugins, donc juste après le download et le move des fichiers, que ce soit après une première installation ou une mise à jour.
Un premier cas d’usage, mais il y en aura peut-être d’autres: installer les dépendances composer.

Je sais que cela peut aussi être fait via le core et le packages.json mais dans mon cas ca n’est pas possible notamment car je veux créer une venv python même sous debian 11 ce qui n’est pas possible avec le core donc j’utilise exclusivement la méthode « install_apt.sh » (et c’est une hypothèse de base qui ne changera pas).
Une deuxième raison c’est que je ne veux pas que le composer.lock soit touché, les dépendances doivent être installées tels que défini dans le composer.lock.

Pour répondre à ce besoin:

  1. j’ai essayé avec la fonction [plugin]_install() de plugin_info\install.php mais c’est trop tard car le core charge déjà la class et si les fichiers requis ne sont pas là, ca crash jeedom (http 500 et il est mort); étrangement sous php8 ca passe.

  2. J’ai testé la fonction [plugin]_pre_update() de plugin_info\pre_install.php mais ca ne convient pas car cette fonction ne s’exécute que lors de mise à jour et exécute l’ancienne version de la fonction.
    D’ailleurs le sujet a déjà été abordé, mais je ne vois pas comment cette fonction peut-être utilisée même lors de mise à jour puisque le problème est qu’elle exécute le code de la version précédente du plugin car les nouveaux fichiers n’ont pas encore été déplacé à la destination finale.

  3. du coup j’ai créé (sur ma dev) une méthode [plugin]_post_install():

  • appelée vers la fin de update::postInstallUpdate()
  • qui pour l’instant se trouve dans le fichier plugin_info\pre_install.php (la logique que j’ai appliquée est que ce fichier contient des fonctions qui s’exécutent avant les fonctions de plugin_info\install.php) mais à valider si emplacement ok?
  • je vous accorde que donc au final on aura « quelque part » une fonction qui se nomme [plugin]_post_install() qui en fait va s’exécuter avant la fonction [plugin]_install() (qui devrait être renommée [plugin]_activate() je trouve)
    j’ai hésité quelques secondes avec des noms tel que « post_pre_install » ou « pre_post_install » :grin: … on va encore voir des devs râler, c’est certain :slight_smile:

Donc ma requête à tous et particulièrement à @Loic : est-ce que dans les grandes lignes ca vous semble un besoin valide dans un premier temps?
et coté solution, est-ce que je fais un PR pour que vous puissiez visualiser l’implémentation? ou quelqu’un a-t-il déjà fait autrement ou a une autre idée?
une meilleur idée de nom de fonction et/ou d’emplacement de celle-ci?

Si pas… je n’ai pas de solution pour mes installs et je reste avec ce dossier vendor dans mes plugins … au moins jusqu’à ce que tout le monde soit sous php8.

2 « J'aime »

Bonjour,

+1 pour cette fonction qui serait très utile. Très intéressé pour certains de mes plugins.

Faudrait juste trouver une logique à ces noms de fonctions pour qu’elles parlent au plus grand nombre :crazy_face: (mais là je suis pas encore assez réveillé pour faire des propositions qui auraient un sens lol), sinon bah on s’adaptera, du moment que c’est bien documenté tout ira bien :+1:

Bonne journée,

TiTidom.

Bonjour,
Je veux bien un pr pour visualiser, en soit pas de soucis a rajouter une fonction le plus important va etre son nom, rappeller post_install si c’est pas une installation ca me gene un peu

Bon, sorry, j’ai créé la branche sur l’organisation jeedom et pas chez moi mais c’est pas très grave je pense, elle est ici: GitHub - jeedom/core at post_market_install et je ferai le PR vers alpha si c’est ok mais tu peux voir la différence qui du coup se résume à une ligne ici: add post_market_install · jeedom/core@7584c4c · GitHub

finalement j’ai renommé la fonction [plugin]_post_market_install() et je l’ai mise dans plugin_info\install.php (moins de modif dans le core)
je suis toujours pas 100% convaincu du nom mais c’est moins pire que ce que j’écrivais ci-dessus je pense

j’ai mis à jour mon plugin-gotify en beta pour tester car il faut tester en installant depuis le market (ce qui n’a aucun impact pour qui que ce soit puisqu’il faut avoir le core modifié pour ça):

function gotify_post_market_install() {
    log::add('gotify', 'alert', 'post install');
}

Salut,
Désolé pour le delai. Ca me semble tout bon pour moi, la modification n’aura pas un gros impact en cas de soucis tu peux faire un pr sur l’alpha avec ca.

1 « J'aime »

un délai de 17h… ca va, on va survivre :wink:

image

le nom de fonction semble suffisamment clair à tout le monde?
je fais le PR (add post_market_install by Mips2648 · Pull Request #2966 · jeedom/core · GitHub) avec ca mais si quelqu’un a une meilleur idée dans les heures ou quelques jours qui arrivent il sera toujours temps de modifier => donnez votre avis.

1 « J'aime »

Bonjour,

super tout ca.

Concernant le nom, la seule chose qui me « dérange » (mot un peu fort, mais j’en ai pas d’autres sous la main :stuck_out_tongue: ) c’est que si l’install se fait via github par exemple, le nom de la fonction va faire bizarre, non ?

Autres propositions : post_files_install ? post_package_install ? post_getfiles_install ? post_plugin_install ? (pour rester générique via à vis du market ou github) ?

TiTidom.

raah j’avais hésité

tu fais le PR? :stuck_out_tongue:

ou alors on fait un sondage :sweat_smile:

Salut,

Le PR est fait : change post_market_install to post_plugin_install by TiTidom-RC · Pull Request #2968 · jeedom/core · GitHub

TiTidom.