From 41c1f100c7bc3792a1ea0125ab5ee9fc902ff499 Mon Sep 17 00:00:00 2001 From: Max Pushkarov Date: Fri, 20 Feb 2026 14:10:44 +0100 Subject: [PATCH] feat(config): support loading config from env var, rename config path env --- cmd/nitewatch/main.go | 18 ++++++++++++------ config/config.go | 7 +++++++ service/service.go | 4 +++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cmd/nitewatch/main.go b/cmd/nitewatch/main.go index ea8a281..b36dbf0 100644 --- a/cmd/nitewatch/main.go +++ b/cmd/nitewatch/main.go @@ -15,12 +15,7 @@ func main() { os.Exit(1) } - configPath := os.Getenv("NITEWATCH_CONFIG") - if configPath == "" { - configPath = "config.yaml" - } - - conf, err := config.Load(configPath) + conf, err := loadConfig() if err != nil { slog.Error("Failed to load configuration", "error", err) os.Exit(1) @@ -37,3 +32,14 @@ func main() { os.Exit(1) } } + +func loadConfig() (*config.Config, error) { + if raw := os.Getenv("NITEWATCH_CONFIG"); raw != "" { + return config.LoadFromEnv(raw) + } + configPath := os.Getenv("NITEWATCH_CONFIG_PATH") + if configPath == "" { + configPath = "config.yaml" + } + return config.Load(configPath) +} diff --git a/config/config.go b/config/config.go index e616249..16e8a48 100644 --- a/config/config.go +++ b/config/config.go @@ -94,7 +94,14 @@ func Load(path string) (*Config, error) { if err != nil { return nil, fmt.Errorf("read config file: %w", err) } + return parse(data) +} + +func LoadFromEnv(data string) (*Config, error) { + return parse([]byte(data)) +} +func parse(data []byte) (*Config, error) { expanded := os.ExpandEnv(string(data)) var cfg Config diff --git a/service/service.go b/service/service.go index 5adb0f0..f65bb5b 100644 --- a/service/service.go +++ b/service/service.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "os/signal" + "strings" "sync/atomic" "time" @@ -107,7 +108,8 @@ func NewWithBackend(conf config.Config, client custody.EthBackend) (*Service, er return nil, fmt.Errorf("failed to get chain ID: %w", err) } - key, err := crypto.HexToECDSA(conf.Blockchain.PrivateKey) + pk := strings.TrimPrefix(conf.Blockchain.PrivateKey, "0x") + key, err := crypto.HexToECDSA(pk) if err != nil { return nil, fmt.Errorf("failed to parse private key: %w", err) }