@@ -64,8 +64,42 @@ func (api *API) workspaceAgent(rw http.ResponseWriter, r *http.Request) {
64
64
})
65
65
return
66
66
}
67
+
68
+ resource , err := api .Database .GetWorkspaceResourceByID (ctx , workspaceAgent .ResourceID )
69
+ if err != nil {
70
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
71
+ Message : "Internal error fetching workspace resource." ,
72
+ Detail : err .Error (),
73
+ })
74
+ return
75
+ }
76
+ build , err := api .Database .GetWorkspaceBuildByJobID (ctx , resource .JobID )
77
+ if err != nil {
78
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
79
+ Message : "Internal error fetching workspace build." ,
80
+ Detail : err .Error (),
81
+ })
82
+ return
83
+ }
84
+ workspace , err := api .Database .GetWorkspaceByID (ctx , build .WorkspaceID )
85
+ if err != nil {
86
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
87
+ Message : "Internal error fetching workspace." ,
88
+ Detail : err .Error (),
89
+ })
90
+ return
91
+ }
92
+ owner , err := api .Database .GetUserByID (ctx , workspace .OwnerID )
93
+ if err != nil {
94
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
95
+ Message : "Internal error fetching workspace owner." ,
96
+ Detail : err .Error (),
97
+ })
98
+ return
99
+ }
100
+
67
101
apiAgent , err := convertWorkspaceAgent (
68
- api .DERPMap (), * api .TailnetCoordinator .Load (), workspaceAgent , convertApps (dbApps ), api .AgentInactiveDisconnectTimeout ,
102
+ api .DERPMap (), * api .TailnetCoordinator .Load (), workspaceAgent , convertApps (dbApps , workspaceAgent , owner , workspace ), api .AgentInactiveDisconnectTimeout ,
69
103
api .DeploymentValues .AgentFallbackTroubleshootingURL .String (),
70
104
)
71
105
if err != nil {
@@ -165,7 +199,7 @@ func (api *API) workspaceAgentManifest(rw http.ResponseWriter, r *http.Request)
165
199
166
200
httpapi .Write (ctx , rw , http .StatusOK , agentsdk.Manifest {
167
201
AgentID : apiAgent .ID ,
168
- Apps : convertApps (dbApps ),
202
+ Apps : convertApps (dbApps , workspaceAgent , owner , workspace ),
169
203
DERPMap : api .DERPMap (),
170
204
DERPForceWebSockets : api .DeploymentValues .DERP .Config .ForceWebSockets .Value (),
171
205
GitAuthConfigs : len (api .GitAuthConfigs ),
@@ -1281,7 +1315,13 @@ func (api *API) workspaceAgentClientCoordinate(rw http.ResponseWriter, r *http.R
1281
1315
}
1282
1316
}
1283
1317
1284
- func convertApps (dbApps []database.WorkspaceApp ) []codersdk.WorkspaceApp {
1318
+ // convertProvisionedApps converts applications that are in the middle of provisioning process.
1319
+ // It means that they may not have an agent or workspace assigned (dry-run job).
1320
+ func convertProvisionedApps (dbApps []database.WorkspaceApp ) []codersdk.WorkspaceApp {
1321
+ return convertApps (dbApps , database.WorkspaceAgent {}, database.User {}, database.Workspace {})
1322
+ }
1323
+
1324
+ func convertApps (dbApps []database.WorkspaceApp , agent database.WorkspaceAgent , owner database.User , workspace database.Workspace ) []codersdk.WorkspaceApp {
1285
1325
apps := make ([]codersdk.WorkspaceApp , 0 )
1286
1326
for _ , dbApp := range dbApps {
1287
1327
apps = append (apps , codersdk.WorkspaceApp {
0 commit comments