func runCSOValidate()

in cmd/harp/internal/cmd/cso_validate.go [66:124]


func runCSOValidate(cmd *cobra.Command, _ []string) {
	ctx, cancel := cmdutil.Context(cmd.Context(), "harp-cso-validate", conf.Debug.Enable, conf.Instrumentation.Logs.Level)
	defer cancel()

	// Check if we have to read external path
	if csoValidatePathFrom != "" {
		// Force read from stdin
		paths, errReader := cmdutil.LineReader(csoValidatePathFrom)
		if errReader != nil {
			log.For(ctx).Fatal("unable to read paths from stdin", zap.Error(errReader))
		}

		// Add to paths
		csoValidatePaths = append(csoValidatePaths, paths...)
	}

	// Check path length
	if len(csoValidatePaths) == 0 {
		log.For(ctx).Fatal("unable to validate empty paths")
	}

	res := map[string]csoValidationResponse{}

	// Validate each path
	for _, p := range csoValidatePaths {
		err := csov1.Validate(p)

		// Error format
		var errMessage string
		if err != nil {
			errMessage = err.Error()
		}

		// Skip result according to parameters
		if csoValidateDropCompliant && err == nil {
			continue
		}
		if csoValidateDropNonCompliant && err != nil {
			continue
		}

		// Add to result
		res[p] = csoValidationResponse{
			Compliant: err == nil,
			Error:     errMessage,
		}
	}

	if !csoValidatePathOnly {
		// Dump as json
		if err := json.NewEncoder(os.Stdout).Encode(res); err != nil {
			log.For(ctx).Fatal("unable to encode validation response", zap.Error(err))
		}
	} else {
		for k := range res {
			fmt.Fprintf(os.Stdout, "%s\n", k)
		}
	}
}