Skip to content

Commit 635c56b

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 725bc37 commit 635c56b

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 validation 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
@@ -672,7 +674,7 @@ func (b *Builder) getParameters() (names, values []string, err error) {
672674
}
673675

674676
for _, templateVersionParameter := range templateVersionParameters {
675-
tvp, err := db2sdk.TemplateVersionParameter(templateVersionParameter)
677+
tvp, err := db2sdk.TemplateVersionParameterFromPreview(templateVersionParameter)
676678
if err != nil {
677679
return nil, nil, BuildError{http.StatusInternalServerError, "failed to convert template version parameter", err}
678680
}
@@ -736,7 +738,7 @@ func (b *Builder) getLastBuildParameters() ([]database.WorkspaceBuildParameter,
736738
return values, nil
737739
}
738740

739-
func (b *Builder) getTemplateVersionParameters() ([]database.TemplateVersionParameter, error) {
741+
func (b *Builder) getTemplateVersionParameters() ([]previewtypes.Parameter, error) {
740742
if b.templateVersionParameters != nil {
741743
return *b.templateVersionParameters, nil
742744
}
@@ -748,8 +750,8 @@ func (b *Builder) getTemplateVersionParameters() ([]database.TemplateVersionPara
748750
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
749751
return nil, xerrors.Errorf("get template version %s parameters: %w", tvID, err)
750752
}
751-
b.templateVersionParameters = &tvp
752-
return tvp, nil
753+
b.templateVersionParameters = ptr.Ref(db2sdk.List(tvp, dynamicparameters.TemplateVersionParameter))
754+
return *b.templateVersionParameters, nil
753755
}
754756

755757
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