validate.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package stack
  2. import (
  3. "fmt"
  4. "gopkg.in/yaml.v2"
  5. )
  6. func createDefaultPorterYaml() *PorterStackYAML {
  7. return &PorterStackYAML{
  8. Apps: nil,
  9. }
  10. }
  11. func ValidateAndMarshal(raw []byte) (*PorterStackYAML, error) {
  12. var parsed *PorterStackYAML
  13. if raw == nil {
  14. parsed = createDefaultPorterYaml()
  15. } else {
  16. parsed = &PorterStackYAML{}
  17. err := yaml.Unmarshal(raw, parsed)
  18. if err != nil {
  19. errMsg := composePreviewMessage("error parsing porter.yaml", Error)
  20. return nil, fmt.Errorf("%s: %w", errMsg, err)
  21. }
  22. }
  23. return parsed, nil
  24. }
  25. func CreateAppFromFile(base *PorterStackYAML) (*Application, error) {
  26. if base.Applications != nil {
  27. errMsg := composePreviewMessage("error parsing porter.yaml", Error)
  28. err := fmt.Errorf("expected one porter app, found many")
  29. return nil, fmt.Errorf("%s: %w", errMsg, err)
  30. }
  31. if base.Apps != nil && base.Services != nil {
  32. errMsg := composePreviewMessage("error parsing porter.yaml", Error)
  33. err := fmt.Errorf("'apps' and 'services' are synonymous but both were defined")
  34. return nil, fmt.Errorf("%s: %w", errMsg, err)
  35. }
  36. var services map[string]*Service
  37. if base.Apps != nil {
  38. services = base.Apps
  39. } else {
  40. services = base.Services
  41. }
  42. return &Application{
  43. Env: base.Env,
  44. Services: services,
  45. Build: base.Build,
  46. Release: base.Release,
  47. }, nil
  48. }