mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: do not skip parameter validation if min or max = 0 (#7707)
This commit is contained in:
@@ -46,6 +46,17 @@ func TemplateVersionParameter(param database.TemplateVersionParameter) (codersdk
|
||||
if err != nil {
|
||||
return codersdk.TemplateVersionParameter{}, err
|
||||
}
|
||||
|
||||
var validationMin *int32
|
||||
if param.ValidationMin.Valid {
|
||||
validationMin = ¶m.ValidationMin.Int32
|
||||
}
|
||||
|
||||
var validationMax *int32
|
||||
if param.ValidationMax.Valid {
|
||||
validationMax = ¶m.ValidationMax.Int32
|
||||
}
|
||||
|
||||
return codersdk.TemplateVersionParameter{
|
||||
Name: param.Name,
|
||||
DisplayName: param.DisplayName,
|
||||
@@ -57,8 +68,8 @@ func TemplateVersionParameter(param database.TemplateVersionParameter) (codersdk
|
||||
Icon: param.Icon,
|
||||
Options: options,
|
||||
ValidationRegex: param.ValidationRegex,
|
||||
ValidationMin: param.ValidationMin,
|
||||
ValidationMax: param.ValidationMax,
|
||||
ValidationMin: validationMin,
|
||||
ValidationMax: validationMax,
|
||||
ValidationError: param.ValidationError,
|
||||
ValidationMonotonic: codersdk.ValidationMonotonicOrder(param.ValidationMonotonic),
|
||||
Required: param.Required,
|
||||
|
||||
Generated
+2
-2
@@ -385,8 +385,8 @@ CREATE TABLE template_version_parameters (
|
||||
icon text NOT NULL,
|
||||
options jsonb DEFAULT '[]'::jsonb NOT NULL,
|
||||
validation_regex text NOT NULL,
|
||||
validation_min integer NOT NULL,
|
||||
validation_max integer NOT NULL,
|
||||
validation_min integer,
|
||||
validation_max integer,
|
||||
validation_error text DEFAULT ''::text NOT NULL,
|
||||
validation_monotonic text DEFAULT ''::text NOT NULL,
|
||||
required boolean DEFAULT true NOT NULL,
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
BEGIN;
|
||||
UPDATE template_version_parameters SET validation_min = 0 WHERE validation_min = NULL;
|
||||
UPDATE template_version_parameters SET validation_max = 0 WHERE validation_max = NULL;
|
||||
ALTER TABLE template_version_parameters ALTER COLUMN validation_min SET NOT NULL;
|
||||
ALTER TABLE template_version_parameters ALTER COLUMN validation_max SET NOT NULL;
|
||||
COMMIT;
|
||||
@@ -0,0 +1,6 @@
|
||||
BEGIN;
|
||||
ALTER TABLE template_version_parameters ALTER COLUMN validation_min DROP NOT NULL;
|
||||
ALTER TABLE template_version_parameters ALTER COLUMN validation_max DROP NOT NULL;
|
||||
UPDATE template_version_parameters SET validation_min = NULL WHERE validation_min = 0;
|
||||
UPDATE template_version_parameters SET validation_max = NULL WHERE validation_max = 0;
|
||||
COMMIT;
|
||||
@@ -1535,9 +1535,9 @@ type TemplateVersionParameter struct {
|
||||
// Validation: regex pattern
|
||||
ValidationRegex string `db:"validation_regex" json:"validation_regex"`
|
||||
// Validation: minimum length of value
|
||||
ValidationMin int32 `db:"validation_min" json:"validation_min"`
|
||||
ValidationMin sql.NullInt32 `db:"validation_min" json:"validation_min"`
|
||||
// Validation: maximum length of value
|
||||
ValidationMax int32 `db:"validation_max" json:"validation_max"`
|
||||
ValidationMax sql.NullInt32 `db:"validation_max" json:"validation_max"`
|
||||
// Validation: error displayed when the regex does not match.
|
||||
ValidationError string `db:"validation_error" json:"validation_error"`
|
||||
// Validation: consecutive values preserve the monotonic order
|
||||
|
||||
@@ -4164,8 +4164,8 @@ type InsertTemplateVersionParameterParams struct {
|
||||
Icon string `db:"icon" json:"icon"`
|
||||
Options json.RawMessage `db:"options" json:"options"`
|
||||
ValidationRegex string `db:"validation_regex" json:"validation_regex"`
|
||||
ValidationMin int32 `db:"validation_min" json:"validation_min"`
|
||||
ValidationMax int32 `db:"validation_max" json:"validation_max"`
|
||||
ValidationMin sql.NullInt32 `db:"validation_min" json:"validation_min"`
|
||||
ValidationMax sql.NullInt32 `db:"validation_max" json:"validation_max"`
|
||||
ValidationError string `db:"validation_error" json:"validation_error"`
|
||||
ValidationMonotonic string `db:"validation_monotonic" json:"validation_monotonic"`
|
||||
Required bool `db:"required" json:"required"`
|
||||
|
||||
@@ -919,6 +919,21 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("marshal parameter options: %w", err)
|
||||
}
|
||||
|
||||
var validationMin, validationMax sql.NullInt32
|
||||
if richParameter.ValidationMin != nil {
|
||||
validationMin = sql.NullInt32{
|
||||
Int32: *richParameter.ValidationMin,
|
||||
Valid: true,
|
||||
}
|
||||
}
|
||||
if richParameter.ValidationMax != nil {
|
||||
validationMax = sql.NullInt32{
|
||||
Int32: *richParameter.ValidationMax,
|
||||
Valid: true,
|
||||
}
|
||||
}
|
||||
|
||||
_, err = server.Database.InsertTemplateVersionParameter(ctx, database.InsertTemplateVersionParameterParams{
|
||||
TemplateVersionID: input.TemplateVersionID,
|
||||
Name: richParameter.Name,
|
||||
@@ -931,8 +946,8 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
|
||||
Options: options,
|
||||
ValidationRegex: richParameter.ValidationRegex,
|
||||
ValidationError: richParameter.ValidationError,
|
||||
ValidationMin: richParameter.ValidationMin,
|
||||
ValidationMax: richParameter.ValidationMax,
|
||||
ValidationMin: validationMin,
|
||||
ValidationMax: validationMax,
|
||||
ValidationMonotonic: richParameter.ValidationMonotonic,
|
||||
Required: richParameter.Required,
|
||||
LegacyVariableName: richParameter.LegacyVariableName,
|
||||
|
||||
@@ -1706,6 +1706,15 @@ func convertTemplateVersionParameter(param database.TemplateVersionParameter) (c
|
||||
if err != nil {
|
||||
return codersdk.TemplateVersionParameter{}, err
|
||||
}
|
||||
|
||||
var validationMin, validationMax *int32
|
||||
if param.ValidationMin.Valid {
|
||||
validationMin = ¶m.ValidationMin.Int32
|
||||
}
|
||||
if param.ValidationMax.Valid {
|
||||
validationMax = ¶m.ValidationMax.Int32
|
||||
}
|
||||
|
||||
return codersdk.TemplateVersionParameter{
|
||||
Name: param.Name,
|
||||
DisplayName: param.DisplayName,
|
||||
@@ -1717,8 +1726,8 @@ func convertTemplateVersionParameter(param database.TemplateVersionParameter) (c
|
||||
Icon: param.Icon,
|
||||
Options: options,
|
||||
ValidationRegex: param.ValidationRegex,
|
||||
ValidationMin: param.ValidationMin,
|
||||
ValidationMax: param.ValidationMax,
|
||||
ValidationMin: validationMin,
|
||||
ValidationMax: validationMax,
|
||||
ValidationError: param.ValidationError,
|
||||
ValidationMonotonic: codersdk.ValidationMonotonicOrder(param.ValidationMonotonic),
|
||||
Required: param.Required,
|
||||
|
||||
@@ -1973,8 +1973,8 @@ func TestWorkspaceWithRichParameters(t *testing.T) {
|
||||
DisplayName: secondParameterDisplayName,
|
||||
Type: secondParameterType,
|
||||
Description: secondParameterDescription,
|
||||
ValidationMin: 1,
|
||||
ValidationMax: 3,
|
||||
ValidationMin: ptr.Ref(int32(1)),
|
||||
ValidationMax: ptr.Ref(int32(3)),
|
||||
ValidationMonotonic: string(secondParameterValidationMonotonic),
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user