chore: add form_type parameter argument to db (#17920)

`form_type` is a new parameter field in the terraform provider. Bring
that field into coder/coder.

Validation for `multi-select` has also been added.
This commit is contained in:
Steven Masley
2025-05-29 08:55:19 -05:00
committed by GitHub
parent 776c144128
commit 8387dd27ab
35 changed files with 1556 additions and 822 deletions
+63
View File
@@ -0,0 +1,63 @@
package proto
import (
"golang.org/x/xerrors"
"github.com/coder/terraform-provider-coder/v2/provider"
)
func ProviderFormType(ft ParameterFormType) (provider.ParameterFormType, error) {
switch ft {
case ParameterFormType_DEFAULT:
return provider.ParameterFormTypeDefault, nil
case ParameterFormType_FORM_ERROR:
return provider.ParameterFormTypeError, nil
case ParameterFormType_RADIO:
return provider.ParameterFormTypeRadio, nil
case ParameterFormType_DROPDOWN:
return provider.ParameterFormTypeDropdown, nil
case ParameterFormType_INPUT:
return provider.ParameterFormTypeInput, nil
case ParameterFormType_TEXTAREA:
return provider.ParameterFormTypeTextArea, nil
case ParameterFormType_SLIDER:
return provider.ParameterFormTypeSlider, nil
case ParameterFormType_CHECKBOX:
return provider.ParameterFormTypeCheckbox, nil
case ParameterFormType_SWITCH:
return provider.ParameterFormTypeSwitch, nil
case ParameterFormType_TAGSELECT:
return provider.ParameterFormTypeTagSelect, nil
case ParameterFormType_MULTISELECT:
return provider.ParameterFormTypeMultiSelect, nil
}
return provider.ParameterFormTypeDefault, xerrors.Errorf("unsupported form type: %s", ft)
}
func FormType(ft provider.ParameterFormType) (ParameterFormType, error) {
switch ft {
case provider.ParameterFormTypeDefault:
return ParameterFormType_DEFAULT, nil
case provider.ParameterFormTypeError:
return ParameterFormType_FORM_ERROR, nil
case provider.ParameterFormTypeRadio:
return ParameterFormType_RADIO, nil
case provider.ParameterFormTypeDropdown:
return ParameterFormType_DROPDOWN, nil
case provider.ParameterFormTypeInput:
return ParameterFormType_INPUT, nil
case provider.ParameterFormTypeTextArea:
return ParameterFormType_TEXTAREA, nil
case provider.ParameterFormTypeSlider:
return ParameterFormType_SLIDER, nil
case provider.ParameterFormTypeCheckbox:
return ParameterFormType_CHECKBOX, nil
case provider.ParameterFormTypeSwitch:
return ParameterFormType_SWITCH, nil
case provider.ParameterFormTypeTagSelect:
return ParameterFormType_TAGSELECT, nil
case provider.ParameterFormTypeMultiSelect:
return ParameterFormType_MULTISELECT, nil
}
return ParameterFormType_DEFAULT, xerrors.Errorf("unsupported form type: %s", ft)
}
+26
View File
@@ -0,0 +1,26 @@
package proto_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/provisionersdk/proto"
"github.com/coder/terraform-provider-coder/v2/provider"
)
// TestProviderFormTypeEnum keeps the provider.ParameterFormTypes() enum in sync with the
// proto.FormType enum. If a new form type is added to the provider, it should also be added
// to the proto file.
func TestProviderFormTypeEnum(t *testing.T) {
t.Parallel()
all := provider.ParameterFormTypes()
for _, p := range all {
t.Run(string(p), func(t *testing.T) {
t.Parallel()
_, err := proto.FormType(p)
require.NoError(t, err, "proto form type should be valid, add it to the proto file")
})
}
}
+758 -661
View File
File diff suppressed because it is too large Load Diff
+15
View File
@@ -27,6 +27,20 @@ message RichParameterOption {
string icon = 4;
}
enum ParameterFormType {
DEFAULT = 0;
FORM_ERROR = 1;
RADIO = 2;
DROPDOWN = 3;
INPUT = 4;
TEXTAREA = 5;
SLIDER = 6;
CHECKBOX = 7;
SWITCH = 8;
TAGSELECT = 9;
MULTISELECT = 10;
}
// RichParameter represents a variable that is exposed.
message RichParameter {
reserved 14;
@@ -49,6 +63,7 @@ message RichParameter {
string display_name = 15;
int32 order = 16;
bool ephemeral = 17;
ParameterFormType form_type = 18;
}
// RichParameterValue holds the key/value mapping of a parameter.