in internal/webserver_test_helper/webserver_test_helper.go [117:165]
func (h *WebserverHelper) Start() (func(), error) {
// First, try to find the binary in the project's bin directory
projectDir := findProjectDir()
binaryPath := BinaryName
if projectDir != "" {
candidatePath := fmt.Sprintf("%s/bin/%s", projectDir, BinaryName)
if _, err := os.Stat(candidatePath); err == nil {
binaryPath = candidatePath
}
}
// If not found in project bin, check PATH
if binaryPath == BinaryName {
path, err := exec.LookPath(BinaryName)
if err != nil {
return func() {}, fmt.Errorf("binary %s not found in <PROJECT_DIR>/bin or PATH: %w", BinaryName, err)
}
binaryPath = path
}
cmd := exec.Command(binaryPath, "webserver", "-index_dir", h.indexDir, "-rpc", "-listen", h.listen()) //nolint:gosec
cmd.Stdout = os.Stdout
if err := cmd.Start(); err != nil {
return func() {}, err
}
for !h.isReady() {
}
cancelFunc := func() {
proc, err := os.FindProcess(cmd.Process.Pid)
if err != nil {
slog.Error("find process error", "err", err)
}
if err := proc.Kill(); err != nil {
slog.Error("kill error", "err", err)
}
if err := cmd.Wait(); err != nil {
slog.Error("wait() error", "err", err)
}
}
return cancelFunc, nil
}