@@ -13,7 +13,7 @@ import (
1313 "time"
1414
1515 "github.com/code-game-project/codegame-cli/cli"
16- "github.com/code-game-project/codegame-cli/external "
16+ "github.com/code-game-project/codegame-cli/util "
1717 "github.com/ogier/pflag"
1818)
1919
@@ -42,30 +42,34 @@ func New() error {
4242 if err != nil {
4343 return err
4444 }
45+ err = os .Chdir (projectName )
46+ if err != nil {
47+ return err
48+ }
4549
4650 switch project {
4751 case "server" :
48- err = newServer (projectName )
52+ err = newServer ()
4953 case "client" :
50- err = newClient (projectName )
54+ err = newClient ()
5155 default :
5256 err = cli .Error ("Unknown project type: %s" , project )
5357 }
5458
5559 if err != nil {
56- os . RemoveAll ( projectName )
60+ deleteCurrentDir ( )
5761 return err
5862 }
5963
60- err = git (projectName )
64+ err = git ()
6165 if err != nil {
6266 return err
6367 }
6468 err = readme (projectName )
6569 if err != nil {
6670 return err
6771 }
68- err = license (projectName )
72+ err = license ()
6973 if err != nil {
7074 return err
7175 }
@@ -74,7 +78,7 @@ func New() error {
7478 return nil
7579}
7680
77- func newServer (projectName string ) error {
81+ func newServer () error {
7882 var language string
7983 if pflag .NArg () >= 3 {
8084 language = strings .ToLower (pflag .Arg (2 ))
@@ -89,25 +93,24 @@ func newServer(projectName string) error {
8993 var err error
9094 switch language {
9195 case "go" :
92- err = external .ExecuteModule (projectName , "go" , "latest" , "server" , "new" , "server" )
96+ err = util .ExecuteModule ("go" , "latest" , "server" , "new" , "server" )
9397 default :
9498 return cli .Error ("Unsupported language: %s" , language )
9599 }
96100 return err
97101}
98102
99- func newClient (projectName string ) error {
103+ func newClient () error {
100104 url , err := cli .Input ("Game server URL:" )
101105 if err != nil {
102106 return err
103107 }
104- url = trimURL (url )
105- ssl := isSSL (url )
106- name , cgVersion , err := getCodeGameInfo (baseURL (url , ssl ))
108+ url = baseURL (url )
109+ name , cgVersion , err := getCodeGameInfo (url )
107110 if err != nil {
108111 return err
109112 }
110- cgeVersion , err := external .GetCGEVersion (baseURL ( url , ssl ) )
113+ cgeVersion , err := util .GetCGEVersion (url )
111114 if err != nil {
112115 return err
113116 }
@@ -123,29 +126,29 @@ func newClient(projectName string) error {
123126 }
124127 }
125128
126- cgeMajor , cgeMinor , _ , err := external .ParseVersion (cgeVersion )
129+ cgeMajor , cgeMinor , _ , err := util .ParseVersion (cgeVersion )
127130 if err != nil {
128131 return cli .Error (err .Error ())
129132 }
130133
131134 switch language {
132135 case "go" :
133- goLibraryVersion := external . ClientVersionFromCGVersion ("code-game-project" , "go-client" , cgVersion )
134- err = external .ExecuteModule (projectName , "go" , goLibraryVersion , "client" , "new" , "client" , "--library-version=" + goLibraryVersion , "--game-name=" + name , "--url=" + url , fmt .Sprintf ("--supports-wrappers=%t" , cgeMajor > 0 || cgeMinor >= 3 ))
136+ goLibraryVersion := util . LibraryVersionFromCGVersion ("code-game-project" , "go-client" , cgVersion )
137+ err = util .ExecuteModule ("go" , goLibraryVersion , "client" , "new" , "client" , "--library-version=" + goLibraryVersion , "--game-name=" + name , "--url=" + url , fmt .Sprintf ("--supports-wrappers=%t" , cgeMajor > 0 || cgeMinor >= 3 ))
135138 default :
136139 return cli .Error ("Unsupported language: %s" , language )
137140 }
138141 if err != nil {
139142 return err
140143 }
141144
142- eventsOutput := projectName
145+ eventsOutput := "."
143146 if language == "go" {
144- eventsOutput = filepath . Join ( projectName , strings .ReplaceAll (strings .ReplaceAll (name , "-" , "" ), "_" , "" ) )
147+ eventsOutput = strings .ReplaceAll (strings .ReplaceAll (name , "-" , "" ), "_" , "" )
145148 }
146149
147150 cli .Begin ("Generating event definitions..." )
148- err = external .CGGenEvents (eventsOutput , baseURL ( url , ssl ) , cgeVersion , language )
151+ err = util .CGGenEvents (eventsOutput , url , cgeVersion , language )
149152 if err != nil {
150153 cli .Error ("Failed to generate event definitions: %s" , err )
151154 return err
@@ -155,20 +158,20 @@ func newClient(projectName string) error {
155158 return nil
156159}
157160
158- func git (projectName string ) error {
159- if ! external .IsInstalled ("git" ) {
161+ func git () error {
162+ if ! util .IsInstalled ("git" ) {
160163 return nil
161164 }
162165
163166 yes , err := cli .YesNo ("Initialize git?" , true )
164167 if err != nil {
165- os . RemoveAll ( projectName )
168+ deleteCurrentDir ( )
166169 return err
167170 }
168171 if ! yes {
169172 return nil
170173 }
171- out , err := external . ExecuteInDirHidden ( projectName , "git" , "init" )
174+ out , err := util . Execute ( true , "git" , "init" )
172175 if err != nil {
173176 if out != "" {
174177 cli .Error (out )
@@ -182,7 +185,7 @@ func git(projectName string) error {
182185func readme (projectName string ) error {
183186 yes , err := cli .YesNo ("Create README?" , true )
184187 if err != nil {
185- os . RemoveAll ( projectName )
188+ deleteCurrentDir ( )
186189 return err
187190 }
188191 if ! yes {
@@ -191,7 +194,7 @@ func readme(projectName string) error {
191194
192195 fileContent := fmt .Sprintf ("# %s" , projectName )
193196
194- err = os .WriteFile (filepath . Join ( projectName , "README.md" ) , []byte (fileContent ), 0644 )
197+ err = os .WriteFile ("README.md" , []byte (fileContent ), 0644 )
195198 if err != nil {
196199 cli .Error (err .Error ())
197200 }
@@ -222,10 +225,10 @@ var licenseApache string
222225//go:embed templates/licenses/Apache_README.tmpl
223226var licenseReadmeApache string
224227
225- func license (projectName string ) error {
228+ func license () error {
226229 license , err := cli .Select ("License" , []string {"None" , "MIT" , "GPLv3" , "AGPL" , "Apache 2.0" }, []string {"none" , "MIT" , "GPL" , "AGPL" , "Apache" })
227230 if err != nil {
228- os . RemoveAll ( projectName )
231+ deleteCurrentDir ( )
229232 return err
230233 }
231234
@@ -250,20 +253,20 @@ func license(projectName string) error {
250253 return errors .New ("Unknown license." )
251254 }
252255
253- err = writeLicense (licenseTemplate , projectName , external .GetUsername (), time .Now ().Year ())
256+ err = writeLicense (licenseTemplate , util .GetUsername (), time .Now ().Year ())
254257 if err != nil {
255- os .Remove (filepath . Join ( projectName , "LICENSE" ) )
258+ os .Remove ("LICENSE" )
256259 return err
257260 }
258261
259- if _ , err := os .Stat (filepath . Join ( projectName , "README.md" ) ); err == nil {
260- err = writeReadmeLicense (licenseReadmeTemplate , projectName , external .GetUsername (), time .Now ().Year ())
262+ if _ , err := os .Stat ("README.md" ); err == nil {
263+ err = writeReadmeLicense (licenseReadmeTemplate , util .GetUsername (), time .Now ().Year ())
261264 }
262265
263266 return nil
264267}
265268
266- func writeLicense (templateText , projectName , username string , year int ) error {
269+ func writeLicense (templateText , username string , year int ) error {
267270 type data struct {
268271 Year int
269272 Username string
@@ -273,7 +276,7 @@ func writeLicense(templateText, projectName, username string, year int) error {
273276 return err
274277 }
275278
276- file , err := os .Create (filepath . Join ( projectName , "LICENSE" ) )
279+ file , err := os .Create ("LICENSE" )
277280 if err != nil {
278281 return cli .Error ("Failed to create LICENSE file!" )
279282 }
@@ -285,8 +288,8 @@ func writeLicense(templateText, projectName, username string, year int) error {
285288 })
286289}
287290
288- func writeReadmeLicense (templateText , projectName , username string , year int ) error {
289- readme , err := os .OpenFile (filepath . Join ( projectName , "README.md" ) , os .O_APPEND | os .O_WRONLY , 0755 )
291+ func writeReadmeLicense (templateText , username string , year int ) error {
292+ readme , err := os .OpenFile ("README.md" , os .O_APPEND | os .O_WRONLY , 0755 )
290293 if err != nil {
291294 return cli .Error ("Failed to append license text to README." )
292295 }
@@ -320,7 +323,7 @@ func getCodeGameInfo(baseURL string) (string, string, error) {
320323 if err != nil || res .StatusCode != http .StatusOK {
321324 return "" , "" , cli .Error ("Couldn't access %s." , url )
322325 }
323- if ! external .HasContentType (res .Header , "application/json" ) {
326+ if ! util .HasContentType (res .Header , "application/json" ) {
324327 return "" , "" , cli .Error ("%s doesn't return JSON." , url )
325328 }
326329 defer res .Body .Close ()
@@ -354,6 +357,20 @@ func execTemplate(templateText, path string, data any) error {
354357 return tmpl .Execute (file , data )
355358}
356359
360+ func deleteCurrentDir () {
361+ workingDir , err := os .Getwd ()
362+ if err != nil {
363+ cli .Error ("Failed to delete created directory: %s" , err )
364+ return
365+ }
366+
367+ name := filepath .Base (workingDir )
368+
369+ os .Chdir (".." )
370+
371+ os .RemoveAll (name )
372+ }
373+
357374func trimURL (url string ) string {
358375 if strings .HasPrefix (url , "http://" ) {
359376 url = strings .TrimPrefix (url , "http://" )
@@ -367,11 +384,13 @@ func trimURL(url string) string {
367384 return strings .TrimSuffix (url , "/" )
368385}
369386
370- func baseURL (domain string , ssl bool ) string {
371- if ssl {
372- return "https://" + domain
387+ // baseURL returns the URL with the correct protocol ('http://' or 'https://')
388+ func baseURL (url string ) string {
389+ url = trimURL (url )
390+ if isSSL (url ) {
391+ return "https://" + url
373392 } else {
374- return "http://" + domain
393+ return "http://" + url
375394 }
376395}
377396
0 commit comments