@@ -34,54 +34,60 @@ var workspaceStopCommand = &cobra.Command{
34
34
return err
35
35
}
36
36
37
- slog .Info ("stopping workspace..." )
37
+ slog .Debug ("stopping workspace..." )
38
38
wsInfo , err := gitpod .Workspaces .StopWorkspace (ctx , connect .NewRequest (& v1.StopWorkspaceRequest {WorkspaceId : workspaceID }))
39
39
if err != nil {
40
40
return err
41
41
}
42
42
43
- currentPhase := wsInfo .Msg .GetResult ().Status .Instance .Status .Phase
44
-
45
- if currentPhase == v1 .WorkspaceInstanceStatus_PHASE_STOPPED {
43
+ wsPhase := wsInfo .Msg .GetResult ().Status .Instance .Status .Phase
44
+ switch wsPhase {
45
+ case v1 .WorkspaceInstanceStatus_PHASE_STOPPED :
46
46
slog .Info ("workspace is already stopped" )
47
- return nil
48
- }
49
- if currentPhase == v1 .WorkspaceInstanceStatus_PHASE_STOPPING {
47
+ case v1 .WorkspaceInstanceStatus_PHASE_STOPPING :
50
48
slog .Info ("workspace is already stopping" )
51
- return nil
52
49
}
50
+
53
51
if stopDontWait {
54
52
slog .Info ("workspace stopping" )
55
53
return nil
56
54
}
57
55
58
56
stream , err := gitpod .Workspaces .StreamWorkspaceStatus (ctx , connect .NewRequest (& v1.StreamWorkspaceStatusRequest {WorkspaceId : workspaceID }))
59
-
60
57
if err != nil {
61
58
return err
62
59
}
63
60
64
61
slog .Info ("waiting for workspace to stop..." )
65
- slog .Info ("workspace " + prettyprint .FormatWorkspacePhase (currentPhase ))
66
62
67
63
previousStatus := ""
68
-
69
64
for stream .Receive () {
70
65
msg := stream .Msg ()
71
66
if msg == nil {
72
67
slog .Debug ("no message received" )
73
68
continue
74
69
}
75
70
76
- if msg .GetResult ().Instance .Status .Phase == v1 .WorkspaceInstanceStatus_PHASE_STOPPED {
77
- slog .Info ("workspace stopped" )
71
+ wsPhase = msg .GetResult ().Instance .Status .Phase
72
+ switch wsPhase {
73
+ case v1 .WorkspaceInstanceStatus_PHASE_STOPPED :
74
+ {
75
+ slog .Info ("workspace stopped" )
76
+ return nil
77
+ }
78
+ case v1 .WorkspaceInstanceStatus_PHASE_RUNNING :
79
+ // Skip reporting the "running" status as it is often the initial state and seems confusing to the user.
80
+ // There is some delay between requesting a workspace to stop and it actually stopping, so we don't want
81
+ // to report "running" in the meantime.
78
82
break
79
- }
80
-
81
- currentStatus := prettyprint .FormatWorkspacePhase (msg .GetResult ().Instance .Status .Phase )
82
- if currentStatus != previousStatus {
83
- slog .Info ("workspace " + currentStatus )
84
- previousStatus = currentStatus
83
+ default :
84
+ {
85
+ currentStatus := prettyprint .FormatWorkspacePhase (wsPhase )
86
+ if currentStatus != previousStatus {
87
+ slog .Info ("workspace status: " + currentStatus )
88
+ previousStatus = currentStatus
89
+ }
90
+ }
85
91
}
86
92
}
87
93
0 commit comments