linuxkit: fix pkg build on Windows
Previously when we set `cmd.Stderr = os.Stderr`, the stderr from buildx
would be mixed with the image tar, corrupting it.
Work around this (Windows-specific) problem by adding an explicit
indirection via a io.Pipe()
@@ -14,6 +14,7 @@ import (
"io/ioutil"
"os"
"os/exec"
+ "runtime"
"strings"
versioncompare "github.com/hashicorp/go-version"
@@ -80,7 +81,17 @@ func (dr *dockerRunnerImpl) command(stdin io.Reader, stdout, stderr io.Writer, a
stdout = os.Stdout
}
if stderr == nil {
+ if runtime.GOOS != "windows" {
stderr = os.Stderr
+ } else {
+ // On Windows directly setting stderr to os.Stderr results in the output being written to stdout,
+ // corrupting the image tar. Adding an explicit indirection via a pipe works around the issue.
+ r, w := io.Pipe()
+ stderr = w
+ go func() {
+ _, _ = io.Copy(os.Stderr, r)
+ }()
+ }
}
cmd.Stdout = stdout
cmd.Stderr = stderr
