/
validate.go
98 lines (83 loc) · 2.73 KB
/
validate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package cmd
import (
"errors"
"flag"
"fmt"
"strings"
"github.com/hashicorp/terraform-plugin-docs/internal/provider"
)
type validateCmd struct {
commonCmd
flagProviderName string
flagProviderDir string
flagProvidersSchema string
tfVersion string
}
func (cmd *validateCmd) Synopsis() string {
return "validates a plugin website"
}
func (cmd *validateCmd) Help() string {
strBuilder := &strings.Builder{}
longestName := 0
longestUsage := 0
cmd.Flags().VisitAll(func(f *flag.Flag) {
if len(f.Name) > longestName {
longestName = len(f.Name)
}
if len(f.Usage) > longestUsage {
longestUsage = len(f.Usage)
}
})
strBuilder.WriteString("\nUsage: tfplugindocs validate [<args>]\n\n")
cmd.Flags().VisitAll(func(f *flag.Flag) {
if f.DefValue != "" {
strBuilder.WriteString(fmt.Sprintf(" --%s <ARG> %s%s%s (default: %q)\n",
f.Name,
strings.Repeat(" ", longestName-len(f.Name)+2),
f.Usage,
strings.Repeat(" ", longestUsage-len(f.Usage)+2),
f.DefValue,
))
} else {
strBuilder.WriteString(fmt.Sprintf(" --%s <ARG> %s%s%s\n",
f.Name,
strings.Repeat(" ", longestName-len(f.Name)+2),
f.Usage,
strings.Repeat(" ", longestUsage-len(f.Usage)+2),
))
}
})
strBuilder.WriteString("\n")
return strBuilder.String()
}
func (cmd *validateCmd) Flags() *flag.FlagSet {
fs := flag.NewFlagSet("validate", flag.ExitOnError)
fs.StringVar(&cmd.flagProviderName, "provider-name", "", "provider name, as used in Terraform configurations")
fs.StringVar(&cmd.flagProviderDir, "provider-dir", "", "relative or absolute path to the root provider code directory; this will default to the current working directory if not set")
fs.StringVar(&cmd.flagProvidersSchema, "providers-schema", "", "path to the providers schema JSON file, which contains the output of the terraform providers schema -json command. Setting this flag will skip building the provider and calling Terraform CLI")
fs.StringVar(&cmd.tfVersion, "tf-version", "", "terraform binary version to download. If not provided, will look for a terraform binary in the local environment. If not found in the environment, will download the latest version of Terraform")
return fs
}
func (cmd *validateCmd) Run(args []string) int {
fs := cmd.Flags()
err := fs.Parse(args)
if err != nil {
cmd.ui.Error(fmt.Sprintf("unable to parse flags: %s", err))
return 1
}
return cmd.run(cmd.runInternal)
}
func (cmd *validateCmd) runInternal() error {
err := provider.Validate(cmd.ui,
cmd.flagProviderDir,
cmd.flagProviderName,
cmd.flagProvidersSchema,
cmd.tfVersion,
)
if err != nil {
return errors.Join(errors.New("validation errors found: "), err)
}
return nil
}