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  }