in cmd/eachmodule/cmd.go [28:72]
func CommandWorker(ctx context.Context, jobs <-chan Work, results chan<- WorkLog, streamOut io.Writer) {
for {
var result WorkLog
select {
case <-ctx.Done():
return
case w, ok := <-jobs:
if !ok {
return
}
outBuffer := bytes.NewBuffer(nil)
outWriter := io.Writer(outBuffer)
if streamOut != nil {
outWriter = io.MultiWriter(outWriter, streamOut)
}
result.Path = w.Path
result.Cmd = w.Cmd
cmd, err := NewCommand(ctx, outWriter, outWriter, w.Path, w.Cmd)
if err != nil {
result.Err = fmt.Errorf("failed to build command, %w", err)
break
}
if err := cmd.Run(); err != nil {
result.Err = fmt.Errorf("failed to run command, %v", err)
}
if streamOut == nil {
outReader := bytes.NewReader(outBuffer.Bytes())
result.Output = outReader
}
}
select {
case <-ctx.Done():
return
case results <- result:
}
}
}