package config import ( "fmt" "strings" "github.com/spf13/viper" ) // Load reads and validates the configuration from a YAML file. func Load(path string) (*Config, error) { v := viper.New() v.SetConfigFile(path) v.SetConfigType("yaml") // Allow env var overrides with DOCKER_BACKUP_ prefix. v.SetEnvPrefix("DOCKER_BACKUP") v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) v.AutomaticEnv() if err := v.ReadInConfig(); err != nil { return nil, fmt.Errorf("read config %s: %w", path, err) } var cfg Config if err := v.Unmarshal(&cfg); err != nil { return nil, fmt.Errorf("unmarshal config: %w", err) } if err := cfg.Validate(); err != nil { return nil, fmt.Errorf("validate config: %w", err) } return &cfg, nil }