@@ -3,6 +3,7 @@ package variable
33import (
44 "context"
55 "fmt"
6+ "os"
67 "path/filepath"
78 "regexp"
89 "strings"
@@ -152,7 +153,7 @@ func (r *resolver) findVariablesInclude(haystack interface{}, include []*regexp.
152153
153154 // filter out runtime environment variables
154155 for k := range varsUsed {
155- if ! strings .HasPrefix (k , "runtime." ) && ! IsPredefinedVariable (k ) && r .vars [ k ] == nil {
156+ if ! strings .HasPrefix (k , "runtime." ) && ! IsPredefinedVariable (k ) && r .getVariableDefinition ( k ) == nil {
156157 delete (varsUsed , k )
157158 }
158159 }
@@ -164,6 +165,23 @@ func (r *resolver) FindVariables(haystack interface{}) ([]*latest.Variable, erro
164165 return r .findVariablesInclude (haystack , nil )
165166}
166167
168+ func (r * resolver ) getVariableDefinition (name string ) * latest.Variable {
169+ definition , ok := r .vars [name ]
170+ if ! ok {
171+ value := os .Getenv (name )
172+ if value != "" {
173+ return & latest.Variable {
174+ Name : name ,
175+ Value : value ,
176+ }
177+ }
178+
179+ return nil
180+ }
181+
182+ return definition
183+ }
184+
167185func (r * resolver ) orderVariables (vars map [string ]bool ) ([]* latest.Variable , error ) {
168186 root := graph .NewNode ("root" , nil )
169187 g := graph .NewGraphOf (root , "variable" )
@@ -174,9 +192,8 @@ func (r *resolver) orderVariables(vars map[string]bool) ([]*latest.Variable, err
174192 definition = & latest.Variable {Name : name }
175193 } else {
176194 // check if has definition
177- var ok bool
178- definition , ok = r .vars [name ]
179- if ! ok {
195+ definition = r .getVariableDefinition (name )
196+ if definition == nil {
180197 continue
181198 }
182199 }
@@ -219,8 +236,8 @@ func (r *resolver) insertVariableGraph(g *graph.Graph, node *latest.Variable) er
219236
220237 parents := r .findVariablesInDefinition (node )
221238 for parent := range parents {
222- parentDefinition , ok := r .vars [ parent ]
223- if ! ok {
239+ parentDefinition := r .getVariableDefinition ( parent )
240+ if parentDefinition == nil {
224241 continue
225242 }
226243
@@ -428,7 +445,7 @@ func (r *resolver) findVariablesInDefinition(definition *latest.Variable) map[st
428445
429446 // filter out runtime environment variables and non existing ones
430447 for k := range varsUsed {
431- if ! strings .HasPrefix (k , "runtime." ) && ! IsPredefinedVariable (k ) && r .vars [ k ] == nil {
448+ if ! strings .HasPrefix (k , "runtime." ) && ! IsPredefinedVariable (k ) && r .getVariableDefinition ( k ) == nil {
432449 delete (varsUsed , k )
433450 }
434451 }
@@ -510,7 +527,7 @@ func (r *resolver) resolveDefinitionString(ctx context.Context, str string, defi
510527 // check if its a predefined variable
511528 variable , err := NewPredefinedVariable (varName , r .options , r .log )
512529 if err != nil {
513- if r .vars [ varName ] == nil {
530+ if r .getVariableDefinition ( varName ) == nil {
514531 return "${" + varName + "}" , nil
515532 }
516533
0 commit comments