From af3cd138b2b949c5fa5fdf9c09ba6110ef0f1d10 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Tue, 26 Jul 2022 14:12:17 +0300 Subject: [PATCH 1/2] fix: Use stdin/out defined in command --- cli/server.go | 6 +++--- cli/ssh.go | 9 +++++---- cli/state_test.go | 3 --- cli/templatecreate_test.go | 5 ----- cli/templateedit.go | 2 +- cli/templateupdate.go | 2 +- cli/update.go | 4 ++-- cli/wireguardtunnel.go | 2 +- 8 files changed, 13 insertions(+), 20 deletions(-) diff --git a/cli/server.go b/cli/server.go index bbe5edc1be0ff..6d9986ee27d74 100644 --- a/cli/server.go +++ b/cli/server.go @@ -106,7 +106,7 @@ func server() *cobra.Command { Short: "Start a Coder server", RunE: func(cmd *cobra.Command, args []string) error { printLogo(cmd, spooky) - logger := slog.Make(sloghuman.Sink(os.Stderr)) + logger := slog.Make(sloghuman.Sink(cmd.ErrOrStderr())) if verbose { logger = logger.Leveled(slog.LevelDebug) } @@ -348,7 +348,7 @@ func server() *cobra.Command { } // This prevents the pprof import from being accidentally deleted. - var _ = pprof.Handler + _ = pprof.Handler if pprofEnabled { //nolint:revive defer serveHandler(cmd.Context(), logger, nil, pprofAddress, "pprof")() @@ -516,7 +516,7 @@ func server() *cobra.Command { Short: "Run the built-in PostgreSQL deployment.", RunE: func(cmd *cobra.Command, args []string) error { cfg := createConfig(cmd) - logger := slog.Make(sloghuman.Sink(os.Stderr)) + logger := slog.Make(sloghuman.Sink(cmd.ErrOrStderr())) if verbose { logger = logger.Leveled(slog.LevelDebug) } diff --git a/cli/ssh.go b/cli/ssh.go index d3d2b36c539a9..682280b64c1c5 100644 --- a/cli/ssh.go +++ b/cli/ssh.go @@ -127,7 +127,7 @@ func ssh() *cobra.Command { ipv6 := peerwg.UUIDToNetaddr(uuid.New()) wgn, err := peerwg.New( - slog.Make(sloghuman.Sink(os.Stderr)), + slog.Make(sloghuman.Sink(cmd.ErrOrStderr())), []netaddr.IPPrefix{netaddr.IPPrefixFrom(ipv6, 128)}, ) if err != nil { @@ -193,13 +193,14 @@ func ssh() *cobra.Command { } stdoutFile, valid := cmd.OutOrStdout().(*os.File) - if valid && isatty.IsTerminal(stdoutFile.Fd()) { - state, err := term.MakeRaw(int(os.Stdin.Fd())) + stdinFile, valid2 := cmd.InOrStdin().(*os.File) + if valid && valid2 && isatty.IsTerminal(stdoutFile.Fd()) { + state, err := term.MakeRaw(int(stdinFile.Fd())) if err != nil { return err } defer func() { - _ = term.Restore(int(os.Stdin.Fd()), state) + _ = term.Restore(int(stdinFile.Fd()), state) }() windowChange := listenWindowSize(cmd.Context()) diff --git a/cli/state_test.go b/cli/state_test.go index 59f56f2bea504..7fbdb2d364e0a 100644 --- a/cli/state_test.go +++ b/cli/state_test.go @@ -2,7 +2,6 @@ package cli_test import ( "bytes" - "io" "os" "path/filepath" "strings" @@ -97,8 +96,6 @@ func TestStatePush(t *testing.T) { err = stateFile.Close() require.NoError(t, err) cmd, root := clitest.New(t, "state", "push", workspace.Name, stateFile.Name()) - cmd.SetErr(io.Discard) - cmd.SetOut(io.Discard) clitest.SetupConfig(t, client, root) err = cmd.Execute() require.NoError(t, err) diff --git a/cli/templatecreate_test.go b/cli/templatecreate_test.go index aaf409aef7b9e..22a2681b36b9d 100644 --- a/cli/templatecreate_test.go +++ b/cli/templatecreate_test.go @@ -1,7 +1,6 @@ package cli_test import ( - "io" "os" "testing" @@ -219,8 +218,6 @@ func TestTemplateCreate(t *testing.T) { } cmd, root := clitest.New(t, args...) clitest.SetupConfig(t, client, root) - cmd.SetOut(io.Discard) - cmd.SetErr(io.Discard) return cmd.Execute() } @@ -233,8 +230,6 @@ func TestTemplateCreate(t *testing.T) { } cmd, root := clitest.New(t, args...) clitest.SetupConfig(t, client, root) - cmd.SetOut(io.Discard) - cmd.SetErr(io.Discard) return cmd.Execute() } diff --git a/cli/templateedit.go b/cli/templateedit.go index 6f614b55a3a4b..1f73eea8e307e 100644 --- a/cli/templateedit.go +++ b/cli/templateedit.go @@ -47,7 +47,7 @@ func templateEdit() *cobra.Command { if err != nil { return xerrors.Errorf("update template metadata: %w", err) } - _, _ = fmt.Printf("Updated template metadata at %s!\n", cliui.Styles.DateTimeStamp.Render(time.Now().Format(time.Stamp))) + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "Updated template metadata at %s!\n", cliui.Styles.DateTimeStamp.Render(time.Now().Format(time.Stamp))) return nil }, } diff --git a/cli/templateupdate.go b/cli/templateupdate.go index 3922c8492e8c8..d4f92be15b22a 100644 --- a/cli/templateupdate.go +++ b/cli/templateupdate.go @@ -98,7 +98,7 @@ func templateUpdate() *cobra.Command { return err } - _, _ = fmt.Printf("Updated version at %s!\n", cliui.Styles.DateTimeStamp.Render(time.Now().Format(time.Stamp))) + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "Updated version at %s!\n", cliui.Styles.DateTimeStamp.Render(time.Now().Format(time.Stamp))) return nil }, } diff --git a/cli/update.go b/cli/update.go index 5875c56b67c3f..52aee949cb013 100644 --- a/cli/update.go +++ b/cli/update.go @@ -30,7 +30,7 @@ func update() *cobra.Command { return err } if !workspace.Outdated && !alwaysPrompt { - _, _ = fmt.Printf("Workspace isn't outdated!\n") + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "Workspace isn't outdated!\n") return nil } template, err := client.Template(cmd.Context(), workspace.TemplateID) @@ -74,7 +74,7 @@ func update() *cobra.Command { if !ok { break } - _, _ = fmt.Printf("Output: %s\n", log.Output) + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "Output: %s\n", log.Output) } return nil }, diff --git a/cli/wireguardtunnel.go b/cli/wireguardtunnel.go index 4d062ded65d8b..8d953a846072e 100644 --- a/cli/wireguardtunnel.go +++ b/cli/wireguardtunnel.go @@ -95,7 +95,7 @@ func wireguardPortForward() *cobra.Command { ipv6 := peerwg.UUIDToNetaddr(uuid.New()) wgn, err := peerwg.New( - slog.Make(sloghuman.Sink(os.Stderr)), + slog.Make(sloghuman.Sink(cmd.ErrOrStderr())), []netaddr.IPPrefix{netaddr.IPPrefixFrom(ipv6, 128)}, ) if err != nil { From 76c85db87067b1a3575bc69a5b0479fbc4e7bda8 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Tue, 26 Jul 2022 14:51:32 +0300 Subject: [PATCH 2/2] chore: Rename valid vars --- cli/ssh.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/ssh.go b/cli/ssh.go index 682280b64c1c5..a5e420be0bbaa 100644 --- a/cli/ssh.go +++ b/cli/ssh.go @@ -192,9 +192,9 @@ func ssh() *cobra.Command { } } - stdoutFile, valid := cmd.OutOrStdout().(*os.File) - stdinFile, valid2 := cmd.InOrStdin().(*os.File) - if valid && valid2 && isatty.IsTerminal(stdoutFile.Fd()) { + stdoutFile, validOut := cmd.OutOrStdout().(*os.File) + stdinFile, validIn := cmd.InOrStdin().(*os.File) + if validOut && validIn && isatty.IsTerminal(stdoutFile.Fd()) { state, err := term.MakeRaw(int(stdinFile.Fd())) if err != nil { return err