mirror of
https://github.com/coder/coder.git
synced 2025-07-18 14:17:22 +00:00
fix: Test flake in TestWorkspaceStatus
(#4333)
This also changes the status to be on the workspace build, since that's where the true value is calculated. This exposed a bug where jobs could never enter the canceled state unless fetched by a provisioner daemon, which was nice to fix! See: https://github.com/coder/coder/actions/runs/3175304200/jobs/5173479506
This commit is contained in:
@ -552,6 +552,11 @@ func (api *API) patchCancelWorkspaceBuild(rw http.ResponseWriter, r *http.Reques
|
||||
Time: database.Now(),
|
||||
Valid: true,
|
||||
},
|
||||
CompletedAt: sql.NullTime{
|
||||
Time: database.Now(),
|
||||
// If the job is running, don't mark it completed!
|
||||
Valid: !job.WorkerID.Valid,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
|
||||
@ -835,7 +840,8 @@ func (api *API) convertWorkspaceBuild(
|
||||
metadata := append(make([]database.WorkspaceResourceMetadatum, 0), metadataByResourceID[resource.ID]...)
|
||||
apiResources = append(apiResources, convertWorkspaceResource(resource, apiAgents, metadata))
|
||||
}
|
||||
|
||||
apiJob := convertProvisionerJob(job)
|
||||
transition := codersdk.WorkspaceTransition(build.Transition)
|
||||
return codersdk.WorkspaceBuild{
|
||||
ID: build.ID,
|
||||
CreatedAt: build.CreatedAt,
|
||||
@ -846,13 +852,14 @@ func (api *API) convertWorkspaceBuild(
|
||||
WorkspaceName: workspace.Name,
|
||||
TemplateVersionID: build.TemplateVersionID,
|
||||
BuildNumber: build.BuildNumber,
|
||||
Transition: codersdk.WorkspaceTransition(build.Transition),
|
||||
Transition: transition,
|
||||
InitiatorID: build.InitiatorID,
|
||||
InitiatorUsername: initiator.Username,
|
||||
Job: convertProvisionerJob(job),
|
||||
Job: apiJob,
|
||||
Deadline: codersdk.NewNullTime(build.Deadline, !build.Deadline.IsZero()),
|
||||
Reason: codersdk.BuildReason(build.Reason),
|
||||
Resources: apiResources,
|
||||
Status: convertWorkspaceStatus(apiJob.Status, transition),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -898,3 +905,37 @@ func convertWorkspaceResource(resource database.WorkspaceResource, agents []code
|
||||
Metadata: convertedMetadata,
|
||||
}
|
||||
}
|
||||
|
||||
func convertWorkspaceStatus(jobStatus codersdk.ProvisionerJobStatus, transition codersdk.WorkspaceTransition) codersdk.WorkspaceStatus {
|
||||
switch jobStatus {
|
||||
case codersdk.ProvisionerJobPending:
|
||||
return codersdk.WorkspaceStatusPending
|
||||
case codersdk.ProvisionerJobRunning:
|
||||
switch transition {
|
||||
case codersdk.WorkspaceTransitionStart:
|
||||
return codersdk.WorkspaceStatusStarting
|
||||
case codersdk.WorkspaceTransitionStop:
|
||||
return codersdk.WorkspaceStatusStopping
|
||||
case codersdk.WorkspaceTransitionDelete:
|
||||
return codersdk.WorkspaceStatusDeleting
|
||||
}
|
||||
case codersdk.ProvisionerJobSucceeded:
|
||||
switch transition {
|
||||
case codersdk.WorkspaceTransitionStart:
|
||||
return codersdk.WorkspaceStatusRunning
|
||||
case codersdk.WorkspaceTransitionStop:
|
||||
return codersdk.WorkspaceStatusStopped
|
||||
case codersdk.WorkspaceTransitionDelete:
|
||||
return codersdk.WorkspaceStatusDeleted
|
||||
}
|
||||
case codersdk.ProvisionerJobCanceling:
|
||||
return codersdk.WorkspaceStatusCanceling
|
||||
case codersdk.ProvisionerJobCanceled:
|
||||
return codersdk.WorkspaceStatusCanceled
|
||||
case codersdk.ProvisionerJobFailed:
|
||||
return codersdk.WorkspaceStatusFailed
|
||||
}
|
||||
|
||||
// return error status since we should never get here
|
||||
return codersdk.WorkspaceStatusFailed
|
||||
}
|
||||
|
Reference in New Issue
Block a user