Преглед на файлове

feature: Arguments are now also passed as ENV variables (#296)

James Read преди 2 години
родител
ревизия
a783fc8cd4
променени са 1 файла, в които са добавени 13 реда и са изтрити 0 реда
  1. 13 0
      internal/executor/executor.go

+ 13 - 0
internal/executor/executor.go

@@ -14,8 +14,10 @@ import (
 	"context"
 	"fmt"
 	"io"
+	"os"
 	"os/exec"
 	"runtime"
+	"strings"
 	"sync"
 	"time"
 )
@@ -352,6 +354,16 @@ func appendErrorToStderr(err error, logEntry *InternalLogEntry) {
 	}
 }
 
+func buildEnv(req *ExecutionRequest) []string {
+	ret := append(os.Environ(), "OLIVETIN=1")
+
+	for k, v := range req.Arguments {
+		ret = append(ret, fmt.Sprintf("%v=%v", strings.ToUpper(k), v))
+	}
+
+	return ret
+}
+
 func stepExec(req *ExecutionRequest) bool {
 	ctx, cancel := context.WithTimeout(context.Background(), time.Duration(req.Action.Timeout)*time.Second)
 	defer cancel()
@@ -360,6 +372,7 @@ func stepExec(req *ExecutionRequest) bool {
 	var stderr bytes.Buffer
 
 	cmd := wrapCommandInShell(ctx, req.finalParsedCommand)
+	cmd.Env = buildEnv(req)
 	cmd.Stdout = &stdout
 	cmd.Stderr = &stderr
 	req.logEntry.StdoutBuffer, _ = cmd.StdoutPipe()