This repository has been archived by the owner on Nov 5, 2023. It is now read-only.
/
create-project.go
115 lines (103 loc) · 2.57 KB
/
create-project.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package cmd
import (
"context"
"github.com/gobuffalo/genny/v2"
"github.com/gobuffalo/plush/v4"
"github.com/markbates/pkger"
"github.com/ronaksoft/rony/config"
"github.com/spf13/cobra"
"os"
"os/exec"
"path/filepath"
"strings"
)
/*
Creation Time: 2021 - Jan - 30
Created by: (ehsan)
Maintainers:
1. Ehsan N. Moosa (E2)
Auditor: Ehsan N. Moosa (E2)
Copyright Ronak Software Group 2020
*/
var CreateProjectCmd = &cobra.Command{
Use: "create-project",
RunE: func(cmd *cobra.Command, args []string) error {
err := config.BindCmdFlags(cmd)
if err != nil {
return err
}
r := genny.WetRunner(context.Background())
if config.GetBool("dry-run") {
r = genny.DryRunner(context.Background())
}
g := genny.New()
setupSkeleton(g)
goModuleInit(g)
goModuleTidy(g)
goModuleVendor(g)
gofmt(g)
// Create a Runner with the Generator customized by command's arguments
err = r.With(g)
if err != nil {
return err
}
return r.Run()
},
}
func setupSkeleton(g *genny.Generator) {
projectPath := config.GetString("project.dir")
projectName := config.GetString("project.name")
_ = os.Mkdir(projectPath, os.ModePerm)
pathPrefix := skeletonPath + "/skel"
err := pkger.Walk(pathPrefix, func(path string, info os.FileInfo, err error) error {
realPath := strings.TrimSuffix(strings.TrimPrefix(path, pathPrefix), ".tpl")
if info.IsDir() {
g.File(genny.NewDir(filepath.Join(projectPath, realPath), os.ModeDir|0744))
} else {
f, err := pkger.Open(path)
if err != nil {
return err
}
tCtx := plush.NewContext()
tCtx.Set("projectName", func() string {
return projectName
})
s, err := plush.RenderR(f, tCtx)
if err != nil {
return err
}
g.File(genny.NewFileS(filepath.Join(projectPath, realPath), s))
_ = f.Close()
}
return nil
})
if err != nil {
panic(err)
}
}
func goModuleInit(g *genny.Generator) {
projectPath := config.GetString("project.dir")
packageName := config.GetString("package.name")
cmd := exec.Command("go", "mod", "init", packageName)
cmd.Env = os.Environ()
cmd.Dir = projectPath
g.Command(cmd)
}
func goModuleTidy(g *genny.Generator) {
cmd := exec.Command("go", "mod", "tidy")
cmd.Env = os.Environ()
cmd.Dir = config.GetString("project.dir")
g.Command(cmd)
}
func goModuleVendor(g *genny.Generator) {
cmd := exec.Command("go", "mod", "vendor")
cmd.Env = os.Environ()
cmd.Dir = config.GetString("project.dir")
g.Command(cmd)
}
func gofmt(g *genny.Generator) {
cmd := exec.Command("go", "fmt", "./...")
cmd.Env = os.Environ()
cmd.Dir = config.GetString("project.dir")
g.Command(cmd)
}