| 77 | } |
| 78 | |
| 79 | func outputJSONGo(cmd string, args ...string) ([]byte, error) { |
| 80 | var buf bytes.Buffer |
| 81 | if err := execGo(&buf, os.Stderr, cmd, args...); err != nil { |
| 82 | return nil, err |
| 83 | } |
| 84 | raw := buf.String() |
| 85 | jsonStartIdx := strings.Index(raw, "{") |
| 86 | if jsonStartIdx == -1 { |
| 87 | return nil, fmt.Errorf("No JSON found in output") |
| 88 | } |
| 89 | start := raw[jsonStartIdx:] |
| 90 | jsonEndIdx := strings.Index(start, "}") |
| 91 | if jsonEndIdx == -1 { |
| 92 | return nil, fmt.Errorf("No JSON found in output") |
| 93 | } |
| 94 | return []byte(start[:jsonEndIdx+1]), nil |
| 95 | } |
| 96 | |
| 97 | func runGoTool(args ...string) error { |
| 98 | return runGoFrom("tools", append([]string{"-exec", "go run exec_from.go -dir .."}, args...)...) |