package config import ( "fmt" "log" "log/slog" "path/filepath" "slices" "github.com/spf13/viper" "git.amok.space/yevhen/resource-scraper/types/constant" ) func New() { configFilePath := viper.GetString(constant.FlagConfigFile) configName := filepath.Base(configFilePath) dir := filepath.Dir(configFilePath) if dir == configName && dir == "." { configName = "default" } configDir, _ := filepath.Abs(dir) viper.AddConfigPath(configDir) viper.SetConfigName(configName) err := viper.ReadInConfig() if err != nil { // Handle errors reading the config file panic(fmt.Errorf("fatal error config file: %w", err)) } viper.SetConfigName("secret") err = viper.MergeInConfig() if err != nil { // Handle errors reading the config file panic(fmt.Errorf("fatal error secret file: %w", err)) } slog.Info("using config", "path", filepath.Join(configDir, configName)) viper.SetDefault(constant.CfgKeyConfigDir, configDir) // Scopes validating scope := viper.GetString(constant.CfgKeyScopeEnable) scopesAllowed := viper.GetStringSlice("scope.allow") if !slices.Contains(scopesAllowed, scope) { scope = viper.GetString("scope.default") if scope == "" { scope = constant.ScopeInfo } } fmt.Println("scope", scope) viper.SetConfigName(scope) viper.AddConfigPath(filepath.Join(configDir, "scope")) err = viper.MergeInConfig() if err == nil { viper.SetDefault(constant.CfgKeyScopeEnable, scope) } else { log.Fatalf("fatal error config file: %v", err) } }