1
1
package generator
2
2
3
3
import (
4
+ "fmt"
5
+ "os"
6
+ "path"
7
+ "path/filepath"
4
8
"strings"
5
9
10
+ "github.com/Songmu/prompter"
6
11
"github.com/sirupsen/logrus"
7
12
"github.com/spf13/viper"
8
13
14
+ "github.com/cage1016/ak/alfred"
9
15
"github.com/cage1016/ak/fs"
10
- template "github.com/cage1016/ak/templates "
16
+ "github.com/cage1016/ak/template "
11
17
)
12
18
13
- type ScriptFilterGenerator struct {
19
+ const (
20
+ goMod = "go.mod"
21
+ goSum = "go.sum"
22
+ )
23
+
24
+ type CmdGenerator struct {
14
25
EnabledAutoUpdate bool
15
26
}
16
27
17
- func (ig * ScriptFilterGenerator )Generate ()error {
28
+ func (ig * CmdGenerator )Generate ()error {
18
29
te := template .NewEngine ()
19
30
20
31
// generate main.go
21
32
{
22
- m ,err := te .Execute ("scriptFilter .main" ,map [string ]interface {}{
33
+ m ,err := te .Execute ("cmd .main" ,map [string ]interface {}{
23
34
"GoModPackage" :viper .GetString ("go_mod_package" ),
24
35
"Year" :viper .GetString ("license.year" ),
25
36
"Author" :viper .GetString ("license.name" ),
@@ -38,7 +49,7 @@ func (ig *ScriptFilterGenerator) Generate() error {
38
49
39
50
// generate cmd/root.go
40
51
{
41
- m ,err := te .Execute ("scriptFilter .root" ,map [string ]interface {}{
52
+ m ,err := te .Execute ("cmd .root" ,map [string ]interface {}{
42
53
"EnabledAutoUpdate" :ig .EnabledAutoUpdate ,
43
54
"GithubRepo" :strings .Replace (viper .GetString ("go_mod_package" ),"github.com/" ,"" ,1 ),
44
55
"Name" :viper .GetString ("workflow.name" ),
@@ -63,7 +74,7 @@ func (ig *ScriptFilterGenerator) Generate() error {
63
74
logrus .Debugf ("generating cmd/root.go" )
64
75
65
76
if ig .EnabledAutoUpdate {
66
- m ,err = te .Execute ("scriptFilter .update" ,map [string ]interface {}{
77
+ m ,err = te .Execute ("cmd .update" ,map [string ]interface {}{
67
78
"Name" :viper .GetString ("workflow.name" ),
68
79
"Year" :viper .GetString ("license.year" ),
69
80
"Author" :viper .GetString ("license.name" ),
@@ -101,8 +112,55 @@ func (ig *ScriptFilterGenerator) Generate() error {
101
112
return nil
102
113
}
103
114
104
- func NewScriptFilterGenerator (e bool )* ScriptFilterGenerator {
105
- return & ScriptFilterGenerator {
115
+ func GoModGenerator () {
116
+ fn := func () {
117
+ if viper .GetString ("ak_folder" )!= "" {
118
+ pwd ,_ := filepath .Abs ("." )
119
+ if err := os .Chdir (path .Join (pwd ,viper .GetString ("ak_folder" )));err != nil {
120
+ logrus .Fatalf ("failed to change directory: %s" ,err )
121
+ }
122
+
123
+ alfred .Run ("rm" ,"-f" ,goMod ,goSum )
124
+ logrus .Debugf ("removed go mod and go sum" )
125
+
126
+ alfred .Run ("go" ,"mod" ,"init" ,viper .GetString ("go_mod_package" ))
127
+ logrus .Debugf ("go mod init: %s" ,viper .GetString ("go_mod_package" ))
128
+
129
+ if err := os .Chdir (".." );err != nil {
130
+ logrus .Fatalf ("failed to change directory: %s" ,err )
131
+ }
132
+ }else {
133
+ alfred .Run ("rm" ,"-f" ,goMod ,goSum )
134
+ logrus .Debugf ("removed go mod and go sum" )
135
+
136
+ alfred .Run ("go" ,"mod" ,"init" ,viper .GetString ("go_mod_package" ))
137
+ logrus .Debugf ("go mod init: %s" ,viper .GetString ("go_mod_package" ))
138
+ }
139
+ }
140
+
141
+ if viper .GetString ("go_mod_package" )== "" {
142
+ logrus .Fatalf ("ak.json 'go_mod_package' is required" )
143
+ }
144
+
145
+ defaultFs := fs .Get ()
146
+ if b ,_ := defaultFs .Exists (goMod );b && ! viper .GetBool ("ak_force" ) {
147
+ b := prompter .YN (fmt .Sprintf ("`%s` already exists do you want to override it ?" ,goMod ),false )
148
+ if b {
149
+ fn ()
150
+ }
151
+ }else {
152
+ fn ()
153
+ }
154
+ }
155
+
156
+ func VerifyWorkflowFolder () {
157
+ if b ,_ := fs .Get ().Exists (viper .GetString ("workflow.folder" ));! b {
158
+ logrus .Fatalf ("workflow folder does not exist: %s" ,viper .GetString ("workflow.folder" ))
159
+ }
160
+ }
161
+
162
+ func NewCmdGenerator (e bool )* CmdGenerator {
163
+ return & CmdGenerator {
106
164
EnabledAutoUpdate :e ,
107
165
}
108
166
}