From 0d2d34e3fb3e178038a87608773cfa5bff89399f Mon Sep 17 00:00:00 2001 From: DaanSelen Date: Wed, 1 Apr 2026 12:24:02 +0200 Subject: [PATCH] core: readd runner.go --- src/modules/runner/runner.go | 70 ++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/modules/runner/runner.go diff --git a/src/modules/runner/runner.go b/src/modules/runner/runner.go new file mode 100644 index 0000000..4bd9ae5 --- /dev/null +++ b/src/modules/runner/runner.go @@ -0,0 +1,70 @@ +package runner + +import ( + "log" + "os" + "os/exec" + "regexp" + "runtime" +) + +var ansi = regexp.MustCompile(`\x1b\[[0-9;]*m`) + +func FindMeshbookBinary() (bool, string) { + var osBin string + + switch runtime.GOOS { + case "windows": + osBin = "meshbook.exe" + case "linux": + osBin = "meshbook" + default: + log.Println("undefined operating system") + } + + log.Println("going to search for:", osBin) + + binaryFound := false + var binaryPath string + for _, f := range []string{("./" + osBin), ("./bin/" + osBin)} { + objInfo, err := os.Stat(f) + + if err == nil && objInfo.Mode().IsRegular() { + binaryFound = true + binaryPath = f + log.Printf("found binary at %s", f) + break + } + } + + if binaryFound { + return true, binaryPath + } else { + log.Println("binary not found!") + return false, "" + } +} + +func RunMeshbook(binPath, bookPath, targGroup string) (bool, string) { + var args []string + if len(bookPath) == 0 { + args = []string{"--help"} + } else { + args = []string{"--nograce", "--indent", "-mb", bookPath, "--group", targGroup} + } + log.Printf("running with parameters: %v", args) + + cmd := exec.Command(binPath, args...) + + outputData, err := cmd.CombinedOutput() + cleanData := ansi.ReplaceAllString(string(outputData), "") + + if err != nil { + log.Printf("something went wrong when running the command: %v", err) + log.Printf("captured output: %s", cleanData) + + return false, cleanData + } else { + return true, cleanData + } +}