package pages import ( "flag" "fmt" "os" "gopkg.in/yaml.v3" ) type Config struct { GiteaServer string `yaml:"server" json:"server"` GiteaToken string `yaml:"token" json:"token"` GiteaBranch string `yaml:"branch" json:"branch"` PageBaseDomain string `yaml:"domain" json:"domain"` ConfigPath string `yaml:"config" json:"config"` } var DefauleConfig = Config{ GiteaServer: DefaultGiteaServer, GiteaToken: DefaultGiteaToken, GiteaBranch: DefaultGiteaBranch, PageBaseDomain: DefaultPageBaseDomain, ConfigPath: DefauleConfigPath, } func ParseEnvs() *Config { config := &Config{} config.GiteaServer = GetEnvStr(ENV_PAGE_GiteaServer, DefaultGiteaServer) config.GiteaToken = GetEnvStr(ENV_PAGE_GiteaToken, DefaultGiteaToken) config.GiteaBranch = GetEnvStr(ENV_PAGE_GiteaBranch, DefaultGiteaBranch) config.PageBaseDomain = GetEnvStr(ENV_PAGE_PageBaseDomain, DefaultPageBaseDomain) config.ConfigPath = GetEnvStr(ENV_PAGE_ConfigPath, DefauleConfigPath) return config } func ParseFile(config *Config) error { c, err := os.ReadFile(config.ConfigPath) if err != nil { return err } return yaml.Unmarshal(c, &config) } func mergeConfig(cli, file, envs, defaultKey Config) Config { config := defaultKey config.GiteaServer = GetStr(cli.GiteaServer, file.GiteaServer, envs.GiteaServer, defaultKey.GiteaServer) config.GiteaToken = GetStr(cli.GiteaToken, file.GiteaToken, envs.GiteaToken, defaultKey.GiteaToken) config.GiteaBranch = GetStr(cli.GiteaBranch, file.GiteaBranch, envs.GiteaBranch, defaultKey.GiteaBranch) config.PageBaseDomain = GetStr(cli.PageBaseDomain, file.PageBaseDomain, envs.PageBaseDomain, defaultKey.PageBaseDomain) config.ConfigPath = GetStr(cli.ConfigPath, file.ConfigPath, envs.ConfigPath, defaultKey.ConfigPath) return config } func ParseCli(config *Config) { flag.StringVar(&config.GiteaServer, "server", config.GiteaServer, "gitea server") flag.StringVar(&config.GiteaToken, "token", config.GiteaToken, "gitea token") flag.StringVar(&config.GiteaBranch, "branch", config.GiteaBranch, "gitea branch") flag.StringVar(&config.PageBaseDomain, "domain", config.PageBaseDomain, "page base domain") flag.StringVar(&config.ConfigPath, "config", config.ConfigPath, "config path") flag.Parse() } func Parse() Config { var config Config = DefauleConfig envs := ParseEnvs() err := ParseFile(&config) if err != nil { fmt.Printf("Faild to parse config file: %v\n", err) } cli := Config{} ParseCli(&cli) return mergeConfig(cli, config, *envs, DefauleConfig) }