@@ -29,26 +29,36 @@ var goServerCGETemplate string
29
29
var goServerEventsTemplate string
30
30
31
31
func newGoClient (projectName , serverURL , cgVersion string ) error {
32
- err := createGoClientTemplate ( projectName , serverURL )
32
+ module , err := cli . Input ( "Project module path:" )
33
33
if err != nil {
34
34
return err
35
35
}
36
36
37
- err = installGoClientLibrary (projectName , cgVersion )
37
+ cli .Begin ("Installing correct go-client version..." )
38
+ libraryURL , libraryTag , err := getGoClientLibraryURL (projectName , cgVersion )
38
39
if err != nil {
39
40
return err
40
41
}
41
42
42
- cli .Begin ("Cleaning up..." )
43
+ out , err := external .ExecuteInDirHidden (projectName , "go" , "get" , fmt .Sprintf ("%s@%s" , libraryURL , libraryTag ))
44
+ if err != nil {
45
+ if out != "" {
46
+ cli .Error (out )
47
+ }
48
+ return err
49
+ }
50
+ cli .Finish ()
43
51
44
- if ! external .IsInstalled ("goimports" ) {
45
- cli .Warn ("Failed to add import statements: 'goimports' is not installed!" )
46
- return nil
52
+ cli .Begin ("Creating project template..." )
53
+ err = createGoClientTemplate (projectName , module , serverURL , libraryURL )
54
+ if err != nil {
55
+ return err
47
56
}
57
+ cli .Finish ()
48
58
49
- external . ExecuteInDir ( projectName , "goimports" , "-w" , "main.go " )
59
+ cli . Begin ( "Installing dependencies... " )
50
60
51
- out , err : = external .ExecuteInDirHidden (projectName , "go" , "mod" , "tidy" )
61
+ out , err = external .ExecuteInDirHidden (projectName , "go" , "mod" , "tidy" )
52
62
if err != nil {
53
63
if out != "" {
54
64
cli .Error (out )
@@ -58,16 +68,20 @@ func newGoClient(projectName, serverURL, cgVersion string) error {
58
68
59
69
cli .Finish ()
60
70
61
- return nil
62
- }
71
+ cli .Begin ("Organizing imports..." )
63
72
64
- func createGoClientTemplate (projectName , serverURL string ) error {
65
- module , err := cli .Input ("Project module path:" )
66
- if err != nil {
67
- return err
73
+ if ! external .IsInstalled ("goimports" ) {
74
+ cli .Warn ("Failed to organize import statements: 'goimports' is not installed!" )
75
+ return nil
68
76
}
77
+ external .ExecuteInDir (projectName , "goimports" , "-w" , "main.go" )
69
78
70
- cli .Begin ("Creating project template..." )
79
+ cli .Finish ()
80
+
81
+ return nil
82
+ }
83
+
84
+ func createGoClientTemplate (projectName , module , serverURL , libraryURL string ) error {
71
85
out , err := external .ExecuteInDirHidden (projectName , "go" , "mod" , "init" , module )
72
86
if err != nil {
73
87
if out != "" {
@@ -88,73 +102,67 @@ func createGoClientTemplate(projectName, serverURL string) error {
88
102
defer file .Close ()
89
103
90
104
type data struct {
91
- URL string
105
+ URL string
106
+ LibraryURL string
92
107
}
93
108
94
- err = tmpl .Execute (file , data {
95
- URL : serverURL ,
109
+ return tmpl .Execute (file , data {
110
+ URL : serverURL ,
111
+ LibraryURL : libraryURL ,
96
112
})
97
- cli .Finish ()
98
- return err
99
113
}
100
114
101
- func installGoClientLibrary (projectName , cgVersion string ) error {
102
- cli .Begin ("Fetching correct client library version..." )
103
-
115
+ func getGoClientLibraryURL (projectName , cgVersion string ) (url string , tag string , err error ) {
104
116
clientVersion := external .ClientVersionFromCGVersion ("code-game-project" , "go-client" , cgVersion )
105
117
106
118
if clientVersion == "latest" {
107
119
var err error
108
120
clientVersion , err = external .LatestGithubTag ("code-game-project" , "go-client" )
109
121
if err != nil {
110
- return err
122
+ return "" , "" , err
111
123
}
112
124
clientVersion = strings .TrimPrefix (strings .Join (strings .Split (clientVersion , "." )[:2 ], "." ), "v" )
113
125
}
114
126
115
127
majorVersion := strings .Split (clientVersion , "." )[0 ]
116
- tag , err : = external .GithubTagFromVersion ("code-game-project" , "go-client" , clientVersion )
128
+ tag , err = external .GithubTagFromVersion ("code-game-project" , "go-client" , clientVersion )
117
129
if err != nil {
118
- return err
130
+ return "" , "" , err
119
131
}
120
132
path := "github.com/code-game-project/go-client/cg"
121
133
if majorVersion != "0" && majorVersion != "1" {
122
134
path = fmt .Sprintf ("github.com/code-game-project/go-client/v%s/cg" , majorVersion )
123
135
}
124
- path += "@" + tag
125
- cli .Finish ()
126
136
127
- cli .Begin ("Installing dependencies..." )
128
- out , err := external .ExecuteInDirHidden (projectName , "go" , "get" , path )
129
- if err != nil {
130
- cli .Error (out )
131
- return err
132
- }
133
- cli .Finish ()
134
- return nil
137
+ return path , tag , nil
135
138
}
136
139
137
140
func newGoServer (projectName string ) error {
138
- err := createGoServerTemplate ( projectName )
141
+ module , err := cli . Input ( "Project module path:" )
139
142
if err != nil {
140
143
return err
141
144
}
142
145
143
- err = installGoServerLibrary (projectName )
146
+ cli .Begin ("Fetching latest version numbers..." )
147
+ cgeVersion , err := external .LatestCGEVersion ()
144
148
if err != nil {
145
149
return err
146
150
}
147
151
148
- cli .Begin ("Cleaning up..." )
152
+ libraryURL , err := getServerLibraryURL ()
153
+ if err != nil {
154
+ return err
155
+ }
156
+ cli .Finish ()
149
157
150
- if ! external .IsInstalled ("goimports" ) {
151
- cli .Warn ("Failed to add import statements: 'goimports' is not installed!" )
152
- return nil
158
+ cli .Begin ("Creating project template..." )
159
+ err = createGoServerTemplate (projectName , module , cgeVersion , libraryURL )
160
+ if err != nil {
161
+ return err
153
162
}
163
+ cli .Finish ()
154
164
155
- external .ExecuteInDir (projectName , "goimports" , "-w" , "main.go" )
156
- packageDir := strings .ReplaceAll (strings .ReplaceAll (projectName , "_" , "" ), "-" , "" )
157
- external .ExecuteInDir (projectName , "goimports" , "-w" , filepath .Join (packageDir , "game.go" ))
165
+ cli .Begin ("Installing dependencies..." )
158
166
159
167
out , err := external .ExecuteInDirHidden (projectName , "go" , "mod" , "tidy" )
160
168
if err != nil {
@@ -166,16 +174,22 @@ func newGoServer(projectName string) error {
166
174
167
175
cli .Finish ()
168
176
169
- return nil
170
- }
177
+ cli .Begin ("Organizing imports..." )
171
178
172
- func createGoServerTemplate (projectName string ) error {
173
- module , err := cli .Input ("Project module path:" )
174
- if err != nil {
175
- return err
179
+ if ! external .IsInstalled ("goimports" ) {
180
+ cli .Warn ("Failed to organize import statements: 'goimports' is not installed!" )
181
+ return nil
176
182
}
183
+ external .ExecuteInDirHidden (projectName , "goimports" , "-w" , "main.go" )
184
+ packageDir := strings .ReplaceAll (strings .ReplaceAll (projectName , "_" , "" ), "-" , "" )
185
+ external .ExecuteInDirHidden (projectName , "goimports" , "-w" , filepath .Join (packageDir , "game.go" ))
177
186
178
- cli .Begin ("Creating project template..." )
187
+ cli .Finish ()
188
+
189
+ return nil
190
+ }
191
+
192
+ func createGoServerTemplate (projectName , module , cgeVersion , libraryURL string ) error {
179
193
out , err := external .ExecuteInDirHidden (projectName , "go" , "mod" , "init" , module )
180
194
if err != nil {
181
195
if out != "" {
@@ -184,38 +198,27 @@ func createGoServerTemplate(projectName string) error {
184
198
return err
185
199
}
186
200
187
- cgeVersion , err := external .LatestCGEVersion ()
188
- if err != nil {
189
- return err
190
- }
191
-
192
- err = executeGoServerTemplate (goServerMainTemplate , "main.go" , projectName , cgeVersion )
201
+ err = executeGoServerTemplate (goServerMainTemplate , "main.go" , projectName , cgeVersion , libraryURL , module )
193
202
if err != nil {
194
203
return err
195
204
}
196
205
197
- err = executeGoServerTemplate (goServerCGETemplate , "events.cge" , projectName , cgeVersion )
206
+ err = executeGoServerTemplate (goServerCGETemplate , "events.cge" , projectName , cgeVersion , libraryURL , module )
198
207
if err != nil {
199
208
return err
200
209
}
201
210
202
211
packageName := strings .ReplaceAll (strings .ReplaceAll (projectName , "_" , "" ), "-" , "" )
203
212
204
- err = executeGoServerTemplate (goServerGameTemplate , filepath .Join (packageName , "game.go" ), projectName , cgeVersion )
205
- if err != nil {
206
- return err
207
- }
208
-
209
- err = executeGoServerTemplate (goServerEventsTemplate , filepath .Join (packageName , "events.go" ), projectName , cgeVersion )
213
+ err = executeGoServerTemplate (goServerGameTemplate , filepath .Join (packageName , "game.go" ), projectName , cgeVersion , libraryURL , module )
210
214
if err != nil {
211
215
return err
212
216
}
213
217
214
- cli .Finish ()
215
- return nil
218
+ return executeGoServerTemplate (goServerEventsTemplate , filepath .Join (packageName , "events.go" ), projectName , cgeVersion , libraryURL , module )
216
219
}
217
220
218
- func executeGoServerTemplate (templateText , fileName , projectName , cgeVersion string ) error {
221
+ func executeGoServerTemplate (templateText , fileName , projectName , cgeVersion , libraryURL , modulePath string ) error {
219
222
tmpl , err := template .New (fileName ).Parse (templateText )
220
223
if err != nil {
221
224
return err
@@ -237,44 +240,30 @@ func executeGoServerTemplate(templateText, fileName, projectName, cgeVersion str
237
240
PackageName string
238
241
SnakeCaseName string
239
242
CGEVersion string
243
+ LibraryURL string
244
+ ModulePath string
240
245
}
241
246
242
247
return tmpl .Execute (file , data {
243
248
Name : projectName ,
244
249
PackageName : strings .ReplaceAll (strings .ReplaceAll (projectName , "_" , "" ), "-" , "" ),
245
250
SnakeCaseName : strings .ReplaceAll (projectName , "-" , "_" ),
246
251
CGEVersion : cgeVersion ,
252
+ LibraryURL : libraryURL ,
253
+ ModulePath : modulePath ,
247
254
})
248
255
}
249
256
250
- func installGoServerLibrary (projectName string ) error {
251
- cli .Begin ("Fetching latest server library version..." )
257
+ func getServerLibraryURL () (string , error ) {
252
258
tag , err := external .LatestGithubTag ("code-game-project" , "go-server" )
253
259
if err != nil {
254
- return err
260
+ return "" , err
255
261
}
256
262
majorVersion := strings .TrimPrefix (strings .Split (tag , "." )[0 ], "v" )
257
263
258
264
path := "github.com/code-game-project/go-server/cg"
259
265
if majorVersion != "0" && majorVersion != "1" {
260
266
path = fmt .Sprintf ("github.com/code-game-project/go-server/v%s/cg" , majorVersion )
261
267
}
262
- cli .Finish ()
263
-
264
- cli .Begin ("Installing dependencies..." )
265
-
266
- out , err := external .ExecuteInDirHidden (projectName , "go" , "get" , path )
267
- if err != nil {
268
- cli .Error (out )
269
- return err
270
- }
271
-
272
- out , err = external .ExecuteInDirHidden (projectName , "go" , "get" , "github.com/spf13/pflag" )
273
- if err != nil {
274
- cli .Error (out )
275
- return err
276
- }
277
-
278
- cli .Finish ()
279
- return nil
268
+ return path , nil
280
269
}
0 commit comments