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