diff --git a/run-pkg/main.go b/run-pkg/main.go index 0e50c5a..d2f227c 100644 --- a/run-pkg/main.go +++ b/run-pkg/main.go @@ -19,6 +19,7 @@ func main() { var arguments string var program string var workdir string + var exit_code int = 0 fallback_instance_path, ins_err := get_instance_path() @@ -59,7 +60,7 @@ func main() { cmdMap["command"] = "run" cmdMap["target"] = target - cmdMap["workdir"] = cwd + cmdMap["workdir"] = workdir cmdMap["arguments"] = arguments cmdMap["package"] = program @@ -85,14 +86,32 @@ func main() { for { buffer := make([]byte, 1024) n, err := ln.Read(buffer) + objmap := make(map[string]interface{}) if err == io.EOF { break } else if err != nil { log.Fatal(err) } - os.Stdout.Write(buffer[:n]) + err = json.Unmarshal(buffer[:n], &objmap) + if err != nil { + os.Stdout.Write(buffer[:n]) + } else { + command, has := objmap["command"] + if has && command == "end-command-pipe" { + status_code, has := objmap["status_code"] + if has { + exit_code = int(status_code.(float64)) + break + } else { + os.Stdout.Write(buffer[:n]) + } + } else { + os.Stdout.Write(buffer[:n]) + } + } } }() + os.Exit(exit_code) } func path_exists(path string) (bool, error) {