Pulse/internal/config/detect_root.go

37 lines
860 B
Go

package config
import (
"os"
"path/filepath"
"strings"
)
// detectAppRoot attempts to find the application root directory
func detectAppRoot() string {
// 1. Check environment variable
if root := os.Getenv("PULSE_APP_ROOT"); root != "" {
return root
}
// 2. Get executable path
exe, err := os.Executable()
if err == nil {
// If running via "go run", executable is in /tmp, which isn't helpful for finding source files
// But in production, it's correct.
// Check if we are in a temp dir (go run)
if strings.Contains(exe, os.TempDir()) || strings.Contains(exe, "/var/folders/") {
// Fallback to current working directory
if cwd, err := os.Getwd(); err == nil {
return cwd
}
}
return filepath.Dir(exe)
}
// 3. Fallback to current working directory
if cwd, err := os.Getwd(); err == nil {
return cwd
}
return "."
}