in source.go [719:813]
func (s *Source) processBuildArgs(lex *shell.Lex, args map[string]string, allowArg func(key string) bool) error {
// force the shell lexer to skip unresolved env vars so they aren't
// replaced with ""
lex.SkipUnsetEnv = true
var errs []error
appendErr := func(err error) {
errs = append(errs, err)
}
if s.Path != "" {
updated, err := expandArgs(lex, s.Path, args, allowArg)
if err != nil {
appendErr(err)
} else {
s.Path = updated
}
}
for i, g := range s.Includes {
updated, err := expandArgs(lex, g, args, allowArg)
if err != nil {
appendErr(err)
continue
}
s.Includes[i] = updated
}
for i, g := range s.Excludes {
updated, err := expandArgs(lex, g, args, allowArg)
if err != nil {
appendErr(err)
continue
}
s.Excludes[i] = updated
}
switch {
case s.DockerImage != nil:
updated, err := expandArgs(lex, s.DockerImage.Ref, args, allowArg)
if err != nil {
appendErr(fmt.Errorf("image ref: %w", err))
}
s.DockerImage.Ref = updated
if s.DockerImage.Cmd != nil {
if err := s.DockerImage.Cmd.processBuildArgs(lex, args, allowArg); err != nil {
appendErr(errors.Wrap(err, "docker image cmd source"))
}
}
case s.Git != nil:
updated, err := expandArgs(lex, s.Git.URL, args, allowArg)
s.Git.URL = updated
if err != nil {
appendErr(err)
}
updated, err = expandArgs(lex, s.Git.Commit, args, allowArg)
s.Git.Commit = updated
if err != nil {
appendErr(err)
}
case s.HTTP != nil:
updated, err := expandArgs(lex, s.HTTP.URL, args, allowArg)
if err != nil {
appendErr(err)
}
s.HTTP.URL = updated
case s.Context != nil:
updated, err := expandArgs(lex, s.Context.Name, args, allowArg)
s.Context.Name = updated
if err != nil {
appendErr(err)
}
case s.Build != nil:
err := s.Build.Source.processBuildArgs(lex, args, allowArg)
if err != nil {
appendErr(err)
}
updated, err := expandArgs(lex, s.Build.DockerfilePath, args, allowArg)
if err != nil {
appendErr(err)
}
s.Build.DockerfilePath = updated
updated, err = expandArgs(lex, s.Build.Target, args, allowArg)
if err != nil {
appendErr(err)
}
s.Build.Target = updated
}
return goerrors.Join(errs...)
}