MCPcopy Index your code
hub / github.com/coder/coder / resumeTask

Method resumeTask

coderd/aitasks.go:1340–1432  ·  view source on GitHub ↗

@Summary Resume task @ID resume-task @Security CoderSessionToken @Produce json @Tags Tasks @Param user path string true "Username, user ID, or 'me' for the authenticated user" @Param task path string true "Task ID" format(uuid) @Success 202 {object} codersdk.ResumeTaskResponse @Router /api/v2/tasks/

(rw http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

1338// @Success 202 {object} codersdk.ResumeTaskResponse
1339// @Router /api/v2/tasks/{user}/{task}/resume [post]
1340func (api *API) resumeTask(rw http.ResponseWriter, r *http.Request) {
1341 var (
1342 ctx = r.Context()
1343 apiKey = httpmw.APIKey(r)
1344 task = httpmw.TaskParam(r)
1345 )
1346
1347 if !task.WorkspaceID.Valid {
1348 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
1349 Message: "Task does not have a workspace.",
1350 })
1351 return
1352 }
1353
1354 workspace, err := api.Database.GetWorkspaceByID(ctx, task.WorkspaceID.UUID)
1355 if err != nil {
1356 if httpapi.Is404Error(err) {
1357 httpapi.ResourceNotFound(rw)
1358 return
1359 }
1360 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
1361 Message: "Internal error fetching task workspace.",
1362 Detail: err.Error(),
1363 })
1364 return
1365 }
1366
1367 latestBuild, err := api.Database.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspace.ID)
1368 if err != nil {
1369 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
1370 Message: "Internal error fetching task workspace build.",
1371 Detail: err.Error(),
1372 })
1373 return
1374 }
1375 job, err := api.Database.GetProvisionerJobByID(ctx, latestBuild.JobID)
1376 if err != nil {
1377 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
1378 Message: "Internal error fetching task workspace build job.",
1379 Detail: err.Error(),
1380 })
1381 return
1382 }
1383 workspaceStatus := codersdk.ConvertWorkspaceStatus(
1384 codersdk.ProvisionerJobStatus(job.JobStatus),
1385 codersdk.WorkspaceTransition(latestBuild.Transition),
1386 )
1387 if workspaceStatus == codersdk.WorkspaceStatusRunning {
1388 httpapi.Write(ctx, rw, http.StatusConflict, codersdk.Response{
1389 Message: "Task workspace is already running.",
1390 Detail: fmt.Sprintf("Workspace status is %q.", workspaceStatus),
1391 })
1392 return
1393 }
1394
1395 buildReq := codersdk.CreateWorkspaceBuildRequest{
1396 Transition: codersdk.WorkspaceTransitionStart,
1397 Reason: codersdk.CreateWorkspaceBuildReasonTaskResume,

Callers 2

TaskPageFunction · 0.80
resumeTaskFunction · 0.80

Calls 15

AuthorizeMethod · 0.95
APIKeyFunction · 0.92
TaskParamFunction · 0.92
WriteFunction · 0.92
Is404ErrorFunction · 0.92
ResourceNotFoundFunction · 0.92
ConvertWorkspaceStatusFunction · 0.92
ProvisionerJobStatusTypeAlias · 0.92
WorkspaceTransitionTypeAlias · 0.92
WriteWorkspaceBuildErrorFunction · 0.92

Tested by

no test coverage detected