diff --git a/cmd/task/Taskfile.yml b/cmd/task/Taskfile.yml new file mode 100644 index 00000000..59d951ae --- /dev/null +++ b/cmd/task/Taskfile.yml @@ -0,0 +1,5 @@ +build: + cmds: + - echo $hallo + env: + hallo: welt diff --git a/task.go b/task.go index 1c232a32..044a4dcb 100644 --- a/task.go +++ b/task.go @@ -2,6 +2,7 @@ package task import ( "encoding/json" + "fmt" "io/ioutil" "log" "os" @@ -47,6 +48,7 @@ type Task struct { Dir string Vars map[string]string Set string + Env map[string]string } // Run runs Task @@ -104,7 +106,7 @@ func RunTask(name string) error { } for i := range t.Cmds { - if err = t.runCommand(i); err != nil { + if err = t.runCommand(i, t.Env); err != nil { return &taskRunError{name, err} } } @@ -129,7 +131,7 @@ func (t *Task) isUpToDate() bool { return generatesMinTime.After(sourcesMaxTime) } -func (t *Task) runCommand(i int) error { +func (t *Task) runCommand(i int, envVariables map[string]string) error { vars, err := t.handleVariables() if err != nil { return err @@ -151,6 +153,13 @@ func (t *Task) runCommand(i int) error { if dir != "" { cmd.Dir = dir } + if nil != envVariables { + env := os.Environ() + for key, value := range envVariables { + env = append(env, fmt.Sprintf("%s=%s", key, value)) + } + cmd.Env = env + } cmd.Stdin = os.Stdin cmd.Stderr = os.Stderr if t.Set != "" {