mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: show banner when workspace is outdated (#4926)
* feat: show banner when workspace is outdated * Address PR comments * Fix: writer
This commit is contained in:
+21
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@@ -72,6 +73,11 @@ func ssh() *cobra.Command {
|
||||
return err
|
||||
}
|
||||
|
||||
updateWorkspaceBanner, outdated := verifyWorkspaceOutdated(client, workspace)
|
||||
if outdated && isTTYErr(cmd) {
|
||||
_, _ = fmt.Fprintln(cmd.ErrOrStderr(), updateWorkspaceBanner)
|
||||
}
|
||||
|
||||
// OpenSSH passes stderr directly to the calling TTY.
|
||||
// This is required in "stdio" mode so a connecting indicator can be displayed.
|
||||
err = cliui.Agent(ctx, cmd.ErrOrStderr(), cliui.AgentOptions{
|
||||
@@ -343,3 +349,18 @@ func notifyCondition(ctx context.Context, client *codersdk.Client, workspaceID u
|
||||
return deadline.Truncate(time.Minute), callback
|
||||
}
|
||||
}
|
||||
|
||||
// Verify if the user workspace is outdated and prepare an actionable message for user.
|
||||
func verifyWorkspaceOutdated(client *codersdk.Client, workspace codersdk.Workspace) (string, bool) {
|
||||
if !workspace.Outdated {
|
||||
return "", false // workspace is up-to-date
|
||||
}
|
||||
|
||||
workspaceLink := buildWorkspaceLink(client.URL, workspace)
|
||||
return fmt.Sprintf("👋 Your workspace is outdated! Update it here: %s\n", workspaceLink), true
|
||||
}
|
||||
|
||||
// Build the user workspace link which navigates to the Coder web UI.
|
||||
func buildWorkspaceLink(serverURL *url.URL, workspace codersdk.Workspace) *url.URL {
|
||||
return serverURL.ResolveReference(&url.URL{Path: fmt.Sprintf("@%s/%s", workspace.OwnerName, workspace.Name)})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user