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  }