parent
							
								
									cc6edc18b6
								
							
						
					
					
						commit
						1258c9ed10
					
				|  | @ -20,6 +20,7 @@ type Values = map[string]interface{} | ||||||
| 
 | 
 | ||||||
| func (c *Context) createFuncMap() template.FuncMap { | func (c *Context) createFuncMap() template.FuncMap { | ||||||
| 	funcMap := template.FuncMap{ | 	funcMap := template.FuncMap{ | ||||||
|  | 		"execEnvs":         c.ExecEnvs, | ||||||
| 		"exec":             c.Exec, | 		"exec":             c.Exec, | ||||||
| 		"isFile":           c.IsFile, | 		"isFile":           c.IsFile, | ||||||
| 		"readFile":         c.ReadFile, | 		"readFile":         c.ReadFile, | ||||||
|  | @ -48,7 +49,8 @@ func (c *Context) createFuncMap() template.FuncMap { | ||||||
| 	return 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 | 	var input string | ||||||
| 	if len(inputs) > 0 { | 	if len(inputs) > 0 { | ||||||
| 		input = 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 := exec.Command(command, strArgs...) | ||||||
| 	cmd.Dir = c.basePath | 	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{} | 	g := errgroup.Group{} | ||||||
| 
 | 
 | ||||||
|  | @ -119,6 +127,10 @@ func (c *Context) Exec(command string, args []interface{}, inputs ...string) (st | ||||||
| 	return string(bytes), nil | 	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) { | func (c *Context) IsFile(filename string) (bool, error) { | ||||||
| 	var path string | 	var path string | ||||||
| 	if filepath.IsAbs(filename) { | 	if filepath.IsAbs(filename) { | ||||||
|  |  | ||||||
|  | @ -267,3 +267,19 @@ func TestExec(t *testing.T) { | ||||||
| 	_, err = ctx.Exec("bash", []interface{}{"-c", "exit 1"}, "") | 	_, 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") | 	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) | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue