pages-server/pages/config.go
“xHuPo” da94a4b7b0 new 1
2024-12-13 18:39:43 +08:00

79 lines
2.5 KiB
Go

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)
}