in experiments/conductor/cmd/runner/runner.go [733:836]
func inferProtoPath(opts *RunnerOptions, branch Branch, workDir string) string {
var protoDir = ""
var svcNm = ""
if branch.Proto != "" {
svcNm = branch.Proto
} else if branch.ProtoSvc != "" {
dirs := strings.Split(branch.ProtoSvc, ".")
svcNm = dirs[len(dirs)-1]
} else if branch.Resource != "" {
svcNm = branch.Resource
} else {
return ""
}
if branch.ProtoPath != "" {
dirs := strings.Split(branch.ProtoPath, ".")
protoDir = filepath.Join(dirs[:len(dirs)-1]...)
} else if branch.ProtoSvc != "" {
dirs := strings.Split(branch.ProtoSvc, ".")
protoDir = filepath.Join(dirs[:len(dirs)-1]...)
} else if branch.Package != "" {
dirs := strings.Split(branch.Package, ".")
protoDir = filepath.Join(dirs...)
} else {
return ""
}
searchPath := filepath.Join(workDir, protoDir, "*.proto")
files, err := filepath.Glob(searchPath)
if err != nil {
log.Printf("Glob error %v", err)
return ""
}
if len(files) == 1 {
localFile, _ := strings.CutPrefix(files[0], workDir+string(filepath.Separator))
log.Printf("Glob for %s matched %s", branch.Name, localFile)
return localFile
}
searchList := ""
first := true
args := []string{"-iH", fmt.Sprintf("^service %s", svcNm)}
for _, file := range files {
localFile, _ := strings.CutPrefix(file, workDir+string(filepath.Separator))
args = append(args, localFile)
if first {
searchList = localFile
first = false
} else {
searchList += " " + localFile
}
}
cfg := CommandConfig{
Name: "Search for service",
Cmd: "egrep",
Args: args,
WorkDir: workDir,
MaxAttempts: 2,
}
output, err := executeCommand(opts, cfg)
if err != nil {
var exitError *exec.ExitError
if errors.As(err, &exitError) {
args := []string{"-iH", "^service"}
for _, file := range files {
localFile, _ := strings.CutPrefix(file, workDir+string(filepath.Separator))
args = append(args, localFile)
if first {
searchList = localFile
first = false
} else {
searchList += " " + localFile
}
}
cfg = CommandConfig{
Name: "Search for any service",
Cmd: "egrep",
Args: args,
WorkDir: workDir,
MaxAttempts: 2,
}
output, err = executeCommand(opts, cfg)
if err != nil {
log.Printf("Working in directory %s", workDir)
log.Printf("Got response2 %v", output.Stderr)
log.Printf("Find proto file error: %q\n", err)
return ""
}
} else {
log.Printf("Working in directory %s", workDir)
log.Printf("Find proto file error: %q\n", err)
return ""
}
}
vals := strings.Split(output.Stdout, ":")
if len(vals) <= 1 {
log.Printf("ERROR: something wrong with grep response: %q\n", output.Stdout)
return ""
}
return vals[0]
}