github.com/snyk/vervet/v6@v6.2.4/internal/cmd/localize.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 6 "github.com/urfave/cli/v2" 7 8 "github.com/snyk/vervet/v6" 9 ) 10 11 // LocalizeCommand is the `vervet localize` subcommand. 12 var LocalizeCommand = cli.Command{ 13 Name: "localize", 14 Aliases: []string{"localise"}, 15 Usage: "Localize references and validate a single OpenAPI spec file", 16 ArgsUsage: "[spec.yaml file]", 17 Action: Localize, 18 } 19 20 // Localize references and validate a single OpenAPI spec file. 21 func Localize(ctx *cli.Context) error { 22 if ctx.Args().Len() < 1 { 23 return fmt.Errorf("missing spec.yaml file") 24 } 25 specFile, err := absPath(ctx.Args().Get(0)) 26 if err != nil { 27 return fmt.Errorf("failed to resolve %q", ctx.Args().Get(0)) 28 } 29 t, err := vervet.NewDocumentFile(specFile) 30 if err != nil { 31 return fmt.Errorf("failed to load spec from %q: %v", specFile, err) 32 } 33 34 // Localize all references, so we emit a completely self-contained OpenAPI document. 35 err = vervet.Localize(ctx.Context, t) 36 if err != nil { 37 return fmt.Errorf("failed to localize refs: %w", err) 38 } 39 40 yamlBuf, err := vervet.ToSpecYAML(t) 41 if err != nil { 42 return fmt.Errorf("failed to convert JSON to YAML: %w", err) 43 } 44 fmt.Println(string(yamlBuf)) 45 46 err = t.Validate(ctx.Context) 47 if err != nil { 48 return fmt.Errorf("error: spec validation failed: %w", err) 49 } 50 return nil 51 }