Skip to content

Commit eb36e88

Browse files
committed
decompose helper function to retain restart behavior
1 parent 1b8590b commit eb36e88

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

cli/restart.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ func (r *RootCmd) restart() *clibase.Cmd {
3535
return err
3636
}
3737

38+
startReq, err := workspaceStartRequest(inv, client, startWorkspaceArgs{
39+
workspace: workspace,
40+
action: WorkspaceRestart,
41+
parameterFlags: parameterFlags,
42+
alwaysPrompt: true,
43+
})
44+
if err != nil {
45+
return err
46+
}
47+
3848
_, err = cliui.Prompt(inv, cliui.PromptOptions{
3949
Text: "Confirm restart workspace?",
4050
IsConfirm: true,
@@ -55,20 +65,15 @@ func (r *RootCmd) restart() *clibase.Cmd {
5565
return err
5666
}
5767

58-
build, err = startWorkspace(inv, client, startWorkspaceArgs{
59-
workspace: workspace,
60-
parameterFlags: parameterFlags,
61-
action: WorkspaceStart,
62-
alwaysPrompt: false,
63-
})
68+
build, err = client.CreateWorkspaceBuild(ctx, workspace.ID, startReq)
6469
// It's possible for a workspace build to fail due to the template requiring starting
6570
// workspaces with the active version.
6671
if cerr, ok := codersdk.AsError(err); ok && cerr.StatusCode() == http.StatusUnauthorized {
6772
build, err = startWorkspace(inv, client, startWorkspaceArgs{
6873
workspace: workspace,
6974
parameterFlags: parameterFlags,
7075
action: WorkspaceUpdate,
71-
alwaysPrompt: false,
76+
alwaysPrompt: true,
7277
})
7378
if err != nil {
7479
return xerrors.Errorf("start workspace with active template version: %w", err)

cli/start.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,29 +75,29 @@ type startWorkspaceArgs struct {
7575
alwaysPrompt bool
7676
}
7777

78-
func startWorkspace(inv *clibase.Invocation, client *codersdk.Client, args startWorkspaceArgs) (codersdk.WorkspaceBuild, error) {
78+
func workspaceStartRequest(inv *clibase.Invocation, client *codersdk.Client, args startWorkspaceArgs) (codersdk.CreateWorkspaceBuildRequest, error) {
7979
version := args.workspace.LatestBuild.TemplateVersionID
8080
if args.workspace.AutomaticUpdates == codersdk.AutomaticUpdatesAlways || (args.action == WorkspaceUpdate || args.action == WorkspaceCreate) {
8181
template, err := client.Template(inv.Context(), args.workspace.TemplateID)
8282
if err != nil {
83-
return codersdk.WorkspaceBuild{}, xerrors.Errorf("get template: %w", err)
83+
return codersdk.CreateWorkspaceBuildRequest{}, xerrors.Errorf("get template: %w", err)
8484
}
8585
version = template.ActiveVersionID
8686
}
8787

8888
lastBuildParameters, err := client.WorkspaceBuildParameters(inv.Context(), args.workspace.LatestBuild.ID)
8989
if err != nil {
90-
return codersdk.WorkspaceBuild{}, err
90+
return codersdk.CreateWorkspaceBuildRequest{}, err
9191
}
9292

9393
buildOptions, err := asWorkspaceBuildParameters(args.parameterFlags.buildOptions)
9494
if err != nil {
95-
return codersdk.WorkspaceBuild{}, xerrors.Errorf("unable to parse build options: %w", err)
95+
return codersdk.CreateWorkspaceBuildRequest{}, xerrors.Errorf("unable to parse build options: %w", err)
9696
}
9797

9898
cliRichParameters, err := asWorkspaceBuildParameters(args.parameterFlags.richParameters)
9999
if err != nil {
100-
return codersdk.WorkspaceBuild{}, xerrors.Errorf("unable to parse build options: %w", err)
100+
return codersdk.CreateWorkspaceBuildRequest{}, xerrors.Errorf("unable to parse build options: %w", err)
101101
}
102102

103103
buildParameters, err := prepWorkspaceBuild(inv, client, prepWorkspaceBuildArgs{
@@ -113,13 +113,20 @@ func startWorkspace(inv *clibase.Invocation, client *codersdk.Client, args start
113113
RichParameterFile: args.parameterFlags.richParameterFile,
114114
})
115115
if err != nil {
116-
return codersdk.WorkspaceBuild{}, err
116+
return codersdk.CreateWorkspaceBuildRequest{}, err
117117
}
118118

119-
req := codersdk.CreateWorkspaceBuildRequest{
119+
return codersdk.CreateWorkspaceBuildRequest{
120120
Transition: codersdk.WorkspaceTransitionStart,
121121
RichParameterValues: buildParameters,
122122
TemplateVersionID: version,
123+
}, nil
124+
}
125+
126+
func startWorkspace(inv *clibase.Invocation, client *codersdk.Client, args startWorkspaceArgs) (codersdk.WorkspaceBuild, error) {
127+
req, err := workspaceStartRequest(inv, client, args)
128+
if err != nil {
129+
return codersdk.WorkspaceBuild{}, err
123130
}
124131

125132
build, err := client.CreateWorkspaceBuild(inv.Context(), args.workspace.ID, req)

0 commit comments

Comments
 (0)