gitlab.com/jfprevost/gitlab-runner-notlscheck@v11.11.4+incompatible/common/variables.go (about) 1 package common 2 3 import ( 4 "errors" 5 "fmt" 6 "os" 7 "strings" 8 ) 9 10 type JobVariable struct { 11 Key string `json:"key"` 12 Value string `json:"value"` 13 Public bool `json:"public"` 14 Internal bool `json:"-"` 15 File bool `json:"file"` 16 Masked bool `json:"masked"` 17 } 18 19 type JobVariables []JobVariable 20 21 func (b JobVariable) String() string { 22 return fmt.Sprintf("%s=%s", b.Key, b.Value) 23 } 24 25 func (b JobVariables) PublicOrInternal() (variables JobVariables) { 26 for _, variable := range b { 27 if variable.Public || variable.Internal { 28 variables = append(variables, variable) 29 } 30 } 31 return variables 32 } 33 34 func (b JobVariables) StringList() (variables []string) { 35 for _, variable := range b { 36 variables = append(variables, variable.String()) 37 } 38 return variables 39 } 40 41 func (b JobVariables) Get(key string) string { 42 switch key { 43 case "$": 44 return key 45 case "*", "#", "@", "!", "?", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9": 46 return "" 47 } 48 for i := len(b) - 1; i >= 0; i-- { 49 if b[i].Key == key { 50 return b[i].Value 51 } 52 } 53 return "" 54 } 55 56 func (b JobVariables) ExpandValue(value string) string { 57 return os.Expand(value, b.Get) 58 } 59 60 func (b JobVariables) Expand() (variables JobVariables) { 61 for _, variable := range b { 62 variable.Value = b.ExpandValue(variable.Value) 63 variables = append(variables, variable) 64 } 65 return variables 66 } 67 68 func (b JobVariables) Masked() (masked []string) { 69 for _, variable := range b { 70 if variable.Masked { 71 masked = append(masked, variable.Value) 72 } 73 } 74 return 75 } 76 77 func ParseVariable(text string) (variable JobVariable, err error) { 78 keyValue := strings.SplitN(text, "=", 2) 79 if len(keyValue) != 2 { 80 err = errors.New("missing =") 81 return 82 } 83 variable = JobVariable{ 84 Key: keyValue[0], 85 Value: keyValue[1], 86 } 87 return 88 }