68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/ilyakaznacheev/cleanenv"
|
|
)
|
|
|
|
var (
|
|
ErrInternal = errors.New("can not load config")
|
|
ErrMarshaling = errors.New("can not marshal config path")
|
|
)
|
|
|
|
func MustLoad(version, commit, date string) *Config {
|
|
cfg, err := loadConfig()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
cfg.Build.Version = version
|
|
cfg.Build.Commit = commit
|
|
cfg.Build.Date = date
|
|
|
|
return cfg
|
|
}
|
|
|
|
func loadConfig() (*Config, error) {
|
|
var configPath string
|
|
|
|
flag.StringVar(&configPath, "config_path", configPath, "Path to config file")
|
|
flag.Parse()
|
|
|
|
if configPath == "" {
|
|
if path := os.Getenv("CONFIG_PATH"); path != "" {
|
|
configPath = path
|
|
} else {
|
|
configPath = ConfigBasePath
|
|
}
|
|
}
|
|
|
|
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
|
return nil, fmt.Errorf("no config file found")
|
|
}
|
|
|
|
var localConfig LocalDeploy
|
|
|
|
if err := cleanenv.ReadConfig(configPath, &localConfig); err != nil {
|
|
return nil, fmt.Errorf("error reading local config: %w", err)
|
|
}
|
|
|
|
for _, env := range localConfig.Deploy.Env {
|
|
if err := os.Setenv(env.Name, env.Value); err != nil {
|
|
return nil, fmt.Errorf("error setting env %s: %w", env.Name, err)
|
|
}
|
|
}
|
|
|
|
var cfg Config
|
|
|
|
if err := cleanenv.ReadConfig(configPath, &cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &cfg, nil
|
|
}
|