package cmd import ( "encoding/json" "fmt" "os" "path/filepath" "github.com/goreleaser/nfpm/v2" "github.com/invopop/jsonschema" "github.com/spf13/cobra" ) type schemaCmd struct { cmd *cobra.Command output string } func newSchemaCmd() *schemaCmd { root := &schemaCmd{} cmd := &cobra.Command{ Use: "jsonschema", Aliases: []string{"schema"}, Short: "Outputs nFPM's JSON schema", SilenceUsage: true, SilenceErrors: true, Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { schema := jsonschema.Reflect(&nfpm.Config{}) schema.Description = "nFPM configuration definition file" bts, err := json.MarshalIndent(schema, " ", " ") if err != nil { return fmt.Errorf("failed to create jsonschema: %w", err) } if root.output == "-" { fmt.Println(string(bts)) return nil } if err := os.MkdirAll(filepath.Dir(root.output), 0o755); err != nil { return fmt.Errorf("failed to write jsonschema file: %w", err) } if err := os.WriteFile(root.output, bts, 0o666); err != nil { return fmt.Errorf("failed to write jsonschema file: %w", err) } return nil }, } cmd.Flags().StringVarP(&root.output, "output", "o", "-", "where to save the json schema") root.cmd = cmd return root }