From 1258c9ed10dd657bad5565d22a05bac0bd46a8d3 Mon Sep 17 00:00:00 2001 From: yxxhero Date: Sat, 14 May 2022 09:59:08 +0800 Subject: [PATCH] add execEnvs Signed-off-by: yxxhero --- pkg/tmpl/context_funcs.go | 14 +++++++++++++- pkg/tmpl/context_funcs_test.go | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/pkg/tmpl/context_funcs.go b/pkg/tmpl/context_funcs.go index 574be4d4..c2f00159 100644 --- a/pkg/tmpl/context_funcs.go +++ b/pkg/tmpl/context_funcs.go @@ -20,6 +20,7 @@ type Values = map[string]interface{} func (c *Context) createFuncMap() template.FuncMap { funcMap := template.FuncMap{ + "execEnvs": c.ExecEnvs, "exec": c.Exec, "isFile": c.IsFile, "readFile": c.ReadFile, @@ -48,7 +49,8 @@ func (c *Context) createFuncMap() template.FuncMap { return funcMap } -func (c *Context) Exec(command string, args []interface{}, inputs ...string) (string, error) { +// TODO: in the next major version, remove this function. +func (c *Context) ExecEnvs(envs map[string]string, command string, args []interface{}, inputs ...string) (string, error) { var input string if len(inputs) > 0 { input = inputs[0] @@ -66,6 +68,12 @@ func (c *Context) Exec(command string, args []interface{}, inputs ...string) (st cmd := exec.Command(command, strArgs...) cmd.Dir = c.basePath + if envs != nil { + cmd.Env = os.Environ() + for k, v := range envs { + cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", k, v)) + } + } g := errgroup.Group{} @@ -119,6 +127,10 @@ func (c *Context) Exec(command string, args []interface{}, inputs ...string) (st return string(bytes), nil } +func (c *Context) Exec(command string, args []interface{}, inputs ...string) (string, error) { + return c.ExecEnvs(nil, command, args, inputs...) +} + func (c *Context) IsFile(filename string) (bool, error) { var path string if filepath.IsAbs(filename) { diff --git a/pkg/tmpl/context_funcs_test.go b/pkg/tmpl/context_funcs_test.go index 83dd43d2..977692b3 100644 --- a/pkg/tmpl/context_funcs_test.go +++ b/pkg/tmpl/context_funcs_test.go @@ -267,3 +267,19 @@ func TestExec(t *testing.T) { _, err = ctx.Exec("bash", []interface{}{"-c", "exit 1"}, "") require.Error(t, err, "Expected error to be returned when executing command with non-zero exit code") } + +// TestExecEnvs tests that ExecEnvs returns the expected output. +// TODO: in the next major version, this test should be removed. +func TestExecEnvs(t *testing.T) { + ctx := &Context{basePath: "."} + + expected := "foo\n" + + // test that the command is executed with environment variables + output, err := ctx.ExecEnvs(map[string]string{"testkey": "foo"}, "bash", []interface{}{"-c", "printenv testkey"}, "") + + require.Nilf(t, err, "Expected no error to be returned when executing command with environment variables") + + require.Equalf(t, expected, output, "Expected %s to be returned when executing command with environment variables", expected) + +}