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