Skip to content

Commit 532c639

Browse files
johnstcnmafredri
andauthored
fix: enable logging for setup script when not a tty (#402) (#422)
Co-authored-by: Mathias Fredriksson <[email protected]>
1 parent dc6aa54 commit 532c639

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"
@@ -885,16 +884,8 @@ func run(ctx context.Context, opts options.Options, execArgs *execArgsInfo) erro
885884
cmd.Stderr = os.Stderr
886885
cmd.Stdin = os.Stdin
887886
} else {
888-
var buf bytes.Buffer
889-
go func() {
890-
scanner := bufio.NewScanner(&buf)
891-
for scanner.Scan() {
892-
opts.Logger(log.LevelInfo, "%s", scanner.Text())
893-
}
894-
}()
895-
896-
cmd.Stdout = &buf
897-
cmd.Stderr = &buf
887+
cmd.Stdout = newWriteLogger(opts.Logger, log.LevelInfo)
888+
cmd.Stderr = newWriteLogger(opts.Logger, log.LevelError)
898889
}
899890
err = cmd.Run()
900891
if err != nil {
@@ -1814,6 +1805,23 @@ func onceErrFunc(f func() error) func() error {
18141805
}
18151806
}
18161807

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

integration/integration_test.go

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

164167
func TestInitScriptInitCommand(t *testing.T) {

0 commit comments

Comments
 (0)