49 lines
1019 B
Go
49 lines
1019 B
Go
package tui
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// findAutarchDir walks up from the server-manager binary location to find
|
|
// the AUTARCH project root (identified by autarch_settings.conf).
|
|
func findAutarchDir() string {
|
|
// Try well-known paths first
|
|
candidates := []string{
|
|
"/opt/autarch",
|
|
"/srv/autarch",
|
|
"/home/autarch",
|
|
}
|
|
|
|
// Also try relative to the executable
|
|
exe, err := os.Executable()
|
|
if err == nil {
|
|
dir := filepath.Dir(exe)
|
|
// services/server-manager/ → ../../
|
|
candidates = append([]string{
|
|
filepath.Join(dir, "..", ".."),
|
|
filepath.Join(dir, ".."),
|
|
dir,
|
|
}, candidates...)
|
|
}
|
|
|
|
// Also check cwd
|
|
if cwd, err := os.Getwd(); err == nil {
|
|
candidates = append([]string{cwd, filepath.Join(cwd, "..", "..")}, candidates...)
|
|
}
|
|
|
|
for _, c := range candidates {
|
|
abs, err := filepath.Abs(c)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
conf := filepath.Join(abs, "autarch_settings.conf")
|
|
if _, err := os.Stat(conf); err == nil {
|
|
return abs
|
|
}
|
|
}
|
|
|
|
// Fallback
|
|
return "/opt/autarch"
|
|
}
|