From aa37450a13b2f25256522539a4a00e9ccdf938d8 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Tue, 31 May 2022 13:54:48 -0700 Subject: [PATCH 1/2] Show workspace name in WorkspaceBuildStats component Signed-off-by: Spike Curtis --- coderd/workspacebuilds.go | 28 ++++++++++--------- coderd/workspaces.go | 23 +++++++-------- codersdk/workspacebuilds.go | 1 + site/src/api/typesGenerated.ts | 1 + .../WorkspaceBuildStats.tsx | 4 +-- site/src/testHelpers/entities.ts | 3 +- 6 files changed, 33 insertions(+), 27 deletions(-) diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index c19c900987873..bb8dc2a578bd3 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -21,13 +21,7 @@ import ( func (api *API) workspaceBuild(rw http.ResponseWriter, r *http.Request) { workspaceBuild := httpmw.WorkspaceBuildParam(r) - workspace, err := api.Database.GetWorkspaceByID(r.Context(), workspaceBuild.WorkspaceID) - if err != nil { - httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ - Message: "no workspace exists for this job", - }) - return - } + workspace := httpmw.WorkspaceParam(r) if !api.Authorize(rw, r, rbac.ActionRead, rbac.ResourceWorkspace. InOrg(workspace.OrganizationID).WithOwner(workspace.OwnerID.String()).WithID(workspace.ID.String())) { @@ -42,7 +36,7 @@ func (api *API) workspaceBuild(rw http.ResponseWriter, r *http.Request) { return } - httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(job))) + httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspace, workspaceBuild, job)) } func (api *API) workspaceBuilds(rw http.ResponseWriter, r *http.Request) { @@ -101,7 +95,7 @@ func (api *API) workspaceBuilds(rw http.ResponseWriter, r *http.Request) { }) return } - apiBuilds = append(apiBuilds, convertWorkspaceBuild(build, convertProvisionerJob(job))) + apiBuilds = append(apiBuilds, convertWorkspaceBuild(workspace, build, job)) } httpapi.Write(rw, http.StatusOK, apiBuilds) @@ -139,7 +133,7 @@ func (api *API) workspaceBuildByName(rw http.ResponseWriter, r *http.Request) { return } - httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(job))) + httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspace, workspaceBuild, job)) } func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { @@ -307,7 +301,8 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { return } - httpapi.Write(rw, http.StatusCreated, convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(provisionerJob))) + httpapi.Write(rw, http.StatusCreated, + convertWorkspaceBuild(workspace, workspaceBuild, provisionerJob)) } func (api *API) patchCancelWorkspaceBuild(rw http.ResponseWriter, r *http.Request) { @@ -432,19 +427,26 @@ func (api *API) workspaceBuildState(rw http.ResponseWriter, r *http.Request) { _, _ = rw.Write(workspaceBuild.ProvisionerState) } -func convertWorkspaceBuild(workspaceBuild database.WorkspaceBuild, job codersdk.ProvisionerJob) codersdk.WorkspaceBuild { +func convertWorkspaceBuild( + workspace database.Workspace, + workspaceBuild database.WorkspaceBuild, + job database.ProvisionerJob) codersdk.WorkspaceBuild { //nolint:unconvert + if workspace.ID != workspaceBuild.WorkspaceID { + panic("workspace and build do not match") + } return codersdk.WorkspaceBuild{ ID: workspaceBuild.ID, CreatedAt: workspaceBuild.CreatedAt, UpdatedAt: workspaceBuild.UpdatedAt, WorkspaceID: workspaceBuild.WorkspaceID, + WorkspaceName: workspace.Name, TemplateVersionID: workspaceBuild.TemplateVersionID, BuildNumber: workspaceBuild.BuildNumber, Name: workspaceBuild.Name, Transition: codersdk.WorkspaceTransition(workspaceBuild.Transition), InitiatorID: workspaceBuild.InitiatorID, - Job: job, + Job: convertProvisionerJob(job), Deadline: workspaceBuild.Deadline, } } diff --git a/coderd/workspaces.go b/coderd/workspaces.go index 7de4e0a806e15..85566f1a1df9e 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -96,8 +96,7 @@ func (api *API) workspace(rw http.ResponseWriter, r *http.Request) { return } - httpapi.Write(rw, http.StatusOK, - convertWorkspace(workspace, convertWorkspaceBuild(build, convertProvisionerJob(job)), template, owner)) + httpapi.Write(rw, http.StatusOK, convertWorkspace(workspace, build, job, template, owner)) } func (api *API) workspacesByOrganization(rw http.ResponseWriter, r *http.Request) { @@ -275,8 +274,7 @@ func (api *API) workspaceByOwnerAndName(rw http.ResponseWriter, r *http.Request) return } - httpapi.Write(rw, http.StatusOK, convertWorkspace(workspace, - convertWorkspaceBuild(build, convertProvisionerJob(job)), template, owner)) + httpapi.Write(rw, http.StatusOK, convertWorkspace(workspace, build, job, template, owner)) } // Create a new workspace for the currently authenticated user. @@ -514,8 +512,7 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req return } - httpapi.Write(rw, http.StatusCreated, convertWorkspace(workspace, - convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(templateVersionJob)), template, user)) + httpapi.Write(rw, http.StatusCreated, convertWorkspace(workspace, workspaceBuild, templateVersionJob, template, user)) } func (api *API) putWorkspaceAutostart(rw http.ResponseWriter, r *http.Request) { @@ -736,7 +733,7 @@ func (api *API) watchWorkspace(rw http.ResponseWriter, r *http.Request) { return } - _ = wsjson.Write(ctx, c, convertWorkspace(workspace, convertWorkspaceBuild(build, convertProvisionerJob(job)), template, owner)) + _ = wsjson.Write(ctx, c, convertWorkspace(workspace, build, job, template, owner)) case <-ctx.Done(): return } @@ -829,13 +826,17 @@ func convertWorkspaces(ctx context.Context, db database.Store, workspaces []data if !exists { return nil, xerrors.Errorf("owner not found for workspace: %q", workspace.Name) } - apiWorkspaces = append(apiWorkspaces, - convertWorkspace(workspace, convertWorkspaceBuild(build, convertProvisionerJob(job)), template, user)) + apiWorkspaces = append(apiWorkspaces, convertWorkspace(workspace, build, job, template, user)) } return apiWorkspaces, nil } -func convertWorkspace(workspace database.Workspace, workspaceBuild codersdk.WorkspaceBuild, template database.Template, owner database.User) codersdk.Workspace { +func convertWorkspace( + workspace database.Workspace, + workspaceBuild database.WorkspaceBuild, + job database.ProvisionerJob, + template database.Template, + owner database.User) codersdk.Workspace { return codersdk.Workspace{ ID: workspace.ID, CreatedAt: workspace.CreatedAt, @@ -843,7 +844,7 @@ func convertWorkspace(workspace database.Workspace, workspaceBuild codersdk.Work OwnerID: workspace.OwnerID, OwnerName: owner.Username, TemplateID: workspace.TemplateID, - LatestBuild: workspaceBuild, + LatestBuild: convertWorkspaceBuild(workspace, workspaceBuild, job), TemplateName: template.Name, Outdated: workspaceBuild.TemplateVersionID.String() != template.ActiveVersionID.String(), Name: workspace.Name, diff --git a/codersdk/workspacebuilds.go b/codersdk/workspacebuilds.go index 2a4b04c787a7a..3216c4a62a439 100644 --- a/codersdk/workspacebuilds.go +++ b/codersdk/workspacebuilds.go @@ -26,6 +26,7 @@ type WorkspaceBuild struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` WorkspaceID uuid.UUID `json:"workspace_id"` + WorkspaceName string `json:"workspace_name"` TemplateVersionID uuid.UUID `json:"template_version_id"` BuildNumber int32 `json:"build_number"` Name string `json:"name"` diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 82890515e3044..7bfed95a22fd1 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -422,6 +422,7 @@ export interface WorkspaceBuild { readonly created_at: string readonly updated_at: string readonly workspace_id: string + readonly workspace_name: string readonly template_version_id: string readonly build_number: number readonly name: string diff --git a/site/src/components/WorkspaceBuildStats/WorkspaceBuildStats.tsx b/site/src/components/WorkspaceBuildStats/WorkspaceBuildStats.tsx index 994ec1a94935d..5087e4a6cb476 100644 --- a/site/src/components/WorkspaceBuildStats/WorkspaceBuildStats.tsx +++ b/site/src/components/WorkspaceBuildStats/WorkspaceBuildStats.tsx @@ -19,13 +19,13 @@ export const WorkspaceBuildStats: FC = ({ build }) => return (
- Workspace ID + Workspace Name - {build.workspace_id} + {build.workspace_name}
diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 0c17805ba9bb7..615387fde640a 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -134,7 +134,8 @@ export const MockWorkspaceBuild: TypesGen.WorkspaceBuild = { template_version_id: "", transition: "start", updated_at: "2022-05-17T17:39:01.382927298Z", - workspace_id: "test-workspace", + workspace_name: "test-workspace", + workspace_id: "759f1d46-3174-453d-aa60-980a9c1442f3", deadline: "2022-05-17T23:39:00.00Z", } From 2f3f3f86bece5e6478dd59f32d0158611d3d6404 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Tue, 31 May 2022 15:51:12 -0700 Subject: [PATCH 2/2] Fix WorkspaceBuildPage tests Signed-off-by: Spike Curtis --- site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx b/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx index 7b8b01e703d4e..b4f3e3f29e88f 100644 --- a/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx +++ b/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx @@ -6,7 +6,7 @@ describe("WorkspaceBuildPage", () => { it("renders the stats and logs", async () => { renderWithAuth(, { route: `/builds/${MockWorkspaceBuild.id}`, path: "/builds/:buildId" }) - await screen.findByText(MockWorkspaceBuild.workspace_id) + await screen.findByText(MockWorkspaceBuild.workspace_name) await screen.findByText(MockWorkspaceBuildLogs[0].stage) }) })