Skip to content

Commit 9e3a625

Browse files
authored
Show workspace name in WorkspaceBuildStats component (#1933)
* Show workspace name in WorkspaceBuildStats component Signed-off-by: Spike Curtis <spike@coder.com> * Fix WorkspaceBuildPage tests Signed-off-by: Spike Curtis <spike@coder.com>
1 parent b203d40 commit 9e3a625

File tree

7 files changed

+34
-28
lines changed

7 files changed

+34
-28
lines changed

coderd/workspacebuilds.go

+15-13
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,7 @@ import (
2121

2222
func (api *API) workspaceBuild(rw http.ResponseWriter, r *http.Request) {
2323
workspaceBuild := httpmw.WorkspaceBuildParam(r)
24-
workspace, err := api.Database.GetWorkspaceByID(r.Context(), workspaceBuild.WorkspaceID)
25-
if err != nil {
26-
httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{
27-
Message: "no workspace exists for this job",
28-
})
29-
return
30-
}
24+
workspace := httpmw.WorkspaceParam(r)
3125

3226
if !api.Authorize(rw, r, rbac.ActionRead, rbac.ResourceWorkspace.
3327
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) {
4236
return
4337
}
4438

45-
httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(job)))
39+
httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspace, workspaceBuild, job))
4640
}
4741

4842
func (api *API) workspaceBuilds(rw http.ResponseWriter, r *http.Request) {
@@ -101,7 +95,7 @@ func (api *API) workspaceBuilds(rw http.ResponseWriter, r *http.Request) {
10195
})
10296
return
10397
}
104-
apiBuilds = append(apiBuilds, convertWorkspaceBuild(build, convertProvisionerJob(job)))
98+
apiBuilds = append(apiBuilds, convertWorkspaceBuild(workspace, build, job))
10599
}
106100

107101
httpapi.Write(rw, http.StatusOK, apiBuilds)
@@ -139,7 +133,7 @@ func (api *API) workspaceBuildByName(rw http.ResponseWriter, r *http.Request) {
139133
return
140134
}
141135

142-
httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(job)))
136+
httpapi.Write(rw, http.StatusOK, convertWorkspaceBuild(workspace, workspaceBuild, job))
143137
}
144138

145139
func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
@@ -307,7 +301,8 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
307301
return
308302
}
309303

310-
httpapi.Write(rw, http.StatusCreated, convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(provisionerJob)))
304+
httpapi.Write(rw, http.StatusCreated,
305+
convertWorkspaceBuild(workspace, workspaceBuild, provisionerJob))
311306
}
312307

313308
func (api *API) patchCancelWorkspaceBuild(rw http.ResponseWriter, r *http.Request) {
@@ -432,19 +427,26 @@ func (api *API) workspaceBuildState(rw http.ResponseWriter, r *http.Request) {
432427
_, _ = rw.Write(workspaceBuild.ProvisionerState)
433428
}
434429

435-
func convertWorkspaceBuild(workspaceBuild database.WorkspaceBuild, job codersdk.ProvisionerJob) codersdk.WorkspaceBuild {
430+
func convertWorkspaceBuild(
431+
workspace database.Workspace,
432+
workspaceBuild database.WorkspaceBuild,
433+
job database.ProvisionerJob) codersdk.WorkspaceBuild {
436434
//nolint:unconvert
435+
if workspace.ID != workspaceBuild.WorkspaceID {
436+
panic("workspace and build do not match")
437+
}
437438
return codersdk.WorkspaceBuild{
438439
ID: workspaceBuild.ID,
439440
CreatedAt: workspaceBuild.CreatedAt,
440441
UpdatedAt: workspaceBuild.UpdatedAt,
441442
WorkspaceID: workspaceBuild.WorkspaceID,
443+
WorkspaceName: workspace.Name,
442444
TemplateVersionID: workspaceBuild.TemplateVersionID,
443445
BuildNumber: workspaceBuild.BuildNumber,
444446
Name: workspaceBuild.Name,
445447
Transition: codersdk.WorkspaceTransition(workspaceBuild.Transition),
446448
InitiatorID: workspaceBuild.InitiatorID,
447-
Job: job,
449+
Job: convertProvisionerJob(job),
448450
Deadline: workspaceBuild.Deadline,
449451
}
450452
}

coderd/workspaces.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ func (api *API) workspace(rw http.ResponseWriter, r *http.Request) {
9696
return
9797
}
9898

99-
httpapi.Write(rw, http.StatusOK,
100-
convertWorkspace(workspace, convertWorkspaceBuild(build, convertProvisionerJob(job)), template, owner))
99+
httpapi.Write(rw, http.StatusOK, convertWorkspace(workspace, build, job, template, owner))
101100
}
102101

103102
func (api *API) workspacesByOrganization(rw http.ResponseWriter, r *http.Request) {
@@ -275,8 +274,7 @@ func (api *API) workspaceByOwnerAndName(rw http.ResponseWriter, r *http.Request)
275274
return
276275
}
277276

278-
httpapi.Write(rw, http.StatusOK, convertWorkspace(workspace,
279-
convertWorkspaceBuild(build, convertProvisionerJob(job)), template, owner))
277+
httpapi.Write(rw, http.StatusOK, convertWorkspace(workspace, build, job, template, owner))
280278
}
281279

282280
// Create a new workspace for the currently authenticated user.
@@ -514,8 +512,7 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req
514512
return
515513
}
516514

517-
httpapi.Write(rw, http.StatusCreated, convertWorkspace(workspace,
518-
convertWorkspaceBuild(workspaceBuild, convertProvisionerJob(templateVersionJob)), template, user))
515+
httpapi.Write(rw, http.StatusCreated, convertWorkspace(workspace, workspaceBuild, templateVersionJob, template, user))
519516
}
520517

521518
func (api *API) putWorkspaceAutostart(rw http.ResponseWriter, r *http.Request) {
@@ -736,7 +733,7 @@ func (api *API) watchWorkspace(rw http.ResponseWriter, r *http.Request) {
736733
return
737734
}
738735

739-
_ = wsjson.Write(ctx, c, convertWorkspace(workspace, convertWorkspaceBuild(build, convertProvisionerJob(job)), template, owner))
736+
_ = wsjson.Write(ctx, c, convertWorkspace(workspace, build, job, template, owner))
740737
case <-ctx.Done():
741738
return
742739
}
@@ -829,21 +826,25 @@ func convertWorkspaces(ctx context.Context, db database.Store, workspaces []data
829826
if !exists {
830827
return nil, xerrors.Errorf("owner not found for workspace: %q", workspace.Name)
831828
}
832-
apiWorkspaces = append(apiWorkspaces,
833-
convertWorkspace(workspace, convertWorkspaceBuild(build, convertProvisionerJob(job)), template, user))
829+
apiWorkspaces = append(apiWorkspaces, convertWorkspace(workspace, build, job, template, user))
834830
}
835831
return apiWorkspaces, nil
836832
}
837833

838-
func convertWorkspace(workspace database.Workspace, workspaceBuild codersdk.WorkspaceBuild, template database.Template, owner database.User) codersdk.Workspace {
834+
func convertWorkspace(
835+
workspace database.Workspace,
836+
workspaceBuild database.WorkspaceBuild,
837+
job database.ProvisionerJob,
838+
template database.Template,
839+
owner database.User) codersdk.Workspace {
839840
return codersdk.Workspace{
840841
ID: workspace.ID,
841842
CreatedAt: workspace.CreatedAt,
842843
UpdatedAt: workspace.UpdatedAt,
843844
OwnerID: workspace.OwnerID,
844845
OwnerName: owner.Username,
845846
TemplateID: workspace.TemplateID,
846-
LatestBuild: workspaceBuild,
847+
LatestBuild: convertWorkspaceBuild(workspace, workspaceBuild, job),
847848
TemplateName: template.Name,
848849
Outdated: workspaceBuild.TemplateVersionID.String() != template.ActiveVersionID.String(),
849850
Name: workspace.Name,

codersdk/workspacebuilds.go

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type WorkspaceBuild struct {
2626
CreatedAt time.Time `json:"created_at"`
2727
UpdatedAt time.Time `json:"updated_at"`
2828
WorkspaceID uuid.UUID `json:"workspace_id"`
29+
WorkspaceName string `json:"workspace_name"`
2930
TemplateVersionID uuid.UUID `json:"template_version_id"`
3031
BuildNumber int32 `json:"build_number"`
3132
Name string `json:"name"`

site/src/api/typesGenerated.ts

+1
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ export interface WorkspaceBuild {
429429
readonly created_at: string
430430
readonly updated_at: string
431431
readonly workspace_id: string
432+
readonly workspace_name: string
432433
readonly template_version_id: string
433434
readonly build_number: number
434435
readonly name: string

site/src/components/WorkspaceBuildStats/WorkspaceBuildStats.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ export const WorkspaceBuildStats: FC<WorkspaceBuildStatsProps> = ({ build }) =>
1919
return (
2020
<div className={styles.stats}>
2121
<div className={styles.statItem}>
22-
<span className={styles.statsLabel}>Workspace ID</span>
22+
<span className={styles.statsLabel}>Workspace Name</span>
2323
<Link
2424
component={RouterLink}
2525
to={`/workspaces/${build.workspace_id}`}
2626
className={combineClasses([styles.statsValue, styles.link])}
2727
>
28-
{build.workspace_id}
28+
{build.workspace_name}
2929
</Link>
3030
</div>
3131
<div className={styles.statsDivider} />

site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ describe("WorkspaceBuildPage", () => {
66
it("renders the stats and logs", async () => {
77
renderWithAuth(<WorkspaceBuildPage />, { route: `/builds/${MockWorkspaceBuild.id}`, path: "/builds/:buildId" })
88

9-
await screen.findByText(MockWorkspaceBuild.workspace_id)
9+
await screen.findByText(MockWorkspaceBuild.workspace_name)
1010
await screen.findByText(MockWorkspaceBuildLogs[0].stage)
1111
})
1212
})

site/src/testHelpers/entities.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ export const MockWorkspaceBuild: TypesGen.WorkspaceBuild = {
134134
template_version_id: "",
135135
transition: "start",
136136
updated_at: "2022-05-17T17:39:01.382927298Z",
137-
workspace_id: "test-workspace",
137+
workspace_name: "test-workspace",
138+
workspace_id: "759f1d46-3174-453d-aa60-980a9c1442f3",
138139
deadline: "2022-05-17T23:39:00.00Z",
139140
}
140141

0 commit comments

Comments
 (0)