diff --git a/coderd/database/db2sdk/db2sdk.go b/coderd/database/db2sdk/db2sdk.go index 4a7871f21d15d..e926844d2b156 100644 --- a/coderd/database/db2sdk/db2sdk.go +++ b/coderd/database/db2sdk/db2sdk.go @@ -21,6 +21,7 @@ import ( "github.com/coder/coder/v2/coderd/rbac" "github.com/coder/coder/v2/coderd/rbac/policy" "github.com/coder/coder/v2/coderd/render" + "github.com/coder/coder/v2/coderd/util/ptr" "github.com/coder/coder/v2/coderd/workspaceapps/appurl" "github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/provisionersdk/proto" @@ -96,6 +97,49 @@ func TemplateVersionParameters(params []database.TemplateVersionParameter) ([]co return out, nil } +func TemplateVersionParameterFromPreview(param previewtypes.Parameter) (codersdk.TemplateVersionParameter, error) { + descriptionPlaintext, err := render.PlaintextFromMarkdown(param.Description) + if err != nil { + return codersdk.TemplateVersionParameter{}, err + } + + sdkParam := codersdk.TemplateVersionParameter{ + Name: param.Name, + DisplayName: param.DisplayName, + Description: param.Description, + DescriptionPlaintext: descriptionPlaintext, + Type: string(param.Type), + FormType: string(param.FormType), + Mutable: param.Mutable, + DefaultValue: param.DefaultValue.AsString(), + Icon: param.Icon, + Required: param.Required, + Ephemeral: param.Ephemeral, + Options: List(param.Options, TemplateVersionParameterOptionFromPreview), + // Validation set after + } + if len(param.Validations) > 0 { + validation := param.Validations[0] + sdkParam.ValidationError = validation.Error + if validation.Monotonic != nil { + sdkParam.ValidationMonotonic = codersdk.ValidationMonotonicOrder(*validation.Monotonic) + } + if validation.Regex != nil { + sdkParam.ValidationRegex = *validation.Regex + } + if validation.Min != nil { + //nolint:gosec // No other choice + sdkParam.ValidationMin = ptr.Ref(int32(*validation.Min)) + } + if validation.Max != nil { + //nolint:gosec // No other choice + sdkParam.ValidationMax = ptr.Ref(int32(*validation.Max)) + } + } + + return sdkParam, nil +} + func TemplateVersionParameter(param database.TemplateVersionParameter) (codersdk.TemplateVersionParameter, error) { options, err := templateVersionParameterOptions(param.Options) if err != nil { @@ -299,6 +343,15 @@ func templateVersionParameterOptions(rawOptions json.RawMessage) ([]codersdk.Tem return options, nil } +func TemplateVersionParameterOptionFromPreview(option *previewtypes.ParameterOption) codersdk.TemplateVersionParameterOption { + return codersdk.TemplateVersionParameterOption{ + Name: option.Name, + Description: option.Description, + Value: option.Value.AsString(), + Icon: option.Icon, + } +} + func OAuth2ProviderApp(accessURL *url.URL, dbApp database.OAuth2ProviderApp) codersdk.OAuth2ProviderApp { return codersdk.OAuth2ProviderApp{ ID: dbApp.ID, diff --git a/coderd/dynamicparameters/static.go b/coderd/dynamicparameters/static.go index 14988a2d162c0..fec5de2581aef 100644 --- a/coderd/dynamicparameters/static.go +++ b/coderd/dynamicparameters/static.go @@ -28,6 +28,12 @@ func (r *loader) staticRender(ctx context.Context, db database.Store) (*staticRe } params := db2sdk.List(dbTemplateVersionParameters, TemplateVersionParameter) + + for i, param := range params { + // Update the diagnostics to validate the 'default' value. + // We do not have a user supplied value yet, so we use the default. + params[i].Diagnostics = append(params[i].Diagnostics, previewtypes.Diagnostics(param.Valid(param.Value))...) + } return &staticRender{ staticParams: params, }, nil @@ -137,7 +143,5 @@ func TemplateVersionParameter(it database.TemplateVersionParameter) previewtypes // unfortunate we have to do this, but it will return the default form_type // for a given set of conditions. _, param.FormType, _ = provider.ValidateFormType(provider.OptionType(param.Type), len(param.Options), param.FormType) - - param.Diagnostics = append(param.Diagnostics, previewtypes.Diagnostics(param.Valid(param.Value))...) return param } diff --git a/coderd/wsbuilder/wsbuilder.go b/coderd/wsbuilder/wsbuilder.go index a996d1594a50d..577ec5eca4577 100644 --- a/coderd/wsbuilder/wsbuilder.go +++ b/coderd/wsbuilder/wsbuilder.go @@ -14,11 +14,13 @@ import ( "github.com/hashicorp/hcl/v2/hclsyntax" "github.com/coder/coder/v2/apiversion" + "github.com/coder/coder/v2/coderd/dynamicparameters" "github.com/coder/coder/v2/coderd/rbac/policy" "github.com/coder/coder/v2/coderd/util/ptr" "github.com/coder/coder/v2/provisioner/terraform/tfparse" "github.com/coder/coder/v2/provisionersdk" sdkproto "github.com/coder/coder/v2/provisionersdk/proto" + previewtypes "github.com/coder/preview/types" "github.com/google/uuid" "github.com/sqlc-dev/pqtype" @@ -71,7 +73,7 @@ type Builder struct { templateVersion *database.TemplateVersion templateVersionJob *database.ProvisionerJob terraformValues *database.TemplateVersionTerraformValue - templateVersionParameters *[]database.TemplateVersionParameter + templateVersionParameters *[]previewtypes.Parameter templateVersionVariables *[]database.TemplateVersionVariable templateVersionWorkspaceTags *[]database.TemplateVersionWorkspaceTag lastBuild *database.WorkspaceBuild @@ -716,7 +718,7 @@ func (b *Builder) getParameters() (names, values []string, err error) { } for _, templateVersionParameter := range templateVersionParameters { - tvp, err := db2sdk.TemplateVersionParameter(templateVersionParameter) + tvp, err := db2sdk.TemplateVersionParameterFromPreview(templateVersionParameter) if err != nil { return nil, nil, BuildError{http.StatusInternalServerError, "failed to convert template version parameter", err} } @@ -780,7 +782,7 @@ func (b *Builder) getLastBuildParameters() ([]database.WorkspaceBuildParameter, return values, nil } -func (b *Builder) getTemplateVersionParameters() ([]database.TemplateVersionParameter, error) { +func (b *Builder) getTemplateVersionParameters() ([]previewtypes.Parameter, error) { if b.templateVersionParameters != nil { return *b.templateVersionParameters, nil } @@ -792,8 +794,8 @@ func (b *Builder) getTemplateVersionParameters() ([]database.TemplateVersionPara if err != nil && !xerrors.Is(err, sql.ErrNoRows) { return nil, xerrors.Errorf("get template version %s parameters: %w", tvID, err) } - b.templateVersionParameters = &tvp - return tvp, nil + b.templateVersionParameters = ptr.Ref(db2sdk.List(tvp, dynamicparameters.TemplateVersionParameter)) + return *b.templateVersionParameters, nil } func (b *Builder) getTemplateVersionVariables() ([]database.TemplateVersionVariable, error) { 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