Chore: Add altsrc flag definition generation

This commit is contained in:
Naveen Gogineni
2022-10-29 19:24:31 -04:00
parent 82bdf5f42e
commit f8a7cfe246
5 changed files with 161 additions and 94 deletions

View File

@@ -25,4 +25,5 @@ show-cover:
.PHONY: run
run: build
./urfave-cli-genflags
./urfave-cli-genflags
./urfave-cli-genflags -f altsrc/flag-spec.yaml -o altsrc/flag_generated.go -p altsrc -a

View File

@@ -0,0 +1,34 @@
// WARNING: this file is generated. DO NOT EDIT
package {{.PackageName}}
import (
"flag"
"github.com/urfave/cli/v2"
)
{{range .SortedFlagTypes}}
// {{.TypeName}} is the flag type that wraps cli.{{.TypeName}} to allow
// for other values to be specified
type {{.TypeName}} struct {
*cli.{{.TypeName}}
set *flag.FlagSet
}
// New{{.TypeName}} creates a new {{.TypeName}}
func New{{.TypeName}}(fl *cli.{{.TypeName}}) *{{.TypeName}} {
return &{{.TypeName}}{{"{"}}{{.TypeName}}: fl, set: nil}
}
// Apply saves the flagSet for later usage calls, then calls
// the wrapped {{.TypeName}}.Apply
func (f *{{.TypeName}}) Apply(set *flag.FlagSet) error {
f.set = set
return f.{{.TypeName}}.Apply(set)
}
{{end}}{{/* /range .SortedFlagTypes */}}
// vim{{/* 👻 */}}:ro
{{/*
vim:filetype=gotexttmpl
*/}}

View File

@@ -32,6 +32,9 @@ var (
//go:embed generated_test.gotmpl
TestTemplateString string
//go:embed generated_altsrc.gotmpl
AltsrcTemplateString string
titler = cases.Title(language.Und, cases.NoLower)
)
@@ -58,6 +61,10 @@ func main() {
Name: "genflags",
Usage: "Generate flag types for urfave/cli",
Flags: []cli.Flag{
&cli.BoolFlag{
Name: "altsrc",
Aliases: []string{"a"},
},
&cli.PathFlag{
Name: "flag-spec-yaml",
Aliases: []string{"f"},
@@ -148,12 +155,11 @@ func runGenFlags(cCtx *cli.Context) error {
spec.UrfaveCLITestNamespace = "cli."
}
genTmpl, err := template.New("gen").Parse(TemplateString)
if err != nil {
return err
templateString := TemplateString
if cCtx.IsSet("altsrc") {
templateString = AltsrcTemplateString
}
genTestTmpl, err := template.New("gen_test").Parse(TestTemplateString)
genTmpl, err := template.New("gen").Parse(templateString)
if err != nil {
return err
}
@@ -163,27 +169,33 @@ func runGenFlags(cCtx *cli.Context) error {
return err
}
genTestBuf := &bytes.Buffer{}
if err := genTestTmpl.Execute(genTestBuf, spec); err != nil {
return err
}
if err := os.WriteFile(cCtx.Path("generated-output"), genBuf.Bytes(), 0644); err != nil {
return err
}
if err := os.WriteFile(cCtx.Path("generated-test-output"), genTestBuf.Bytes(), 0644); err != nil {
return err
}
if _, err := sh(cCtx.Context, cCtx.Path("goimports"), "-w", cCtx.Path("generated-output")); err != nil {
return err
}
if _, err := sh(cCtx.Context, cCtx.Path("goimports"), "-w", cCtx.Path("generated-test-output")); err != nil {
return err
}
if !cCtx.IsSet("altsrc") {
genTestTmpl, err := template.New("gen_test").Parse(TestTemplateString)
if err != nil {
return err
}
genTestBuf := &bytes.Buffer{}
if err := genTestTmpl.Execute(genTestBuf, spec); err != nil {
return err
}
if err := os.WriteFile(cCtx.Path("generated-test-output"), genTestBuf.Bytes(), 0644); err != nil {
return err
}
if _, err := sh(cCtx.Context, cCtx.Path("goimports"), "-w", cCtx.Path("generated-test-output")); err != nil {
return err
}
}
return nil
}