Kaynağa Gözat

use new porter.yaml validator in the CLI

Mohammed Nafees 3 yıl önce
ebeveyn
işleme
084002a541
2 değiştirilmiş dosya ile 25 ekleme ve 11 silme
  1. 12 0
      cli/cmd/apply.go
  2. 13 11
      internal/integrations/preview/dep_resolver.go

+ 12 - 0
cli/cmd/apply.go

@@ -88,6 +88,18 @@ func apply(_ *types.GetAuthenticatedUserResponse, client *api.Client, _ []string
 		return fmt.Errorf("error reading porter.yaml: %w", err)
 	}
 
+	validationErrors := previewInt.Validate(string(fileBytes))
+
+	if len(validationErrors) > 0 {
+		errString := "the following error(s) were found while validating the porter.yaml file:"
+
+		for _, err := range validationErrors {
+			errString += "\n- " + strings.ReplaceAll(err.Error(), "\n\n*", "\n  *")
+		}
+
+		return fmt.Errorf(errString)
+	}
+
 	resGroup, err := parser.ParseRawBytes(fileBytes)
 
 	if err != nil {

+ 13 - 11
internal/integrations/preview/dep_resolver.go

@@ -23,20 +23,22 @@ func newDependencyResolver(resources []*types.Resource) *dependencyResolver {
 }
 
 func (r *dependencyResolver) Resolve() error {
-	// construct dependency graph
-	for _, resource := range r.resources {
-		// check for duplicate resource
-		if _, ok := r.graph[resource.Name]; ok {
-			return fmt.Errorf("duplicate resource detected: '%s'", resource.Name)
-		}
+	if len(r.resources) > 0 {
+		// construct dependency graph
+		for _, resource := range r.resources {
+			// check for duplicate resource
+			if _, ok := r.graph[resource.Name]; ok {
+				return fmt.Errorf("duplicate resource detected: '%s'", resource.Name)
+			}
 
-		r.graph[resource.Name] = append(r.graph[resource.Name], resource.DependsOn...)
-	}
+			r.graph[resource.Name] = append(r.graph[resource.Name], resource.DependsOn...)
+		}
 
-	err := r.depResolve(r.resources[0].Name)
+		err := r.depResolve(r.resources[0].Name)
 
-	if err != nil {
-		return err
+		if err != nil {
+			return err
+		}
 	}
 
 	return nil