Files
deployment-manager/internal/executor/exec.go
2026-02-01 20:22:29 +05:30

35 lines
780 B
Go

package executor
import (
"bufio"
"context"
"os/exec"
"deployment-manager/internal/events"
)
func RunCmd(ctx context.Context, eventChan chan<- *events.Event, repoID int64, cmd string, args ...string) error {
c := exec.CommandContext(ctx, cmd, args...)
stdout, _ := c.StdoutPipe()
stderr, _ := c.StderrPipe()
if err := c.Start(); err != nil {
return err
}
go stream(stdout, eventChan, repoID, "stdout")
go stream(stderr, eventChan, repoID, "stderr")
return c.Wait()
}
func stream(r interface{ Read([]byte) (int, error) }, eventChan chan<- *events.Event, repoID int64, streamType string) {
scanner := bufio.NewScanner(r)
for scanner.Scan() {
event := events.NewLogEvent(repoID, scanner.Text())
event.Data["stream"] = streamType
eventChan <- event
}
}