| 217 | } |
| 218 | |
| 219 | func (m *Manager) loadPlugins(directory string) error { |
| 220 | if directory == "" { |
| 221 | return nil |
| 222 | } |
| 223 | |
| 224 | pluginFiles, err := os.ReadDir(directory) |
| 225 | if err != nil { |
| 226 | return fmt.Errorf("error while reading directory %s", err) |
| 227 | } |
| 228 | for _, f := range pluginFiles { |
| 229 | if f.IsDir() { |
| 230 | continue |
| 231 | } |
| 232 | |
| 233 | name := f.Name() |
| 234 | if strings.HasPrefix(name, ".") { |
| 235 | continue |
| 236 | } |
| 237 | |
| 238 | pluginPath := filepath.Join(directory, "./", name) |
| 239 | |
| 240 | fmt.Println("Loading plugin", pluginPath) |
| 241 | pRaw, err := plugin.Open(pluginPath) |
| 242 | if err != nil { |
| 243 | return pluginFileLoadError{name, err} |
| 244 | } |
| 245 | compatPlugin, err := compat.Wrap(pRaw) |
| 246 | if err != nil { |
| 247 | return pluginFileLoadError{name, err} |
| 248 | } |
| 249 | if err := m.LoadPlugin(compatPlugin); err != nil { |
| 250 | return pluginFileLoadError{name, err} |
| 251 | } |
| 252 | } |
| 253 | return nil |
| 254 | } |
| 255 | |
| 256 | // LoadPlugin loads a compat plugin, exported to sideload plugins for testing purposes. |
| 257 | func (m *Manager) LoadPlugin(compatPlugin compat.Plugin) error { |