Skip to content

Commit 467aca3

Browse files
committed
chore: wsbuilder to use preview parameters
Dynamic parameter validation relies on the preview parameter types. These types have more information than the database. So converting from `db -> preview` is lossless. The other way around is not
1 parent 2f55e29 commit 467aca3

File tree

3 files changed

+66
-7
lines changed

3 files changed

+66
-7
lines changed

coderd/database/db2sdk/db2sdk.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/coder/coder/v2/coderd/rbac"
2222
"github.com/coder/coder/v2/coderd/rbac/policy"
2323
"github.com/coder/coder/v2/coderd/render"
24+
"github.com/coder/coder/v2/coderd/util/ptr"
2425
"github.com/coder/coder/v2/coderd/workspaceapps/appurl"
2526
"github.com/coder/coder/v2/codersdk"
2627
"github.com/coder/coder/v2/provisionersdk/proto"
@@ -96,6 +97,49 @@ func TemplateVersionParameters(params []database.TemplateVersionParameter) ([]co
9697
return out, nil
9798
}
9899

100+
func TemplateVersionParameterFromPreview(param previewtypes.Parameter) (codersdk.TemplateVersionParameter, error) {
101+
descriptionPlaintext, err := render.PlaintextFromMarkdown(param.Description)
102+
if err != nil {
103+
return codersdk.TemplateVersionParameter{}, err
104+
}
105+
106+
sdkParam := codersdk.TemplateVersionParameter{
107+
Name: param.Name,
108+
DisplayName: param.DisplayName,
109+
Description: param.Description,
110+
DescriptionPlaintext: descriptionPlaintext,
111+
Type: string(param.Type),
112+
FormType: string(param.FormType),
113+
Mutable: param.Mutable,
114+
DefaultValue: param.DefaultValue.AsString(),
115+
Icon: param.Icon,
116+
Required: param.Required,
117+
Ephemeral: param.Ephemeral,
118+
Options: List(param.Options, TemplateVersionParameterOptionFromPreview),
119+
// Validation set after
120+
}
121+
if len(param.Validations) > 0 {
122+
validation := param.Validations[0]
123+
sdkParam.ValidationError = validation.Error
124+
if validation.Monotonic != nil {
125+
sdkParam.ValidationMonotonic = codersdk.ValidationMonotonicOrder(*validation.Monotonic)
126+
}
127+
if validation.Regex != nil {
128+
sdkParam.ValidationRegex = *validation.Regex
129+
}
130+
if validation.Min != nil {
131+
//nolint:gosec // No other choice
132+
sdkParam.ValidationMin = ptr.Ref(int32(*validation.Min))
133+
}
134+
if validation.Max != nil {
135+
//nolint:gosec // No other choice
136+
sdkParam.ValidationMax = ptr.Ref(int32(*validation.Max))
137+
}
138+
}
139+
140+
return sdkParam, nil
141+
}
142+
99143
func TemplateVersionParameter(param database.TemplateVersionParameter) (codersdk.TemplateVersionParameter, error) {
100144
options, err := templateVersionParameterOptions(param.Options)
101145
if err != nil {
@@ -299,6 +343,15 @@ func templateVersionParameterOptions(rawOptions json.RawMessage) ([]codersdk.Tem
299343
return options, nil
300344
}
301345

346+
func TemplateVersionParameterOptionFromPreview(option *previewtypes.ParameterOption) codersdk.TemplateVersionParameterOption {
347+
return codersdk.TemplateVersionParameterOption{
348+
Name: option.Name,
349+
Description: option.Description,
350+
Value: option.Value.AsString(),
351+
Icon: option.Icon,
352+
}
353+
}
354+
302355
func OAuth2ProviderApp(accessURL *url.URL, dbApp database.OAuth2ProviderApp) codersdk.OAuth2ProviderApp {
303356
return codersdk.OAuth2ProviderApp{
304357
ID: dbApp.ID,

coderd/dynamicparameters/static.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ func (r *loader) staticRender(ctx context.Context, db database.Store) (*staticRe
2828
}
2929

3030
params := db2sdk.List(dbTemplateVersionParameters, TemplateVersionParameter)
31+
32+
for i, param := range params {
33+
// Update the diagnostics to validate the 'default' value.
34+
// We do not have a user supplied value yet, so we use the default.
35+
params[i].Diagnostics = append(params[i].Diagnostics, previewtypes.Diagnostics(param.Valid(param.Value))...)
36+
}
3137
return &staticRender{
3238
staticParams: params,
3339
}, nil
@@ -137,7 +143,5 @@ func TemplateVersionParameter(it database.TemplateVersionParameter) previewtypes
137143
// unfortunate we have to do this, but it will return the default form_type
138144
// for a given set of conditions.
139145
_, param.FormType, _ = provider.ValidateFormType(provider.OptionType(param.Type), len(param.Options), param.FormType)
140-
141-
param.Diagnostics = append(param.Diagnostics, previewtypes.Diagnostics(param.Valid(param.Value))...)
142146
return param
143147
}

coderd/wsbuilder/wsbuilder.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ import (
1414
"github.com/hashicorp/hcl/v2/hclsyntax"
1515

1616
"github.com/coder/coder/v2/apiversion"
17+
"github.com/coder/coder/v2/coderd/dynamicparameters"
1718
"github.com/coder/coder/v2/coderd/rbac/policy"
1819
"github.com/coder/coder/v2/coderd/util/ptr"
1920
"github.com/coder/coder/v2/provisioner/terraform/tfparse"
2021
"github.com/coder/coder/v2/provisionersdk"
2122
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
23+
previewtypes "github.com/coder/preview/types"
2224

2325
"github.com/google/uuid"
2426
"github.com/sqlc-dev/pqtype"
@@ -71,7 +73,7 @@ type Builder struct {
7173
templateVersion *database.TemplateVersion
7274
templateVersionJob *database.ProvisionerJob
7375
terraformValues *database.TemplateVersionTerraformValue
74-
templateVersionParameters *[]database.TemplateVersionParameter
76+
templateVersionParameters *[]previewtypes.Parameter
7577
templateVersionVariables *[]database.TemplateVersionVariable
7678
templateVersionWorkspaceTags *[]database.TemplateVersionWorkspaceTag
7779
lastBuild *database.WorkspaceBuild
@@ -716,7 +718,7 @@ func (b *Builder) getParameters() (names, values []string, err error) {
716718
}
717719

718720
for _, templateVersionParameter := range templateVersionParameters {
719-
tvp, err := db2sdk.TemplateVersionParameter(templateVersionParameter)
721+
tvp, err := db2sdk.TemplateVersionParameterFromPreview(templateVersionParameter)
720722
if err != nil {
721723
return nil, nil, BuildError{http.StatusInternalServerError, "failed to convert template version parameter", err}
722724
}
@@ -780,7 +782,7 @@ func (b *Builder) getLastBuildParameters() ([]database.WorkspaceBuildParameter,
780782
return values, nil
781783
}
782784

783-
func (b *Builder) getTemplateVersionParameters() ([]database.TemplateVersionParameter, error) {
785+
func (b *Builder) getTemplateVersionParameters() ([]previewtypes.Parameter, error) {
784786
if b.templateVersionParameters != nil {
785787
return *b.templateVersionParameters, nil
786788
}
@@ -792,8 +794,8 @@ func (b *Builder) getTemplateVersionParameters() ([]database.TemplateVersionPara
792794
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
793795
return nil, xerrors.Errorf("get template version %s parameters: %w", tvID, err)
794796
}
795-
b.templateVersionParameters = &tvp
796-
return tvp, nil
797+
b.templateVersionParameters = ptr.Ref(db2sdk.List(tvp, dynamicparameters.TemplateVersionParameter))
798+
return *b.templateVersionParameters, nil
797799
}
798800

799801
func (b *Builder) getTemplateVersionVariables() ([]database.TemplateVersionVariable, error) {

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