Skip to content

Commit 160a613

Browse files
committed
Refactor
1 parent 910e63a commit 160a613

File tree

13 files changed

+467
-427
lines changed

13 files changed

+467
-427
lines changed

commands/docs.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"path/filepath"
66

77
"github.com/code-game-project/codegame-cli/cli"
8-
"github.com/code-game-project/codegame-cli/external"
8+
"github.com/code-game-project/codegame-cli/util"
99
"github.com/gomarkdown/markdown"
1010
"github.com/gomarkdown/markdown/html"
1111
"github.com/gomarkdown/markdown/parser"
@@ -20,7 +20,7 @@ var docsStyle string
2020
func Docs() error {
2121
if pflag.NArg() == 1 {
2222
cli.Begin("Opening documentation...")
23-
err := external.OpenBrowser("https://docs.code-game.org")
23+
err := util.OpenBrowser("https://docs.code-game.org")
2424
if err != nil {
2525
cli.Error(err.Error())
2626
}
@@ -30,15 +30,14 @@ func Docs() error {
3030

3131
cli.Begin("Generating markdown documentation...")
3232

33-
url := trimURL(pflag.Arg(1))
34-
url = baseURL(url, isSSL(url))
33+
url := baseURL(pflag.Arg(1))
3534

36-
cgeVersion, err := external.GetCGEVersion(url)
35+
cgeVersion, err := util.GetCGEVersion(url)
3736
if err != nil {
3837
return err
3938
}
4039

41-
err = external.CGGenEvents(os.TempDir(), url, cgeVersion, "markdown")
40+
err = util.CGGenEvents(os.TempDir(), url, cgeVersion, "markdown")
4241
if err != nil {
4342
return err
4443
}
@@ -58,6 +57,8 @@ func Docs() error {
5857
Flags: html.CommonFlags | html.CompletePage,
5958
}))
6059

60+
os.Remove(filepath.Join(os.TempDir(), "event_docs.md"))
61+
6162
err = os.WriteFile(filepath.Join(os.TempDir(), "event_docs.html"), text, 0644)
6263
if err != nil {
6364
return cli.Error(err.Error())
@@ -72,7 +73,7 @@ func Docs() error {
7273

7374
cli.Begin("Opening documentation...")
7475

75-
err = external.OpenBrowser(filepath.Join(os.TempDir(), "event_docs.html"))
76+
err = util.OpenBrowser(filepath.Join(os.TempDir(), "event_docs.html"))
7677
if err != nil {
7778
cli.Error(err.Error())
7879
}

commands/info.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"unicode/utf8"
1111

1212
"github.com/code-game-project/codegame-cli/cli"
13-
"github.com/code-game-project/codegame-cli/external"
13+
"github.com/code-game-project/codegame-cli/util"
1414
"github.com/mattn/go-colorable"
1515
"github.com/ogier/pflag"
1616
)
@@ -73,12 +73,12 @@ func printInfoProperty(out io.Writer, name, value string, labelWidth int) {
7373
}
7474

7575
func fetchInfo(url string) (gameInfo, error) {
76-
url = baseURL(url, isSSL(url)) + "/info"
76+
url = baseURL(url) + "/info"
7777
res, err := http.Get(url)
7878
if err != nil || res.StatusCode != http.StatusOK {
7979
return gameInfo{}, cli.Error("Couldn't access %s.", url)
8080
}
81-
if !external.HasContentType(res.Header, "application/json") {
81+
if !util.HasContentType(res.Header, "application/json") {
8282
return gameInfo{}, cli.Error("%s doesn't return JSON.", url)
8383
}
8484
defer res.Body.Close()

commands/new.go

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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 {
182185
func 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
223226
var 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+
357374
func 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

Comments
 (0)