79 lines
2.5 KiB
Go
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)
|
|
}
|