plugins: Make execution fail if loaded plugins are erroring, print debug output on emitted responses

Now plugins failing to answer make execution fail, adapt tests
This commit is contained in:
Ettore Di Giacinto 2021-05-13 13:20:23 +02:00
parent 1e617b0c67
commit fd12227d53
3 changed files with 50 additions and 20 deletions

View File

@ -97,7 +97,7 @@ To build a package, from a tree definition:
plugin := viper.GetStringSlice("plugin") plugin := viper.GetStringSlice("plugin")
bus.Manager.Load(plugin...).Register() bus.Manager.Initialize(plugin...)
if len(bus.Manager.Plugins) != 0 { if len(bus.Manager.Plugins) != 0 {
Info(":lollipop:Enabled plugins:") Info(":lollipop:Enabled plugins:")
for _, p := range bus.Manager.Plugins { for _, p := range bus.Manager.Plugins {

View File

@ -1,6 +1,8 @@
package bus package bus
import ( import (
. "github.com/mudler/luet/pkg/logger"
"github.com/mudler/go-pluggable" "github.com/mudler/go-pluggable"
) )
@ -47,21 +49,47 @@ var (
) )
// Manager is the bus instance manager, which subscribes plugins to events emitted by Luet // Manager is the bus instance manager, which subscribes plugins to events emitted by Luet
var Manager *pluggable.Manager = pluggable.NewManager( var Manager *Bus = &Bus{
[]pluggable.EventType{ Manager: pluggable.NewManager(
EventPackageInstall, []pluggable.EventType{
EventPackageUnInstall, EventPackageInstall,
EventPackagePreBuild, EventPackageUnInstall,
EventPackagePreBuildArtifact, EventPackagePreBuild,
EventPackagePostBuildArtifact, EventPackagePreBuildArtifact,
EventPackagePostBuild, EventPackagePostBuildArtifact,
EventRepositoryPreBuild, EventPackagePostBuild,
EventRepositoryPostBuild, EventRepositoryPreBuild,
EventImagePreBuild, EventRepositoryPostBuild,
EventImagePrePull, EventImagePreBuild,
EventImagePrePush, EventImagePrePull,
EventImagePostBuild, EventImagePrePush,
EventImagePostPull, EventImagePostBuild,
EventImagePostPush, EventImagePostPull,
}, EventImagePostPush,
) },
),
}
type Bus struct {
*pluggable.Manager
}
func (b *Bus) Initialize(plugin ...string) {
b.Manager.Load(plugin...).Register()
for _, e := range b.Manager.Events {
b.Manager.Response(e, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
if r.Errored() {
Fatal("Plugin", p.Name, "at", p.Executable, "Error", r.Error)
}
Debug(
"plugin_event",
"received from",
p.Name,
"at",
p.Executable,
r,
)
})
}
}

View File

@ -1,3 +1,5 @@
#!/bin/bash #!/bin/bash
echo "$1" >> $EVENT_FILE echo "$1" >> $EVENT_FILE
echo "$2" >> $PAYLOAD_FILE echo "$2" >> $PAYLOAD_FILE
echo "{}"