Skip to content

Commit 920fa90

Browse files
committed
Do not rely on goimports for adding library imports
1 parent a26ac4d commit 920fa90

File tree

5 files changed

+91
-95
lines changed

5 files changed

+91
-95
lines changed

commands/new_go.go

Lines changed: 78 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,36 @@ var goServerCGETemplate string
2929
var goServerEventsTemplate string
3030

3131
func 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

137140
func 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
}

commands/templates/go/client/main.go.tmpl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package main
22

3+
import "{{.LibraryURL}}"
4+
35
func main() {
46
socket, err := cg.NewSocket("{{.URL}}")
57
if err != nil {

commands/templates/go/server/game.go.tmpl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package {{.PackageName}}
22

3+
import "{{.LibraryURL}}"
4+
35
type Game struct {
46
cg *cg.Game
57
}

commands/templates/go/server/main.go.tmpl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
package main
22

3+
import (
4+
"os"
5+
"strconv"
6+
7+
"{{.LibraryURL}}"
8+
"{{.ModulePath}}/{{.PackageName}}"
9+
"github.com/spf13/pflag"
10+
)
11+
312
func main() {
413
var port int
514
pflag.IntVarP(&port, "port", "p", 0, "The network port of the game server.")

go.sum

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,12 @@ github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u
1313
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
1414
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
1515
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
16-
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
1716
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
1817
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
1918
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
20-
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
2119
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
2220
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
2321
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
24-
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
2522
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
2623
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
2724
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
@@ -37,15 +34,12 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h
3734
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
3835
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
3936
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
40-
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 h1:2B5p2L5IfGiD7+b9BOoRMC6DgObAVZV+Fsp050NqXik=
4137
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
4238
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
4339
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
44-
golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w=
4540
golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
4641
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
4742
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
48-
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
4943
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
5044
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
5145
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=

0 commit comments

Comments
 (0)