@@ -29,26 +29,36 @@ var goServerCGETemplate string
2929var goServerEventsTemplate string
3030
3131func newGoClient (projectName , serverURL , cgVersion string ) error {
32- err := createGoClientTemplate ( projectName , serverURL )
32+ module , err := cli . Input ( "Project module path:" )
3333 if err != nil {
3434 return err
3535 }
3636
37- err = installGoClientLibrary (projectName , cgVersion )
37+ cli .Begin ("Installing correct go-client version..." )
38+ libraryURL , libraryTag , err := getGoClientLibraryURL (projectName , cgVersion )
3839 if err != nil {
3940 return err
4041 }
4142
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 ()
4351
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
4756 }
57+ cli .Finish ()
4858
49- external . ExecuteInDir ( projectName , "goimports" , "-w" , "main.go " )
59+ cli . Begin ( "Installing dependencies... " )
5060
51- out , err : = external .ExecuteInDirHidden (projectName , "go" , "mod" , "tidy" )
61+ out , err = external .ExecuteInDirHidden (projectName , "go" , "mod" , "tidy" )
5262 if err != nil {
5363 if out != "" {
5464 cli .Error (out )
@@ -58,16 +68,20 @@ func newGoClient(projectName, serverURL, cgVersion string) error {
5868
5969 cli .Finish ()
6070
61- return nil
62- }
71+ cli .Begin ("Organizing imports..." )
6372
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
6876 }
77+ external .ExecuteInDir (projectName , "goimports" , "-w" , "main.go" )
6978
70- cli .Begin ("Creating project template..." )
79+ cli .Finish ()
80+
81+ return nil
82+ }
83+
84+ func createGoClientTemplate (projectName , module , serverURL , libraryURL string ) error {
7185 out , err := external .ExecuteInDirHidden (projectName , "go" , "mod" , "init" , module )
7286 if err != nil {
7387 if out != "" {
@@ -88,73 +102,67 @@ func createGoClientTemplate(projectName, serverURL string) error {
88102 defer file .Close ()
89103
90104 type data struct {
91- URL string
105+ URL string
106+ LibraryURL string
92107 }
93108
94- err = tmpl .Execute (file , data {
95- URL : serverURL ,
109+ return tmpl .Execute (file , data {
110+ URL : serverURL ,
111+ LibraryURL : libraryURL ,
96112 })
97- cli .Finish ()
98- return err
99113}
100114
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 ) {
104116 clientVersion := external .ClientVersionFromCGVersion ("code-game-project" , "go-client" , cgVersion )
105117
106118 if clientVersion == "latest" {
107119 var err error
108120 clientVersion , err = external .LatestGithubTag ("code-game-project" , "go-client" )
109121 if err != nil {
110- return err
122+ return "" , "" , err
111123 }
112124 clientVersion = strings .TrimPrefix (strings .Join (strings .Split (clientVersion , "." )[:2 ], "." ), "v" )
113125 }
114126
115127 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 )
117129 if err != nil {
118- return err
130+ return "" , "" , err
119131 }
120132 path := "github.com/code-game-project/go-client/cg"
121133 if majorVersion != "0" && majorVersion != "1" {
122134 path = fmt .Sprintf ("github.com/code-game-project/go-client/v%s/cg" , majorVersion )
123135 }
124- path += "@" + tag
125- cli .Finish ()
126136
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
135138}
136139
137140func newGoServer (projectName string ) error {
138- err := createGoServerTemplate ( projectName )
141+ module , err := cli . Input ( "Project module path:" )
139142 if err != nil {
140143 return err
141144 }
142145
143- err = installGoServerLibrary (projectName )
146+ cli .Begin ("Fetching latest version numbers..." )
147+ cgeVersion , err := external .LatestCGEVersion ()
144148 if err != nil {
145149 return err
146150 }
147151
148- cli .Begin ("Cleaning up..." )
152+ libraryURL , err := getServerLibraryURL ()
153+ if err != nil {
154+ return err
155+ }
156+ cli .Finish ()
149157
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
153162 }
163+ cli .Finish ()
154164
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..." )
158166
159167 out , err := external .ExecuteInDirHidden (projectName , "go" , "mod" , "tidy" )
160168 if err != nil {
@@ -166,16 +174,22 @@ func newGoServer(projectName string) error {
166174
167175 cli .Finish ()
168176
169- return nil
170- }
177+ cli .Begin ("Organizing imports..." )
171178
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
176182 }
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" ))
177186
178- cli .Begin ("Creating project template..." )
187+ cli .Finish ()
188+
189+ return nil
190+ }
191+
192+ func createGoServerTemplate (projectName , module , cgeVersion , libraryURL string ) error {
179193 out , err := external .ExecuteInDirHidden (projectName , "go" , "mod" , "init" , module )
180194 if err != nil {
181195 if out != "" {
@@ -184,38 +198,27 @@ func createGoServerTemplate(projectName string) error {
184198 return err
185199 }
186200
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 )
193202 if err != nil {
194203 return err
195204 }
196205
197- err = executeGoServerTemplate (goServerCGETemplate , "events.cge" , projectName , cgeVersion )
206+ err = executeGoServerTemplate (goServerCGETemplate , "events.cge" , projectName , cgeVersion , libraryURL , module )
198207 if err != nil {
199208 return err
200209 }
201210
202211 packageName := strings .ReplaceAll (strings .ReplaceAll (projectName , "_" , "" ), "-" , "" )
203212
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 )
210214 if err != nil {
211215 return err
212216 }
213217
214- cli .Finish ()
215- return nil
218+ return executeGoServerTemplate (goServerEventsTemplate , filepath .Join (packageName , "events.go" ), projectName , cgeVersion , libraryURL , module )
216219}
217220
218- func executeGoServerTemplate (templateText , fileName , projectName , cgeVersion string ) error {
221+ func executeGoServerTemplate (templateText , fileName , projectName , cgeVersion , libraryURL , modulePath string ) error {
219222 tmpl , err := template .New (fileName ).Parse (templateText )
220223 if err != nil {
221224 return err
@@ -237,44 +240,30 @@ func executeGoServerTemplate(templateText, fileName, projectName, cgeVersion str
237240 PackageName string
238241 SnakeCaseName string
239242 CGEVersion string
243+ LibraryURL string
244+ ModulePath string
240245 }
241246
242247 return tmpl .Execute (file , data {
243248 Name : projectName ,
244249 PackageName : strings .ReplaceAll (strings .ReplaceAll (projectName , "_" , "" ), "-" , "" ),
245250 SnakeCaseName : strings .ReplaceAll (projectName , "-" , "_" ),
246251 CGEVersion : cgeVersion ,
252+ LibraryURL : libraryURL ,
253+ ModulePath : modulePath ,
247254 })
248255}
249256
250- func installGoServerLibrary (projectName string ) error {
251- cli .Begin ("Fetching latest server library version..." )
257+ func getServerLibraryURL () (string , error ) {
252258 tag , err := external .LatestGithubTag ("code-game-project" , "go-server" )
253259 if err != nil {
254- return err
260+ return "" , err
255261 }
256262 majorVersion := strings .TrimPrefix (strings .Split (tag , "." )[0 ], "v" )
257263
258264 path := "github.com/code-game-project/go-server/cg"
259265 if majorVersion != "0" && majorVersion != "1" {
260266 path = fmt .Sprintf ("github.com/code-game-project/go-server/v%s/cg" , majorVersion )
261267 }
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
280269}
0 commit comments