From 6bd886f4ee193e08a6aa0d5c9a41a611f2d84121 Mon Sep 17 00:00:00 2001 From: katamaz Date: Fri, 22 May 2026 19:18:50 +0300 Subject: [PATCH] change to normal folder seek --- main.go | 37 ++++++++++++++++++++++++++++++++++--- scriptsRunner.go | 8 +++++--- utils.go | 6 +++--- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 11a9ff2..c72bf96 100644 --- a/main.go +++ b/main.go @@ -15,11 +15,19 @@ import ( "github.com/spf13/cobra" ) -var runners = GetScriptsRunners() +var baseDir string +var runners []ScriptRunner var silent, verbose, listModules, listRunners bool func init() { + var err error + baseDir, err = exeDir() + if err != nil { + log.Error("Unable to determine executable folder, falling back to current directory:", err) + baseDir = "." + } + rootCmd.PersistentFlags().BoolVar(&silent, "silent", false, "suppress all output") rootCmd.PersistentFlags().BoolVar(&verbose, "verbose", false, "enable debug output") rootCmd.PersistentFlags().BoolVar(&listModules, "list", false, "list configured applications and modules") @@ -30,12 +38,15 @@ func init() { initLogger(silent, verbose && !silent) } - if !(folderExists(("./config/"))) { + configPath := filepath.Join(baseDir, "config") + if !folderExists(configPath) { log.Info("No config folder found, creating new...") - if err := os.Mkdir("./config/", 0750); err != nil { + if err := os.Mkdir(configPath, 0750); err != nil { log.Fatalln("Failed to create config folder") } } + + runners = GetScriptsRunners() } func initLogger(silent bool, verbose bool) { @@ -43,6 +54,26 @@ func initLogger(silent bool, verbose bool) { verboseMode = verbose } +func exeDir() (string, error) { + exe, err := os.Executable() + if err != nil { + return "", err + } + exe, err = filepath.EvalSymlinks(exe) + if err != nil { + return "", err + } + return filepath.Dir(exe), nil +} + +func configFolder() string { + return filepath.Join(baseDir, "config") +} + +func runnersFolder() string { + return filepath.Join(baseDir, "runners") +} + var rootCmd = &cobra.Command{ Use: "dtool [application] [action] [module]", Short: "DengiTool", diff --git a/scriptsRunner.go b/scriptsRunner.go index 4266799..bfbb741 100644 --- a/scriptsRunner.go +++ b/scriptsRunner.go @@ -2,6 +2,7 @@ package main import ( "os" + "path/filepath" "strings" "gopkg.in/yaml.v3" @@ -16,12 +17,13 @@ type ScriptRunner struct { func GetScriptsRunners() []ScriptRunner { runners := []ScriptRunner{} - if folderExists("./runners") { - entries, err := os.ReadDir("./runners/") + runnersDir := runnersFolder() + if folderExists(runnersDir) { + entries, err := os.ReadDir(runnersDir) if err == nil { for _, e := range entries { if !e.IsDir() && strings.HasSuffix(e.Name(), ".yml") { - runner, err := os.ReadFile("./runners/" + e.Name()) + runner, err := os.ReadFile(filepath.Join(runnersDir, e.Name())) if err == nil { var rnr ScriptRunner if err := yaml.Unmarshal(runner, &rnr); err == nil { diff --git a/utils.go b/utils.go index 7bbd14e..e72adda 100644 --- a/utils.go +++ b/utils.go @@ -49,7 +49,7 @@ func joinOutput(outputs ...string) string { } func readAppModule(app, module string) AppModule { - path := filepath.Join(".", "config", app, module) + path := filepath.Join(configFolder(), app, module) name := module check := "SCRIPT" configPath := filepath.Join(path, "config.yml") @@ -73,7 +73,7 @@ func readAppModule(app, module string) AppModule { func readApplication(folderName string) Application { name := folderName - appFolder := filepath.Join(".", "config", folderName) + appFolder := filepath.Join(configFolder(), folderName) configPath := filepath.Join(appFolder, "config.yml") if fileExists(configPath) { configF, err := os.ReadFile(configPath) @@ -100,7 +100,7 @@ func readApplication(folderName string) Application { } func listApplications() []Application { - entries, err := os.ReadDir("./config") + entries, err := os.ReadDir(configFolder()) if err != nil { log.Fatalln(err) }