Skip to content

Commit 6639c69

Browse files
authored
feat: add "display_order" column to coder_parameter to keep parameters sorted in UI (#8227)
1 parent 72a48be commit 6639c69

23 files changed

+968
-481
lines changed

coderd/database/dbfake/dbfake.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2410,6 +2410,12 @@ func (q *fakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVe
24102410
}
24112411
parameters = append(parameters, param)
24122412
}
2413+
sort.Slice(parameters, func(i, j int) bool {
2414+
if parameters[i].DisplayOrder != parameters[j].DisplayOrder {
2415+
return parameters[i].DisplayOrder < parameters[j].DisplayOrder
2416+
}
2417+
return strings.ToLower(parameters[i].Name) < strings.ToLower(parameters[j].Name)
2418+
})
24132419
return parameters, nil
24142420
}
24152421

@@ -3934,6 +3940,7 @@ func (q *fakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg data
39343940
ValidationMax: arg.ValidationMax,
39353941
ValidationMonotonic: arg.ValidationMonotonic,
39363942
Required: arg.Required,
3943+
DisplayOrder: arg.DisplayOrder,
39373944
LegacyVariableName: arg.LegacyVariableName,
39383945
}
39393946
q.templateVersionParameters = append(q.templateVersionParameters, param)

coderd/database/dump.sql

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE template_version_parameters DROP COLUMN display_order;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE template_version_parameters ADD COLUMN display_order integer NOT NULL DEFAULT 0;
2+
3+
COMMENT ON COLUMN template_version_parameters.display_order
4+
IS 'Specifies the order in which to display parameters in user interfaces.';

coderd/database/models.go

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

coderd/database/queries.sql.go

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/templateversionparameters.sql

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ INSERT INTO
1616
validation_monotonic,
1717
required,
1818
legacy_variable_name,
19-
display_name
19+
display_name,
20+
display_order
2021
)
2122
VALUES
2223
(
@@ -35,8 +36,9 @@ VALUES
3536
$13,
3637
$14,
3738
$15,
38-
$16
39+
$16,
40+
$17
3941
) RETURNING *;
4042

4143
-- name: GetTemplateVersionParameters :many
42-
SELECT * FROM template_version_parameters WHERE template_version_id = $1;
44+
SELECT * FROM template_version_parameters WHERE template_version_id = $1 ORDER BY display_order ASC, LOWER(name) ASC;

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,7 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
825825
ValidationMax: validationMax,
826826
ValidationMonotonic: richParameter.ValidationMonotonic,
827827
Required: richParameter.Required,
828+
DisplayOrder: richParameter.Order,
828829
LegacyVariableName: richParameter.LegacyVariableName,
829830
})
830831
if err != nil {

coderd/templateversions_test.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,3 +1291,93 @@ func TestTemplateVersionPatch(t *testing.T) {
12911291
require.Error(t, err)
12921292
})
12931293
}
1294+
1295+
func TestTemplateVersionParameters_Order(t *testing.T) {
1296+
t.Parallel()
1297+
1298+
const (
1299+
firstParameterName = "first_parameter"
1300+
firstParameterType = "string"
1301+
firstParameterValue = "aaa"
1302+
// no order
1303+
1304+
secondParameterName = "Second_parameter"
1305+
secondParameterType = "number"
1306+
secondParameterValue = "2"
1307+
secondParameterOrder = 3
1308+
1309+
thirdParameterName = "third_parameter"
1310+
thirdParameterType = "number"
1311+
thirdParameterValue = "3"
1312+
thirdParameterOrder = 3
1313+
1314+
fourthParameterName = "Fourth_parameter"
1315+
fourthParameterType = "number"
1316+
fourthParameterValue = "3"
1317+
fourthParameterOrder = 2
1318+
1319+
fifthParameterName = "Fifth_parameter"
1320+
fifthParameterType = "string"
1321+
fifthParameterValue = "aaa"
1322+
// no order
1323+
)
1324+
1325+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1326+
user := coderdtest.CreateFirstUser(t, client)
1327+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
1328+
Parse: echo.ParseComplete,
1329+
ProvisionPlan: []*proto.Provision_Response{
1330+
{
1331+
Type: &proto.Provision_Response_Complete{
1332+
Complete: &proto.Provision_Complete{
1333+
Parameters: []*proto.RichParameter{
1334+
{
1335+
Name: firstParameterName,
1336+
Type: firstParameterType,
1337+
// No order
1338+
},
1339+
{
1340+
Name: secondParameterName,
1341+
Type: secondParameterType,
1342+
Order: secondParameterOrder,
1343+
},
1344+
{
1345+
Name: thirdParameterName,
1346+
Type: thirdParameterType,
1347+
Order: thirdParameterOrder,
1348+
},
1349+
{
1350+
Name: fourthParameterName,
1351+
Type: fourthParameterType,
1352+
Order: fourthParameterOrder,
1353+
},
1354+
{
1355+
Name: fifthParameterName,
1356+
Type: fifthParameterType,
1357+
// No order
1358+
},
1359+
},
1360+
},
1361+
},
1362+
},
1363+
},
1364+
ProvisionApply: []*proto.Provision_Response{{
1365+
Type: &proto.Provision_Response_Complete{
1366+
Complete: &proto.Provision_Complete{},
1367+
},
1368+
}},
1369+
})
1370+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
1371+
1372+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1373+
defer cancel()
1374+
1375+
templateRichParameters, err := client.TemplateVersionRichParameters(ctx, version.ID)
1376+
require.NoError(t, err)
1377+
require.Len(t, templateRichParameters, 5)
1378+
require.Equal(t, fifthParameterName, templateRichParameters[0].Name)
1379+
require.Equal(t, firstParameterName, templateRichParameters[1].Name)
1380+
require.Equal(t, fourthParameterName, templateRichParameters[2].Name)
1381+
require.Equal(t, secondParameterName, templateRichParameters[3].Name)
1382+
require.Equal(t, thirdParameterName, templateRichParameters[4].Name)
1383+
}

go.mod

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ require (
7575
github.com/codeclysm/extract v2.2.0+incompatible
7676
github.com/coder/flog v1.1.0
7777
github.com/coder/retry v1.4.0
78-
github.com/coder/terraform-provider-coder v0.8.2
78+
github.com/coder/terraform-provider-coder v0.9.0
7979
github.com/coder/wgtunnel v0.1.5
8080
github.com/coreos/go-oidc/v3 v3.6.0
8181
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf
@@ -126,7 +126,7 @@ require (
126126
github.com/mitchellh/go-wordwrap v1.0.1
127127
github.com/mitchellh/mapstructure v1.5.0
128128
github.com/moby/moby v24.0.1+incompatible
129-
github.com/muesli/reflow v0.3.0
129+
github.com/muesli/reflow v0.3.0 // indirect
130130
github.com/open-policy-agent/opa v0.51.0
131131
github.com/ory/dockertest/v3 v3.10.0
132132
github.com/pion/udp v0.1.2
@@ -218,7 +218,6 @@ require (
218218
github.com/docker/docker v23.0.3+incompatible // indirect
219219
github.com/docker/go-connections v0.4.0 // indirect
220220
github.com/docker/go-units v0.5.0 // indirect
221-
github.com/dustin/go-humanize v1.0.1
222221
github.com/elastic/go-windows v1.0.0 // indirect
223222
github.com/fxamacker/cbor/v2 v2.4.0 // indirect
224223
github.com/gabriel-vasile/mimetype v1.4.2 // indirect

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