Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc0e169e

Browse files
authored
feat: support custom order of agent metadata (#12066)
1 parente659957 commitc0e169e

23 files changed

+438
-316
lines changed

‎coderd/database/dbmem/dbmem.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5687,6 +5687,7 @@ func (q *FakeQuerier) InsertWorkspaceAgentMetadata(_ context.Context, arg databa
56875687
Key:arg.Key,
56885688
Timeout:arg.Timeout,
56895689
Interval:arg.Interval,
5690+
DisplayOrder:arg.DisplayOrder,
56905691
}
56915692

56925693
q.workspaceAgentMetadata=append(q.workspaceAgentMetadata,metadatum)

‎coderd/database/dump.sql‎

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTERTABLE workspace_agent_metadata DROP COLUMN display_order;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTERTABLE workspace_agent_metadata ADD COLUMN display_orderintegerNOT NULL DEFAULT0;
2+
3+
COMMENTON COLUMNworkspace_agent_metadata.display_order
4+
IS'Specifies the order in which to display agent metadata in user interfaces.';

‎coderd/database/models.go‎

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries.sql.go‎

Lines changed: 7 additions & 3 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/workspaceagents.sql‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@ INSERT INTO
103103
key,
104104
script,
105105
timeout,
106-
interval
106+
interval,
107+
display_order
107108
)
108109
VALUES
109-
($1, $2, $3, $4, $5, $6);
110+
($1, $2, $3, $4, $5, $6, $7);
110111

111112
-- name: UpdateWorkspaceAgentMetadata :exec
112113
WITH metadataAS (

‎coderd/provisionerdserver/provisionerdserver.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,6 +1538,7 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
15381538
Key:md.Key,
15391539
Timeout:md.Timeout,
15401540
Interval:md.Interval,
1541+
DisplayOrder:int32(md.Order),
15411542
}
15421543
err:=db.InsertWorkspaceAgentMetadata(ctx,p)
15431544
iferr!=nil {

‎coderd/workspaceagents.go‎

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1590,10 +1590,18 @@ func appendUnique[T comparable](dst, src []T) []T {
15901590
}
15911591

15921592
funcconvertWorkspaceAgentMetadata(db []database.WorkspaceAgentMetadatum) []codersdk.WorkspaceAgentMetadata {
1593+
// Sort the input database slice by DisplayOrder and then by Key before processing
1594+
sort.Slice(db,func(i,jint)bool {
1595+
ifdb[i].DisplayOrder==db[j].DisplayOrder {
1596+
returndb[i].Key<db[j].Key
1597+
}
1598+
returndb[i].DisplayOrder<db[j].DisplayOrder
1599+
})
1600+
15931601
// An empty array is easier for clients to handle than a null.
1594-
result:=make([]codersdk.WorkspaceAgentMetadata,0,len(db))
1595-
for_,datum:=rangedb {
1596-
result=append(result, codersdk.WorkspaceAgentMetadata{
1602+
result:=make([]codersdk.WorkspaceAgentMetadata,len(db))
1603+
fori,datum:=rangedb {
1604+
result[i]= codersdk.WorkspaceAgentMetadata{
15971605
Result: codersdk.WorkspaceAgentMetadataResult{
15981606
Value:datum.Value,
15991607
Error:datum.Error,
@@ -1607,12 +1615,8 @@ func convertWorkspaceAgentMetadata(db []database.WorkspaceAgentMetadatum) []code
16071615
Interval:datum.Interval,
16081616
Timeout:datum.Timeout,
16091617
},
1610-
})
1618+
}
16111619
}
1612-
// Sorting prevents the metadata from jumping around in the frontend.
1613-
sort.Slice(result,func(i,jint)bool {
1614-
returnresult[i].Description.Key<result[j].Description.Key
1615-
})
16161620
returnresult
16171621
}
16181622

‎coderd/workspaceagents_test.go‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,92 @@ func TestWorkspaceAgent_Metadata(t *testing.T) {
12481248
post(ctx,"unknown",unknownKeyMetadata)
12491249
}
12501250

1251+
funcTestWorkspaceAgent_Metadata_DisplayOrder(t*testing.T) {
1252+
t.Parallel()
1253+
1254+
client,db:=coderdtest.NewWithDatabase(t,nil)
1255+
user:=coderdtest.CreateFirstUser(t,client)
1256+
r:=dbfake.WorkspaceBuild(t,db, database.Workspace{
1257+
OrganizationID:user.OrganizationID,
1258+
OwnerID:user.UserID,
1259+
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
1260+
agents[0].Metadata= []*proto.Agent_Metadata{
1261+
{
1262+
DisplayName:"First Meta",
1263+
Key:"foo1",
1264+
Script:"echo hi",
1265+
Interval:10,
1266+
Timeout:3,
1267+
Order:2,
1268+
},
1269+
{
1270+
DisplayName:"Second Meta",
1271+
Key:"foo2",
1272+
Script:"echo howdy",
1273+
Interval:10,
1274+
Timeout:3,
1275+
Order:1,
1276+
},
1277+
{
1278+
DisplayName:"Third Meta",
1279+
Key:"foo3",
1280+
Script:"echo howdy",
1281+
Interval:10,
1282+
Timeout:3,
1283+
Order:2,
1284+
},
1285+
{
1286+
DisplayName:"Fourth Meta",
1287+
Key:"foo4",
1288+
Script:"echo howdy",
1289+
Interval:10,
1290+
Timeout:3,
1291+
Order:3,
1292+
},
1293+
}
1294+
returnagents
1295+
}).Do()
1296+
1297+
workspace,err:=client.Workspace(context.Background(),r.Workspace.ID)
1298+
require.NoError(t,err)
1299+
for_,res:=rangeworkspace.LatestBuild.Resources {
1300+
for_,a:=rangeres.Agents {
1301+
require.Equal(t,codersdk.WorkspaceAgentLifecycleCreated,a.LifecycleState)
1302+
}
1303+
}
1304+
1305+
ctx:=testutil.Context(t,testutil.WaitMedium)
1306+
workspace,err=client.Workspace(ctx,workspace.ID)
1307+
require.NoError(t,err,"get workspace")
1308+
1309+
agentID:=workspace.LatestBuild.Resources[0].Agents[0].ID
1310+
1311+
varupdate []codersdk.WorkspaceAgentMetadata
1312+
1313+
// Setup is complete, reset the context.
1314+
ctx=testutil.Context(t,testutil.WaitMedium)
1315+
updates,errors:=client.WatchWorkspaceAgentMetadata(ctx,agentID)
1316+
1317+
recvUpdate:=func() []codersdk.WorkspaceAgentMetadata {
1318+
select {
1319+
case<-ctx.Done():
1320+
t.Fatalf("context done: %v",ctx.Err())
1321+
caseerr:=<-errors:
1322+
t.Fatalf("error watching metadata: %v",err)
1323+
caseupdate:=<-updates:
1324+
returnupdate
1325+
}
1326+
returnnil
1327+
}
1328+
1329+
update=recvUpdate()
1330+
require.Len(t,update,4)
1331+
require.Equal(t,"Second Meta",update[0].Description.DisplayName)
1332+
require.Equal(t,"First Meta",update[1].Description.DisplayName)
1333+
require.Equal(t,"Third Meta",update[2].Description.DisplayName)
1334+
require.Equal(t,"Fourth Meta",update[3].Description.DisplayName)
1335+
}
1336+
12511337
typetestWAMErrorStorestruct {
12521338
database.Store
12531339
err atomic.Pointer[error]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp