diff --git a/.changelog/10926.txt b/.changelog/10926.txt new file mode 100644 index 000000000000..e0a19617db80 --- /dev/null +++ b/.changelog/10926.txt @@ -0,0 +1,3 @@ +```release-note:bug +cli: Fixed a panic when deployment monitor is invoked in some CI environments +``` diff --git a/command/deployment_status.go b/command/deployment_status.go index 8f59b267b1cb..18de5e218ce0 100644 --- a/command/deployment_status.go +++ b/command/deployment_status.go @@ -182,15 +182,28 @@ func (c *DeploymentStatusCommand) Run(args []string) int { } func (c *DeploymentStatusCommand) monitor(client *api.Client, deployID string, index uint64, verbose bool) { - _, isStdoutTerminal := term.GetFdInfo(os.Stdout) - // TODO if/when glint offers full Windows support take out the runtime check - if isStdoutTerminal && runtime.GOOS != "windows" { + if isStdoutTerminal() { c.ttyMonitor(client, deployID, index, verbose) } else { c.defaultMonitor(client, deployID, index, verbose) } } +func isStdoutTerminal() bool { + // TODO if/when glint offers full Windows support take out the runtime check + if runtime.GOOS == "windows" { + return false + } + + // glint checks if the writer is a tty with additional + // checks (e.g. terminal has non-0 size) + r := &glint.TerminalRenderer{ + Output: os.Stdout, + } + + return r.LayoutRoot() != nil +} + // Uses glint for printing in place. Same logic as the defaultMonitor function // but only used for tty and non-Windows machines since glint doesn't work with // cmd/PowerShell and non-interactive interfaces @@ -214,9 +227,9 @@ func (c *DeploymentStatusCommand) ttyMonitor(client *api.Client, deployID string d.Set(spinner) ctx, cancel := context.WithCancel(context.Background()) + defer cancel() go d.Render(ctx) - defer cancel() q := api.QueryOptions{ AllowStale: true, diff --git a/go.mod b/go.mod index c8274c7e50ae..4f86bf456dd4 100644 --- a/go.mod +++ b/go.mod @@ -98,7 +98,7 @@ require ( github.com/mitchellh/cli v1.1.0 github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286 github.com/mitchellh/copystructure v1.0.0 - github.com/mitchellh/go-glint v0.0.0-20201119015200-53f6eb3bf4d2 + github.com/mitchellh/go-glint v0.0.0-20210722152315-6515ceb4a127 github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b github.com/mitchellh/go-testing-interface v1.14.1 github.com/mitchellh/hashstructure v1.0.0 diff --git a/go.sum b/go.sum index e4463b0d5cab..be4e0308aae9 100644 --- a/go.sum +++ b/go.sum @@ -540,8 +540,8 @@ github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286 h1:KHyL+3mQO github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-glint v0.0.0-20201119015200-53f6eb3bf4d2 h1:p6jvEJYVtY05cbttwUhvxzV1j/e/40musLqs18vkv+E= -github.com/mitchellh/go-glint v0.0.0-20201119015200-53f6eb3bf4d2/go.mod h1:9X3rpO+I3yuihb6p8ktF8qWxROGwij9DBW/czUsMlhk= +github.com/mitchellh/go-glint v0.0.0-20210722152315-6515ceb4a127 h1:/EdGXMUGYFdp0+cmGjVLl/Qbx3G10csqgj22ZkrPFEA= +github.com/mitchellh/go-glint v0.0.0-20210722152315-6515ceb4a127/go.mod h1:9X3rpO+I3yuihb6p8ktF8qWxROGwij9DBW/czUsMlhk= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=