Skip to content

Commit 57f0420

Browse files
committed
Add new "getenv" templatelib function
Three usages: - getenv "FOO" - getenv "FOO" "default" - getenv "FOO" "set" "unset"
1 parent 4fd80f3 commit 57f0420

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

pkg/templatelib/lib.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package templatelib
33
import (
44
"encoding/json"
55
"fmt"
6+
"os"
67
"reflect"
78
"strings"
89
"text/template"
@@ -111,4 +112,27 @@ var FuncMap = template.FuncMap{
111112
"replace": stringsActionFactory("replace", false, func(strs []string, str string) string {
112113
return strings.NewReplacer(strs...).Replace(str)
113114
}),
115+
116+
// {{- getenv "PATH" -}}
117+
// {{- getenv "HOME" "no HOME set" -}}
118+
// {{- getenv "HOME" "is set" "is NOT set (or is empty)" -}}
119+
"getenv": thingsActionFactory("getenv", true, func(args []interface{}, arg interface{}) interface{} {
120+
var (
121+
val = os.Getenv(arg.(string))
122+
setVal interface{} = val
123+
unsetVal interface{} = ""
124+
)
125+
if len(args) == 2 {
126+
setVal, unsetVal = args[0], args[1]
127+
} else if len(args) == 1 {
128+
unsetVal = args[0]
129+
} else if len(args) != 0 {
130+
panic(fmt.Sprintf(`expected between 1 and 3 arguments to "getenv", got %d`, len(args)+1))
131+
}
132+
if val != "" {
133+
return setVal
134+
} else {
135+
return unsetVal
136+
}
137+
}),
114138
}

pkg/templatelib/lib_example_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,31 @@ func Example_trimReplaceGitToGo() {
191191
// github.com/jsmith/some-repo
192192
// github.com/jsmith/some-repo
193193
}
194+
195+
func Example_getenv() {
196+
tmpl, err := template.New("getenv").Funcs(templatelib.FuncMap).Parse(`
197+
The FOO environment variable {{ getenv "FOO" "is set" "is not set" }}. {{- "\n" -}}
198+
BAR: {{ getenv "BAR" "not set" }} {{- "\n" -}}
199+
BAZ: {{ getenv "BAZ" "not set" }} {{- "\n" -}}
200+
{{- $env := getenv "FOOBARBAZ" -}}
201+
{{- if eq $env "" -}}
202+
FOOBARBAZ {{- "\n" -}}
203+
{{- end -}}
204+
`)
205+
206+
os.Setenv("FOO", "")
207+
os.Unsetenv("BAR")
208+
os.Setenv("BAZ", "foobar")
209+
os.Unsetenv("FOOBARBAZ")
210+
211+
err = tmpl.Execute(os.Stdout, nil)
212+
if err != nil {
213+
panic(err)
214+
}
215+
216+
// Output:
217+
// The FOO environment variable is not set.
218+
// BAR: not set
219+
// BAZ: foobar
220+
// FOOBARBAZ
221+
}

0 commit comments

Comments
 (0)