54 lines
1.0 KiB
Go
54 lines
1.0 KiB
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"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) {
|
|
if _, err := os.Stat(ConfigBasePath); os.IsNotExist(err) {
|
|
return nil, fmt.Errorf("no config file found")
|
|
}
|
|
|
|
var localConfig LocalDeploy
|
|
|
|
if err := cleanenv.ReadConfig(ConfigBasePath, &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(ConfigBasePath, &cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &cfg, nil
|
|
}
|