diff --git a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go index a8a1c6b5a2f..dcf8a9f0630 100644 --- a/pkg/plugins/plugins.go +++ b/pkg/plugins/plugins.go @@ -90,6 +90,10 @@ func scan(pluginDir string) error { } log.Info("Plugins: Scaning dir %s", pluginDir) + if util.ContainsDistFolder(pluginDir) { + log.Info("Plugins: Found dist folder in %s", pluginDir) + pluginDir = filepath.Join(pluginDir, "dist") + } if err := util.Walk(pluginDir, true, true, scanner.walker); err != nil { if pluginDir != "data/plugins" { diff --git a/pkg/util/filepath.go b/pkg/util/filepath.go index d0e27926956..2811c2bb93f 100644 --- a/pkg/util/filepath.go +++ b/pkg/util/filepath.go @@ -44,8 +44,7 @@ func Walk(path string, followSymlinks bool, detectSymlinkInfiniteLoop bool, walk // //If resolvedPath is "", then we are not following symbolic links. //If symlinkPathsFollowed is not nil, then we need to detect infinite loop. -func walk(path string, info os.FileInfo, resolvedPath string, - symlinkPathsFollowed map[string]bool, walkFn WalkFunc) error { +func walk(path string, info os.FileInfo, resolvedPath string, symlinkPathsFollowed map[string]bool, walkFn WalkFunc) error { if info == nil { return errors.New("Walk: Nil FileInfo passed") } @@ -96,3 +95,23 @@ func walk(path string, info os.FileInfo, resolvedPath string, } return nil } + +func ContainsDistFolder(path string) bool { + info, err := os.Lstat(path) + if err != nil { + return false + } + + if !info.IsDir() { + return false + } + + list, err := ioutil.ReadDir(path) + for _, fileInfo := range list { + if fileInfo.IsDir() && fileInfo.Name() == "dist" { + return true + } + } + + return false +}