Skip to content

Commit 457b73f

Browse files
authored
fix: enable logging for setup script when not a tty (#402)
1 parent c4b082e commit 457b73f

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

envbuilder.go

+19-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package envbuilder
22

33
import (
4-
"bufio"
54
"bytes"
65
"context"
76
"encoding/base64"
@@ -891,16 +890,8 @@ func run(ctx context.Context, opts options.Options, execArgs *execArgsInfo) erro
891890
cmd.Stderr = os.Stderr
892891
cmd.Stdin = os.Stdin
893892
} else {
894-
var buf bytes.Buffer
895-
go func() {
896-
scanner := bufio.NewScanner(&buf)
897-
for scanner.Scan() {
898-
opts.Logger(log.LevelInfo, "%s", scanner.Text())
899-
}
900-
}()
901-
902-
cmd.Stdout = &buf
903-
cmd.Stderr = &buf
893+
cmd.Stdout = newWriteLogger(opts.Logger, log.LevelInfo)
894+
cmd.Stderr = newWriteLogger(opts.Logger, log.LevelError)
904895
}
905896
err = cmd.Run()
906897
if err != nil {
@@ -1820,6 +1811,23 @@ func onceErrFunc(f func() error) func() error {
18201811
}
18211812
}
18221813

1814+
type writeLogger struct {
1815+
logf log.Func
1816+
level log.Level
1817+
}
1818+
1819+
func newWriteLogger(logf log.Func, level log.Level) io.Writer {
1820+
return writeLogger{logf: logf, level: level}
1821+
}
1822+
1823+
func (l writeLogger) Write(p []byte) (n int, err error) {
1824+
lines := bytes.Split(p, []byte("\n"))
1825+
for _, line := range lines {
1826+
l.logf(l.level, "%s", line)
1827+
}
1828+
return len(p), nil
1829+
}
1830+
18231831
// Allows quick testing of layer caching using a local directory!
18241832
func serveLocalRegistry(ctx context.Context, logf log.Func, layerCacheDir string) (string, func(), error) {
18251833
noop := func() {}

integration/integration_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ func TestLogs(t *testing.T) {
126126
envbuilderEnv("GIT_URL", srv.URL),
127127
"CODER_AGENT_URL=" + logSrv.URL,
128128
"CODER_AGENT_TOKEN=" + token,
129+
"ENVBUILDER_SETUP_SCRIPT=/bin/sh -c 'echo MY${NO_MATCH_ENV}_SETUP_SCRIPT_OUT; echo MY${NO_MATCH_ENV}_SETUP_SCRIPT_ERR' 1>&2",
129130
"ENVBUILDER_INIT_SCRIPT=env",
130131
}})
131132
require.NoError(t, err)
@@ -158,6 +159,8 @@ func TestLogs(t *testing.T) {
158159
require.NoError(t, err)
159160
logs := string(logBytes)
160161
require.Contains(t, logs, "CODER_AGENT_SUBSYSTEM=envbuilder")
162+
require.Contains(t, logs, "MY_SETUP_SCRIPT_OUT")
163+
require.Contains(t, logs, "MY_SETUP_SCRIPT_ERR")
161164
}
162165

163166
func TestInitScriptInitCommand(t *testing.T) {

0 commit comments

Comments
 (0)