mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: set wsbuilder to use preview parameters (#18474)
Use richer `previewtypes.Parameter` for `wsbuilder`. This is a pre-requirement to adding dynamic parameter validation. The richer type contains more information than the `db` parameter, so the conversion is lossless.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user