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()

Signed-off-by: David Scott <dave@recoil.org>
This commit is contained in:
David Scott 2021-10-29 11:18:09 +01:00
parent f5a1541e00
commit f5f5dce318

View File

@ -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 {
stderr = os.Stderr
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