Files
test_deploy/internal/config/config.go
Alex Shevchuk df176f8aea
All checks were successful
Deploy Production / Deploy to Staging (push) Has been skipped
36
2025-08-19 03:05:51 +03:00

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
}