Skip to content

Commit ffa97b5

Browse files
committed
add multiwriter
Signed-off-by: Yaroslav Pershin <62902094+iapershin@users.noreply.github.com>
1 parent 32cf792 commit ffa97b5

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

server/pkg/docker/build.go

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package docker
33
import (
44
"archive/tar"
55
"bufio"
6-
"bytes"
76
"context"
87
"fmt"
8+
"io"
99
"os/exec"
1010
"path"
1111

@@ -110,20 +110,12 @@ func BuildReleaseArtifacts(ctx context.Context, opts BuildReleaseArtifactsOpts,
110110
func RunCliBuild(ctx context.Context, logger hclog.Logger, contextReader *nio.PipeReader, tarWriter *nio.PipeWriter, args ...string) error {
111111
finalArgs := append([]string{"buildx", "build"}, args...)
112112
cmd := exec.CommandContext(ctx, "docker", finalArgs...)
113-
var stdErrBuf bytes.Buffer
113+
114114
cmd.Stdout = tarWriter
115115
cmd.Stdin = contextReader
116-
cmd.Stderr = &stdErrBuf
117-
118-
defer func() {
119-
if stdErrBuf.Len() > 0 {
120-
scanner := bufio.NewScanner(&stdErrBuf)
121-
for scanner.Scan() {
122-
logger.Info(scanner.Text())
123-
logboek.Context(ctx).Default().LogLn(scanner.Text())
124-
}
125-
}
126-
}()
116+
117+
multiWriter := io.MultiWriter(logboek.Context(ctx).OutStream(), logWriter(logger))
118+
cmd.Stderr = multiWriter
127119

128120
if err := cmd.Run(); err != nil {
129121
return fmt.Errorf("build failed: %w", err)
@@ -136,6 +128,22 @@ func RunCliBuild(ctx context.Context, logger hclog.Logger, contextReader *nio.Pi
136128
return nil
137129
}
138130

131+
func logWriter(logger hclog.Logger) *io.PipeWriter {
132+
pr, pw := io.Pipe()
133+
go func() {
134+
scanner := bufio.NewScanner(pr)
135+
for scanner.Scan() {
136+
line := scanner.Text()
137+
logger.Info(line)
138+
}
139+
if err := scanner.Err(); err != nil {
140+
logger.Error("error reading stderr", "err", err)
141+
}
142+
}()
143+
144+
return pw
145+
}
146+
139147
func setCliArgs(serviceDockerfilePathInContext string, secrets []secrets.Secret) ([]string, error) {
140148
args := []string{
141149
"--file", serviceDockerfilePathInContext,

0 commit comments

Comments
 (0)