Go Test
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Port string
|
||||
DebugMode bool
|
||||
ColgToken string
|
||||
HelperToken string
|
||||
HelperID string
|
||||
PythonExec string
|
||||
ProjectRoot string
|
||||
}
|
||||
|
||||
func Load() (Config, error) {
|
||||
projectRoot, err := detectProjectRoot()
|
||||
if err != nil {
|
||||
return Config{}, err
|
||||
}
|
||||
|
||||
return Config{
|
||||
Port: envOrDefault("PORT", "27173"),
|
||||
DebugMode: envBoolOrDefault("DEBUG_MODE", true),
|
||||
ColgToken: os.Getenv("COLG_TOKEN"),
|
||||
HelperToken: os.Getenv("HELPER_TOKEN"),
|
||||
HelperID: os.Getenv("HELPER_ID"),
|
||||
PythonExec: pythonExecOrDefault(projectRoot),
|
||||
ProjectRoot: projectRoot,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func pythonExecOrDefault(projectRoot string) string {
|
||||
if value := os.Getenv("PYTHON_EXEC"); value != "" {
|
||||
return value
|
||||
}
|
||||
venvPython := filepath.Join(projectRoot, ".venv", "bin", "python")
|
||||
if fileExists(venvPython) {
|
||||
return venvPython
|
||||
}
|
||||
return "python3"
|
||||
}
|
||||
|
||||
func detectProjectRoot() (string, error) {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
current := wd
|
||||
for {
|
||||
if fileExists(filepath.Join(current, "openapi", "jobs.json")) {
|
||||
return current, nil
|
||||
}
|
||||
|
||||
parent := filepath.Dir(current)
|
||||
if parent == current {
|
||||
return "", fmt.Errorf("unable to locate project root from %s", wd)
|
||||
}
|
||||
current = parent
|
||||
}
|
||||
}
|
||||
|
||||
func fileExists(path string) bool {
|
||||
_, err := os.Stat(path)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func envOrDefault(key, fallback string) string {
|
||||
if value := os.Getenv(key); value != "" {
|
||||
return value
|
||||
}
|
||||
return fallback
|
||||
}
|
||||
|
||||
func envBoolOrDefault(key string, fallback bool) bool {
|
||||
value := os.Getenv(key)
|
||||
if value == "" {
|
||||
return fallback
|
||||
}
|
||||
parsed, err := strconv.ParseBool(value)
|
||||
if err != nil {
|
||||
return fallback
|
||||
}
|
||||
return parsed
|
||||
}
|
||||
Reference in New Issue
Block a user