package jobqueue import ( "os/exec" "strings" ) // ShellResult is a result of a shell script type ShellResult struct { Output string Error string ExitCode int } type ShellRunnable struct { ScriptPath string } func (s *ShellRunnable) Run() (RunResult[ShellResult], error) { cmd := exec.Command("sh", s.ScriptPath) output, err := cmd.Output() var stderr []byte if err != nil { stderr = err.(*exec.ExitError).Stderr } exitCode := 0 if err != nil { if exitError, ok := err.(*exec.ExitError); ok { exitCode = exitError.ExitCode() } return RunResult[ShellResult]{ Status: ResultStatusFailed, Data: ShellResult{ Output: string(output), ExitCode: exitCode, Error: string(stderr), }, }, err } return RunResult[ShellResult]{ Status: ResultStatusSuccess, Data: ShellResult{ Output: strings.TrimSpace(string(output)), ExitCode: exitCode, Error: string(stderr), }, }, nil }