You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Actuellement, la logique transversale des plugins (apply aka handleCron/handleUpsert, destroy aka handleDelete, gestion des flags, autoSync/suspend, Cron, event, Log) est dupliquée dans chaque plugin (gitlab, harbor, keycloak, vault, argocd, nexus, sonarqube…). Cette duplication devient critique : la fonctionnalité autoSync/suspend sur un nombre variable de plugins et la gestion des flags de plugin (cf. #2281) répètent exactement la même plomberie à chaque implémentation.
L'objectif est d'introduire un PluginManager qui abstrait l'ensemble de cette plomberie, sur le modèle d'un Module/Controller NestJS, afin que chaque plugin ne déclare plus que ses intents (apply / destroy) et délègue tout le cycle de vie (Log, Cron, event, autoSync/Suspend, flags) au gestionnaire.
⚠️ Aucune solution de mutualisation du code dupliqué de #2281 (gestion des flags, autoSync/suspend) n'a encore été commitée. Ce ticket trace l'abstraction à concevoir.
Exemples simples
Cible (esquisse issue de la réflexion avec Kevin, non figée) :
// gitlab.plugin.ts
@Plugin("gitlab")classGitLabPlugin{
@Apply()asyncapply(): PluginResult{// do stuff}
@Destroy()asyncdestroy(): PluginResult{// do stuff}}// main.service.ts
@Module({providers: [PluginManager.forRoot({/* config */}),GitLabPlugin],})classMainModule{}
PluginManager reprend une structure similaire à un Controller/Module mais n'est pas encore figé.
Spécifications techniques
PluginManager.forRoot({ ... }) enregistre et initialise les plugins fournis comme providers du module.
Décorateurs @Plugin(name), @Apply(), @Destroy() pour déclarer le cycle de vie du plugin.
Le PluginManager abstrait et centralise :
Log (journalisation standardisée par plugin),
Cron (planification périodique),
event (souscription/émission d'évènements),
autoSync / Suspend (mécanisme actuellement dupliqué sur N plugins),
Description
Actuellement, la logique transversale des plugins (
applyaka handleCron/handleUpsert,destroyaka handleDelete, gestion des flags,autoSync/suspend,Cron,event,Log) est dupliquée dans chaque plugin (gitlab, harbor, keycloak, vault, argocd, nexus, sonarqube…). Cette duplication devient critique : la fonctionnalitéautoSync/suspendsur un nombre variable de plugins et la gestion des flags de plugin (cf. #2281) répètent exactement la même plomberie à chaque implémentation.L'objectif est d'introduire un
PluginManagerqui abstrait l'ensemble de cette plomberie, sur le modèle d'unModule/ControllerNestJS, afin que chaque plugin ne déclare plus que ses intents (apply/destroy) et délègue tout le cycle de vie (Log, Cron, event, autoSync/Suspend, flags) au gestionnaire.PRs liées
Exemples simples
Cible (esquisse issue de la réflexion avec Kevin, non figée) :
PluginManagerreprend une structure similaire à unController/Modulemais n'est pas encore figé.Spécifications techniques
PluginManager.forRoot({ ... })enregistre et initialise les plugins fournis comme providers du module.@Plugin(name),@Apply(),@Destroy()pour déclarer le cycle de vie du plugin.PluginManagerabstrait et centralise :PluginManager) reste à valider avec l'équipe (réflexion en cours avec Kevin).Définition du fini
PluginManagerabstrait la plomberie commune (Log, Cron, event, autoSync/Suspend, flags).