func CommandWorker()

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:
		}
	}
}