41 lines
939 B
Go
41 lines
939 B
Go
// Package opencode provides OpenCode plugin management.
|
|
package opencode
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
//go:embed plugin/gastown.js
|
|
var pluginFS embed.FS
|
|
|
|
// EnsurePluginAt ensures the Gas Town OpenCode plugin exists.
|
|
// If the file already exists, it's left unchanged.
|
|
func EnsurePluginAt(workDir, pluginDir, pluginFile string) error {
|
|
if pluginDir == "" || pluginFile == "" {
|
|
return nil
|
|
}
|
|
|
|
pluginPath := filepath.Join(workDir, pluginDir, pluginFile)
|
|
if _, err := os.Stat(pluginPath); err == nil {
|
|
return nil
|
|
}
|
|
|
|
if err := os.MkdirAll(filepath.Dir(pluginPath), 0755); err != nil {
|
|
return fmt.Errorf("creating plugin directory: %w", err)
|
|
}
|
|
|
|
content, err := pluginFS.ReadFile("plugin/gastown.js")
|
|
if err != nil {
|
|
return fmt.Errorf("reading plugin template: %w", err)
|
|
}
|
|
|
|
if err := os.WriteFile(pluginPath, content, 0644); err != nil {
|
|
return fmt.Errorf("writing plugin: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|