mirror of
https://github.com/mudler/luet.git
synced 2025-07-13 23:25:00 +00:00
* Reduce possibility of circular dependency Just by adding an import for bus to anything in the helper dir, we would run into a circular dependency due to how things are structured. That means that we cannot set any events for unpacking or docker helper pulling an image. This commit tries to work around this by doing several things. - Remove full imports of the helper module by segmentating some modules into their own submodule, like docker or match so just using a small match function doesnt bring the whole module - Removing a simple function to check if a dir exists from importing the full helper module and instead write the function (5 lines) - Using logrus in the bus module instead of logger, which avoids a circular dependency Signed-off-by: Itxaka <igarcia@suse.com> * Add two new events for unpacking an image Both pre and post unpacking an image Signed-off-by: Itxaka <igarcia@suse.com>
104 lines
3.5 KiB
Go
104 lines
3.5 KiB
Go
package bus
|
|
|
|
import (
|
|
"github.com/mudler/go-pluggable"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
// Package events
|
|
|
|
// EventPackageInstall is the event fired when a new package is being installed
|
|
EventPackageInstall pluggable.EventType = "package.install"
|
|
// EventPackageUnInstall is the event fired when a new package is being uninstalled
|
|
EventPackageUnInstall pluggable.EventType = "package.uninstall"
|
|
|
|
// Package build
|
|
|
|
// EventPackagePreBuild is the event fired before a package is being built
|
|
EventPackagePreBuild pluggable.EventType = "package.pre.build"
|
|
// EventPackagePreBuildArtifact is the event fired before a package tarball is being generated
|
|
EventPackagePreBuildArtifact pluggable.EventType = "package.pre.build_artifact"
|
|
// EventPackagePostBuildArtifact is the event fired after a package tarball is generated
|
|
EventPackagePostBuildArtifact pluggable.EventType = "package.post.build_artifact"
|
|
// EventPackagePostBuild is the event fired after a package was built
|
|
EventPackagePostBuild pluggable.EventType = "package.post.build"
|
|
|
|
// Image build
|
|
|
|
// EventImagePreBuild is the event fired before a image is being built
|
|
EventImagePreBuild pluggable.EventType = "image.pre.build"
|
|
// EventImagePrePull is the event fired before a image is being pulled
|
|
EventImagePrePull pluggable.EventType = "image.pre.pull"
|
|
// EventImagePrePush is the event fired before a image is being pushed
|
|
EventImagePrePush pluggable.EventType = "image.pre.push"
|
|
// EventImagePostBuild is the event fired after an image is being built
|
|
EventImagePostBuild pluggable.EventType = "image.post.build"
|
|
// EventImagePostPull is the event fired after an image is being pulled
|
|
EventImagePostPull pluggable.EventType = "image.post.pull"
|
|
// EventImagePostPush is the event fired after an image is being pushed
|
|
EventImagePostPush pluggable.EventType = "image.post.push"
|
|
|
|
// Repository events
|
|
|
|
// EventRepositoryPreBuild is the event fired before a repository is being built
|
|
EventRepositoryPreBuild pluggable.EventType = "repository.pre.build"
|
|
// EventRepositoryPostBuild is the event fired after a repository was built
|
|
EventRepositoryPostBuild pluggable.EventType = "repository.post.build"
|
|
|
|
// Image unpack
|
|
|
|
// EventImagePreUnPack is the event fired before unpacking an image to a local dir
|
|
EventImagePreUnPack pluggable.EventType = "image.pre.unpack"
|
|
// EventImagePostUnPack is the event fired after unpacking an image to a local dir
|
|
EventImagePostUnPack pluggable.EventType = "image.post.unpack"
|
|
)
|
|
|
|
// Manager is the bus instance manager, which subscribes plugins to events emitted by Luet
|
|
var Manager *Bus = &Bus{
|
|
Manager: pluggable.NewManager(
|
|
[]pluggable.EventType{
|
|
EventPackageInstall,
|
|
EventPackageUnInstall,
|
|
EventPackagePreBuild,
|
|
EventPackagePreBuildArtifact,
|
|
EventPackagePostBuildArtifact,
|
|
EventPackagePostBuild,
|
|
EventRepositoryPreBuild,
|
|
EventRepositoryPostBuild,
|
|
EventImagePreBuild,
|
|
EventImagePrePull,
|
|
EventImagePrePush,
|
|
EventImagePostBuild,
|
|
EventImagePostPull,
|
|
EventImagePostPush,
|
|
EventImagePreUnPack,
|
|
EventImagePostUnPack,
|
|
},
|
|
),
|
|
}
|
|
|
|
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() {
|
|
logrus.Fatal("Plugin", p.Name, "at", p.Executable, "Error", r.Error)
|
|
}
|
|
logrus.Debug(
|
|
"plugin_event",
|
|
"received from",
|
|
p.Name,
|
|
"at",
|
|
p.Executable,
|
|
r,
|
|
)
|
|
})
|
|
}
|
|
}
|