This repository has been archived by the owner on Jun 30, 2022. It is now read-only.
/
generate.go
83 lines (73 loc) · 2.19 KB
/
generate.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
package plugins
import (
"context"
"fmt"
"os"
"strings"
"github.com/gobuffalo/bufcli/genny/plugins/plugin"
"github.com/gobuffalo/bufcli/genny/plugins/plugin/with"
"github.com/gobuffalo/genny"
"github.com/gobuffalo/genny/gogen"
"github.com/gobuffalo/licenser/genny/licenser"
"github.com/gobuffalo/logger"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// generateCmd represents the generate command
var generateCmd = &cobra.Command{
Use: "plugin",
Short: "generates a new buffalo plugin",
Long: "buffalo generate plugin github.com/foo/buffalo-bar",
RunE: func(cmd *cobra.Command, args []string) error {
popts := &plugin.Options{
Author: viper.GetString("author"),
ShortName: viper.GetString("short-name"),
License: viper.GetString("license"),
}
if len(args) > 0 {
popts.PluginPkg = args[0]
}
r := genny.WetRunner(context.Background())
if viper.GetBool("dry-run") {
r = genny.DryRunner(context.Background())
}
pwd, err := os.Getwd()
if err != nil {
return err
}
popts.Root = pwd
gg, err := plugin.New(popts)
if err != nil {
return err
}
r.Root = popts.Root
r.WithRun(genny.Force(r.Root, viper.GetBool("force")))
r.WithGroup(gg)
if viper.GetBool("with-gen") {
gg, err := with.GenerateCmd(popts)
if err != nil {
return err
}
r.WithGroup(gg)
}
g, err := gogen.Fmt(r.Root)
if err != nil {
return err
}
r.With(g)
if viper.GetBool("verbose") {
r.Logger = logger.New(logger.DebugLevel)
}
return r.Run()
},
}
func init() {
generateCmd.Flags().BoolP("dry-run", "d", false, "run the generator without creating files or running commands")
generateCmd.Flags().BoolP("verbose", "v", false, "turn on verbose logging")
generateCmd.Flags().Bool("with-gen", false, "creates a generator plugin")
generateCmd.Flags().BoolP("force", "f", false, "will delete the target directory if it exists")
generateCmd.Flags().StringP("author", "a", "", "author's name")
generateCmd.Flags().StringP("license", "l", "mit", fmt.Sprintf("choose a license from: [%s]", strings.Join(licenser.Available, ", ")))
generateCmd.Flags().StringP("short-name", "s", "", "a 'short' name for the package")
viper.BindPFlags(generateCmd.Flags())
}