Thanks to visit codestin.com
Credit goes to github.com

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)