Un plugin core
est un service de base associé à la chaîne DSO.
Un plugin external
est un service supplémentaire facultatif.
Un hook
est un point de déclenchement dont le cycle de vie comprend plusieurs étapes (step
) : pre
, main
, post
, etc.
Tout plugin
peut s'enregistrer sur un hook
, à une étape donnée.
Exemple :
- Le plugin
gitlab
s'enregistre sur le hookcreateProject
, à l'étapemain
. - Le controller
createProjectController
déclenche le hookcreateProject
en lui associant unpayload
. - Le plugin
gitlab
réagit au déclenchement du hookcreateProject
et reçoit le payload associé du controller. - Le plugin
gitlab
effectue ses opérations (ex: création d'un groupe GitLab pour le projet). - Le plugin
gitlab
renvoie un objetresult
au controllercreateProjectController
, contenant unstatus
indiquant si tout s'est déroulé sans erreur ou non. - Le controller
createProjectController
enregistre ceresult
en base de donnée et s'arrête si lestatus
est en erreur.
{
// args come from controllers
args: {
projectName: 'toto',
orgName: 'titi',
},
failed: true || undefined
/*
[pluginName]: <PluginResult>
[pluginName]: <PluginResult>
...
*/
}
Note: Si un module réutilise son propre payload, il doit penser à renvoyer le précédent s'il ne veut pas l'écraser. Charge aussi au plugin de gérer les erreurs des étapes précédentes.
{
status: {
result: string('KO' || 'OK'),
message: string(),
},
vault: [
{
name: string(),
data: {
// secret data
}
}
] || undefined
// otherKey: {},
// anotherKey: {},
}