github.1485827954.workers.dev/nektos/act@v0.2.63/cmd/secrets.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 8 log "github.com/sirupsen/logrus" 9 "golang.org/x/term" 10 ) 11 12 type secrets map[string]string 13 14 func newSecrets(secretList []string) secrets { 15 s := make(map[string]string) 16 for _, secretPair := range secretList { 17 secretPairParts := strings.SplitN(secretPair, "=", 2) 18 secretPairParts[0] = strings.ToUpper(secretPairParts[0]) 19 if strings.ToUpper(s[secretPairParts[0]]) == secretPairParts[0] { 20 log.Errorf("Secret %s is already defined (secrets are case insensitive)", secretPairParts[0]) 21 } 22 if len(secretPairParts) == 2 { 23 s[secretPairParts[0]] = secretPairParts[1] 24 } else if env, ok := os.LookupEnv(secretPairParts[0]); ok && env != "" { 25 s[secretPairParts[0]] = env 26 } else { 27 fmt.Printf("Provide value for '%s': ", secretPairParts[0]) 28 val, err := term.ReadPassword(int(os.Stdin.Fd())) 29 fmt.Println() 30 if err != nil { 31 log.Errorf("failed to read input: %v", err) 32 os.Exit(1) 33 } 34 s[secretPairParts[0]] = string(val) 35 } 36 } 37 return s 38 } 39 40 func (s secrets) AsMap() map[string]string { 41 return s 42 }