MCPcopy Create free account
hub / github.com/chainloop-dev/chainloop / load

Method load

app/controlplane/plugins/plugins.go:146–183  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

144}
145
146func (l *directoryLoader) load() (sdk.AvailablePlugins, error) {
147 var plugins = make(sdk.AvailablePlugins, 0)
148 if l.pluginsDir == "" {
149 return plugins, nil
150 }
151
152 const pluginPrefix = "chainloop-plugin-"
153 var pluginBlob = fmt.Sprintf("%s*", pluginPrefix)
154
155 l.logger.Infow("msg", "loading plugins", "dir", l.pluginsDir, "pattern", pluginBlob)
156 files, err := plugin.Discover(pluginBlob, l.pluginsDir)
157 if err != nil {
158 return nil, fmt.Errorf("failed to discover plugins: %w", err)
159 }
160
161 var pluginsMap = make(map[string]*sdk.FanOutP)
162 for _, f := range files {
163 d, err := l.initializer.Init(f)
164 if err != nil {
165 return nil, fmt.Errorf("failed to load plugin: %w", err)
166 }
167
168 if _, ok := pluginsMap[d.Describe().ID]; ok {
169 l.logger.Infow("msg", "duplicate plugin, skipping", "plugin", d.Describe().ID)
170 d.DisposeFunc()
171 continue
172 }
173
174 pluginsMap[d.Describe().ID] = d
175 }
176
177 for _, p := range pluginsMap {
178 l.logger.Infow("msg", "loaded", "type", "plugin", "plugin", p.String())
179 plugins = append(plugins, p)
180 }
181
182 return plugins, nil
183}
184
185func (i *goPluginInitializer) Init(path string) (*sdk.FanOutP, error) {
186 pluginSet := plugin.PluginSet{

Callers 1

TestDirectoryLoaderFunction · 0.95

Calls 5

DiscoverMethod · 0.80
InfowMethod · 0.65
InitMethod · 0.65
DescribeMethod · 0.65
StringMethod · 0.65

Tested by 1

TestDirectoryLoaderFunction · 0.76