Skip to content

Commit fec7a17

Browse files
reafactor plugin utils
1 parent b052d95 commit fec7a17

File tree

4 files changed

+390
-455
lines changed

4 files changed

+390
-455
lines changed

plugins/plugin_manager.go

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package plugins
2+
3+
import (
4+
"fmt"
5+
6+
"gopkg.in/yaml.v3"
7+
)
8+
9+
// runtimePlugin represents a runtime plugin with methods to interact with it
10+
type runtimePlugin struct {
11+
Config PluginConfig
12+
ConfigPath string
13+
}
14+
15+
// PluginManager manages runtime and tool plugins
16+
type PluginManager struct {
17+
runtimePlugins map[string]*runtimePlugin
18+
}
19+
20+
var pluginManager *PluginManager
21+
22+
// GetPluginManager returns the singleton instance of PluginManager
23+
func GetPluginManager() *PluginManager {
24+
if pluginManager == nil {
25+
pluginManager = &PluginManager{
26+
runtimePlugins: make(map[string]*runtimePlugin),
27+
}
28+
}
29+
return pluginManager
30+
}
31+
32+
// GetRuntimeConfig returns the plugin configuration for a runtime
33+
func (pm *PluginManager) GetRuntimeConfig(name string) (PluginConfig, error) {
34+
plugin, err := loadPlugin(name)
35+
if err != nil {
36+
return PluginConfig{}, err
37+
}
38+
return plugin.Config, nil
39+
}
40+
41+
// GetToolConfig returns the plugin configuration for a tool
42+
func (pm *PluginManager) GetToolConfig(name string) (ToolPluginConfig, error) {
43+
// Always use forward slashes for embedded filesystem paths (for windows support)
44+
pluginPath := fmt.Sprintf(toolPluginYamlPathTemplate, name)
45+
46+
// Read from embedded filesystem
47+
data, err := toolsFS.ReadFile(pluginPath)
48+
if err != nil {
49+
return ToolPluginConfig{}, fmt.Errorf("error reading plugin.yaml for %s: %w", name, err)
50+
}
51+
52+
var config ToolPluginConfig
53+
err = yaml.Unmarshal(data, &config)
54+
if err != nil {
55+
return ToolPluginConfig{}, fmt.Errorf("error parsing plugin.yaml for %s: %w", name, err)
56+
}
57+
58+
return config, nil
59+
}
60+
61+
// GetRuntimeVersions returns a map of runtime names to their default versions
62+
func (pm *PluginManager) GetRuntimeVersions() map[string]string {
63+
versions := make(map[string]string)
64+
entries, err := pluginsFS.ReadDir("runtimes")
65+
if err != nil {
66+
return versions
67+
}
68+
69+
for _, entry := range entries {
70+
if !entry.IsDir() {
71+
continue
72+
}
73+
74+
name := entry.Name()
75+
plugin, err := loadPlugin(name)
76+
if err != nil {
77+
continue
78+
}
79+
80+
versions[name] = plugin.Config.DefaultVersion
81+
}
82+
83+
return versions
84+
}
85+
86+
// GetToolVersions returns a map of tool names to their default versions
87+
func (pm *PluginManager) GetToolVersions() map[string]string {
88+
versions := make(map[string]string)
89+
entries, err := toolsFS.ReadDir("tools")
90+
if err != nil {
91+
return versions
92+
}
93+
94+
for _, entry := range entries {
95+
if !entry.IsDir() {
96+
continue
97+
}
98+
99+
name := entry.Name()
100+
pluginPath := fmt.Sprintf(toolPluginYamlPathTemplate, name)
101+
data, err := toolsFS.ReadFile(pluginPath)
102+
if err != nil {
103+
continue
104+
}
105+
106+
var config ToolPluginConfig
107+
if err := yaml.Unmarshal(data, &config); err != nil {
108+
continue
109+
}
110+
111+
versions[name] = config.DefaultVersion
112+
}
113+
114+
return versions
115+
}
116+
117+
// GetToolRuntimeDependencies returns a map of tool names to their runtime dependencies
118+
func (pm *PluginManager) GetToolRuntimeDependencies() map[string]string {
119+
dependencies := make(map[string]string)
120+
entries, err := toolsFS.ReadDir("tools")
121+
if err != nil {
122+
return dependencies
123+
}
124+
125+
for _, entry := range entries {
126+
if !entry.IsDir() {
127+
continue
128+
}
129+
130+
name := entry.Name()
131+
pluginPath := fmt.Sprintf(toolPluginYamlPathTemplate, name)
132+
data, err := toolsFS.ReadFile(pluginPath)
133+
if err != nil {
134+
continue
135+
}
136+
137+
var config ToolPluginConfig
138+
if err := yaml.Unmarshal(data, &config); err != nil {
139+
continue
140+
}
141+
142+
if config.Runtime != "" {
143+
dependencies[name] = config.Runtime
144+
}
145+
}
146+
147+
return dependencies
148+
}

0 commit comments

Comments
 (0)