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

Lines changed: 15 additions & 13 deletions
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

Lines changed: 12 additions & 11 deletions
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 1 deletion
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy