Skip to content

Commit 1196f83

Browse files
authored
feat: automatically activate dormant workspaces when manually started (#11655)
1 parent d74aae7 commit 1196f83

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

cli/start.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,15 @@ func buildWorkspaceStartRequest(inv *clibase.Invocation, client *codersdk.Client
125125
}
126126

127127
func startWorkspace(inv *clibase.Invocation, client *codersdk.Client, workspace codersdk.Workspace, parameterFlags workspaceParameterFlags, action WorkspaceCLIAction) (codersdk.WorkspaceBuild, error) {
128+
if workspace.DormantAt != nil {
129+
_, _ = fmt.Fprintln(inv.Stdout, "Activating dormant workspace...")
130+
err := client.UpdateWorkspaceDormancy(inv.Context(), workspace.ID, codersdk.UpdateWorkspaceDormancy{
131+
Dormant: false,
132+
})
133+
if err != nil {
134+
return codersdk.WorkspaceBuild{}, xerrors.Errorf("activate workspace: %w", err)
135+
}
136+
}
128137
req, err := buildWorkspaceStartRequest(inv, client, workspace, parameterFlags, action)
129138
if err != nil {
130139
return codersdk.WorkspaceBuild{}, err

enterprise/cli/start_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,4 +167,46 @@ func TestStart(t *testing.T) {
167167
})
168168
}
169169
})
170+
171+
t.Run("StartActivatesDormant", func(t *testing.T) {
172+
t.Parallel()
173+
174+
ctx := testutil.Context(t, testutil.WaitMedium)
175+
ownerClient, owner := coderdenttest.New(t, &coderdenttest.Options{
176+
Options: &coderdtest.Options{
177+
IncludeProvisionerDaemon: true,
178+
},
179+
LicenseOptions: &coderdenttest.LicenseOptions{
180+
Features: license.Features{
181+
codersdk.FeatureAdvancedTemplateScheduling: 1,
182+
},
183+
},
184+
})
185+
186+
version := coderdtest.CreateTemplateVersion(t, ownerClient, owner.OrganizationID, nil)
187+
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, version.ID)
188+
template := coderdtest.CreateTemplate(t, ownerClient, owner.OrganizationID, version.ID)
189+
190+
memberClient, _ := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
191+
workspace := coderdtest.CreateWorkspace(t, memberClient, owner.OrganizationID, template.ID)
192+
_ = coderdtest.AwaitWorkspaceBuildJobCompleted(t, memberClient, workspace.LatestBuild.ID)
193+
_ = coderdtest.MustTransitionWorkspace(t, memberClient, workspace.ID, database.WorkspaceTransitionStart, database.WorkspaceTransitionStop)
194+
err := memberClient.UpdateWorkspaceDormancy(ctx, workspace.ID, codersdk.UpdateWorkspaceDormancy{
195+
Dormant: true,
196+
})
197+
require.NoError(t, err)
198+
199+
inv, root := newCLI(t, "start", workspace.Name)
200+
clitest.SetupConfig(t, memberClient, root)
201+
202+
var buf bytes.Buffer
203+
inv.Stdout = &buf
204+
205+
err = inv.Run()
206+
require.NoError(t, err)
207+
require.Contains(t, buf.String(), "Activating dormant workspace...")
208+
209+
workspace = coderdtest.MustWorkspace(t, memberClient, workspace.ID)
210+
require.Equal(t, codersdk.WorkspaceTransitionStart, workspace.LatestBuild.Transition)
211+
})
170212
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy