@@ -3,9 +3,9 @@ package docker
33import (
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,
110110func 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+
139147func setCliArgs (serviceDockerfilePathInContext string , secrets []secrets.Secret ) ([]string , error ) {
140148 args := []string {
141149 "--file" , serviceDockerfilePathInContext ,
0 commit comments