validate.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package preview
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/porter-dev/switchboard/pkg/parser"
  6. "github.com/porter-dev/switchboard/pkg/types"
  7. )
  8. var (
  9. ErrNoPorterYAMLFile = errors.New("porter.yaml does not exist in the root of this repository")
  10. ErrEmptyPorterYAMLFile = errors.New("porter.yaml is empty")
  11. ErrUnsupportedDriver = errors.New("no such driver")
  12. )
  13. type driverBasedResourceValidator func(*types.Resource) error
  14. var driverValidators = make(map[string]driverBasedResourceValidator)
  15. func init() {
  16. driverValidators["deploy"] = deployDriverValidator
  17. driverValidators["build-image"] = buildImageDriverValidator
  18. driverValidators["push-image"] = pushImageDriverValidator
  19. driverValidators["update-config"] = updateConfigDriverValidator
  20. driverValidators["random-string"] = randomStringDriverValidator
  21. driverValidators["env-group"] = envGroupDriverValidator
  22. driverValidators["os-env"] = osEnvDriverValidator
  23. }
  24. func Validate(contents string) []error {
  25. var errors []error
  26. resGroup, err := parser.ParseRawBytes([]byte(contents))
  27. if err != nil {
  28. errors = append(errors, fmt.Errorf("error parsing porter.yaml: %w", err))
  29. return errors
  30. }
  31. for _, res := range resGroup.Resources {
  32. if validator, ok := driverValidators[res.Driver]; ok {
  33. if err := validator(res); err != nil {
  34. errors = append(errors, err)
  35. }
  36. } else {
  37. errors = append(errors, fmt.Errorf("%w: %s", ErrUnsupportedDriver, res.Driver))
  38. }
  39. }
  40. return errors
  41. }