From 0dc3add8ffac1873dce6280687874280dffd0a1a Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Fri, 20 Feb 2026 22:35:13 -0500 Subject: [PATCH] feat(backend): add environment variable configuration support Add AETHERA_ prefixed env vars for server configuration: - AETHERA_DATA_DIR: data directory path - AETHERA_LISTEN: listen address - AETHERA_PORT: listen port Env vars take precedence over defaults but CLI flags override both. --- backend/cmd/config.go | 21 +++++++++++++++++++++ backend/cmd/main.go | 12 ++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/backend/cmd/config.go b/backend/cmd/config.go index a7961d6..5be1511 100644 --- a/backend/cmd/config.go +++ b/backend/cmd/config.go @@ -4,8 +4,11 @@ import ( "fmt" "os" "path" + "strconv" ) +const envPrefix = "AETHERA_" + type cliParams struct { ListenAddr string ListenPort int @@ -13,6 +16,24 @@ type cliParams struct { SettingsFile string } +// getEnvOrDefault returns the value of an environment variable or a default value +func getEnvOrDefault(key, defaultValue string) string { + if value := os.Getenv(envPrefix + key); value != "" { + return value + } + return defaultValue +} + +// getEnvIntOrDefault returns the integer value of an environment variable or a default value +func getEnvIntOrDefault(key string, defaultValue int) int { + if value := os.Getenv(envPrefix + key); value != "" { + if intVal, err := strconv.Atoi(value); err == nil { + return intVal + } + } + return defaultValue +} + func (p *cliParams) Validate() error { // Ensure Generated Directories imgDir := path.Join(p.DataDir, "generated/images") diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 329ecc7..938135d 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -13,17 +13,17 @@ import ( var ( params = cliParams{ - ListenAddr: "localhost", - ListenPort: 8080, - DataDir: "./data", + ListenAddr: getEnvOrDefault("LISTEN", "localhost"), + ListenPort: getEnvIntOrDefault("PORT", 8080), + DataDir: getEnvOrDefault("DATA_DIR", "./data"), } rootCmd = &cobra.Command{Use: "aethera"} ) func init() { - rootCmd.PersistentFlags().StringVar(¶ms.DataDir, "data-dir", "data", "Directory to store generated images") - rootCmd.PersistentFlags().StringVar(¶ms.ListenAddr, "listen", "localhost", "Address to listen on") - rootCmd.PersistentFlags().IntVar(¶ms.ListenPort, "port", 8080, "Port to listen on") + rootCmd.PersistentFlags().StringVar(¶ms.DataDir, "data-dir", params.DataDir, "Directory to store generated images (env: AETHERA_DATA_DIR)") + rootCmd.PersistentFlags().StringVar(¶ms.ListenAddr, "listen", params.ListenAddr, "Address to listen on (env: AETHERA_LISTEN)") + rootCmd.PersistentFlags().IntVar(¶ms.ListenPort, "port", params.ListenPort, "Port to listen on (env: AETHERA_PORT)") } func main() {