Make GetProjectRoot return arbitrary levels of parent directories.

This commit is contained in:
George Suntres
2026-04-27 17:08:57 -04:00
parent 285a72f18b
commit 23d838c1b6

23
fs.go
View File

@@ -15,25 +15,20 @@ func Rootify(path string) string {
return filepath.Join(root, path)
}
// func GetProjectRoot() string {
// _, b, _, _ := runtime.Caller(0)
// // b is the absolute path to this specific .go file
// // 1st Dir() gets the folder containing the file
// // 2nd Dir() gets the parent of that folder
// return filepath.Dir(filepath.Dir(b))
// }
func GetProjectRoot() (string, error) {
exePath, err := os.Executable()
func GetProjectRoot(dir... bool) (string, error) {
exeDir, err := os.Executable()
if err != nil {
return "", err
}
exeDir := filepath.Dir(exePath)
for i, d := range dir {
exeDir = filepath.Dir(exeDir)
// // adjust depending on your structure
// // e.g. binary is in /project/bin/app → go up one level
// root := filepath.Dir(exeDir)
// up to 3
if i > 3 {
break
}
}
return exeDir, nil
}