software steht so weit.
jetzt build + docker build und testen
This commit is contained in:
1 parent
42f0c0accb
commit
ca6cdcca63
90 files changed
+10298
-480
No files matched your search
@@ -0,0 +1,51 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// envName bildet einen Flag-Namen auf seine Umgebungsvariable ab:
|
||||
// public-url → SULTAN_PUBLIC_URL.
|
||||
func envName(flagName string) string {
|
||||
return "SULTAN_" + strings.ToUpper(strings.ReplaceAll(flagName, "-", "_"))
|
||||
}
|
||||
|
||||
// annotateEnv ergänzt die Hilfe jedes Flags um den Namen der Variable.
|
||||
func annotateEnv(fs *flag.FlagSet) {
|
||||
fs.VisitAll(func(f *flag.Flag) { f.Usage += " [" + envName(f.Name) + "]" })
|
||||
}
|
||||
|
||||
// applyEnv setzt nach fs.Parse alle Flags, die nicht auf der Befehlszeile
|
||||
// standen, aus SULTAN_<FLAG>. Flags gewinnen also; Listen-Flags werden aus
|
||||
// kommagetrennten Werten gefüllt (und von einem Flag ersetzt, nicht ergänzt).
|
||||
func applyEnv(fs *flag.FlagSet, getenv func(string) string) error {
|
||||
explicit := map[string]bool{}
|
||||
fs.Visit(func(f *flag.Flag) { explicit[f.Name] = true })
|
||||
var err error
|
||||
fs.VisitAll(func(f *flag.Flag) {
|
||||
if err != nil || explicit[f.Name] {
|
||||
return
|
||||
}
|
||||
name := envName(f.Name)
|
||||
v := strings.TrimSpace(getenv(name))
|
||||
if v == "" {
|
||||
return
|
||||
}
|
||||
values := []string{v}
|
||||
if _, isList := f.Value.(*stringList); isList {
|
||||
values = strings.Split(v, ",")
|
||||
}
|
||||
for _, item := range values {
|
||||
if item = strings.TrimSpace(item); item == "" {
|
||||
continue
|
||||
}
|
||||
if e := f.Value.Set(item); e != nil {
|
||||
err = fmt.Errorf("%s=%q: %w", name, v, e)
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
return err
|
||||
}
|
||||
Reference in new issue
Block a user