88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
)
|
|
|
|
// PrintEnvVars writes all environment variables and their documentation to the provided writer
|
|
func PrintEnvVars(w io.Writer) error {
|
|
envVars := GetAllEnvVars()
|
|
|
|
// Find the longest name for alignment
|
|
maxNameLen := 0
|
|
for _, ev := range envVars {
|
|
if len(ev.Name) > maxNameLen {
|
|
maxNameLen = len(ev.Name)
|
|
}
|
|
}
|
|
|
|
// Print header
|
|
fmt.Fprintln(w, "Environment Variables")
|
|
fmt.Fprintln(w, strings.Repeat("=", 80))
|
|
fmt.Fprintln(w)
|
|
|
|
// Group by prefix
|
|
groups := map[string][]EnvVar{
|
|
"DB_": {},
|
|
"HWS_": {},
|
|
"HWSAUTH_": {},
|
|
"TMDB_": {},
|
|
"LOG_": {},
|
|
}
|
|
|
|
for _, ev := range envVars {
|
|
assigned := false
|
|
for prefix := range groups {
|
|
if strings.HasPrefix(ev.Name, prefix) {
|
|
groups[prefix] = append(groups[prefix], ev)
|
|
assigned = true
|
|
break
|
|
}
|
|
}
|
|
if !assigned {
|
|
// Handle ungrouped vars
|
|
if _, ok := groups["OTHER"]; !ok {
|
|
groups["OTHER"] = []EnvVar{}
|
|
}
|
|
groups["OTHER"] = append(groups["OTHER"], ev)
|
|
}
|
|
}
|
|
|
|
// Print each group
|
|
groupOrder := []string{"DB_", "HWS_", "HWSAUTH_", "TMDB_", "LOG_", "OTHER"}
|
|
groupTitles := map[string]string{
|
|
"DB_": "Database Configuration",
|
|
"HWS_": "HTTP Web Server Configuration",
|
|
"HWSAUTH_": "Authentication Configuration",
|
|
"TMDB_": "TMDB API Configuration",
|
|
"LOG_": "Logging Configuration",
|
|
"OTHER": "Other Configuration",
|
|
}
|
|
|
|
for _, prefix := range groupOrder {
|
|
vars, ok := groups[prefix]
|
|
if !ok || len(vars) == 0 {
|
|
continue
|
|
}
|
|
|
|
fmt.Fprintf(w, "%s\n", groupTitles[prefix])
|
|
fmt.Fprintln(w, strings.Repeat("-", len(groupTitles[prefix])))
|
|
|
|
for _, ev := range vars {
|
|
padding := strings.Repeat(" ", maxNameLen-len(ev.Name))
|
|
if ev.Required {
|
|
fmt.Fprintf(w, " %s%s : %s (required)\n", ev.Name, padding, ev.Description)
|
|
} else if ev.HasDefault {
|
|
fmt.Fprintf(w, " %s%s : %s (default: %s)\n", ev.Name, padding, ev.Description, ev.Default)
|
|
} else {
|
|
fmt.Fprintf(w, " %s%s : %s\n", ev.Name, padding, ev.Description)
|
|
}
|
|
}
|
|
fmt.Fprintln(w)
|
|
}
|
|
|
|
return nil
|
|
}
|