Files
2025-12-14 16:34:42 +02:00

50 lines
888 B
Go

package worker
import (
"bufio"
"bytes"
"fmt"
"os/exec"
)
type RunOps struct {
Log Logger
Path string
FuncConfig *FuncConfig
Env []string
}
func RunFunction(opt *RunOps, input []byte) ([]byte, error) {
if opt.FuncConfig.Runtime != "exec" {
return nil, fmt.Errorf("unsupported runtime: %s", opt.FuncConfig.Runtime)
}
cmd := exec.Command(opt.Path)
cmd.Env = opt.Env
cmd.Stdin = bytes.NewReader(input)
var out bytes.Buffer
cmd.Stdout = &out
stderrPipe, err := cmd.StderrPipe()
if err != nil {
return nil, err
}
go func() {
scanner := bufio.NewScanner(stderrPipe)
for scanner.Scan() {
line := scanner.Text()
opt.Log.Write(line)
}
}()
if err := cmd.Start(); err != nil {
return nil, err
}
if err := cmd.Wait(); err != nil {
return nil, fmt.Errorf("failed: %w\noutput: %s", err, out.String())
}
return out.Bytes(), nil
}