Skip to content

Commit 686ece1

Browse files
committed
Pass library version as a command line argument
1 parent b7626a5 commit 686ece1

File tree

3 files changed

+46
-29
lines changed

3 files changed

+46
-29
lines changed

main.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ func main() {
1818
var url string
1919
pflag.StringVar(&url, "url", "", "The URL of the game. (required for clients)")
2020

21-
var cgVersion string
22-
pflag.StringVar(&cgVersion, "cg-version", "", "The CodeGame protocol version of the game, e.g. 0.6 (required for clients)")
21+
var supportsWrappers bool
22+
pflag.BoolVar(&supportsWrappers, "supports-wrappers", false, "Whether the wrappers are supported. (required for clients)")
2323

24-
var cgeVersion string
25-
pflag.StringVar(&cgeVersion, "cge-version", "", "The CGE version of the game, e.g. 0.3 (required for clients)")
24+
var libraryVersion string
25+
pflag.StringVar(&libraryVersion, "library-version", "latest", "The version of the Go library to use, e.g. 0.8")
2626

2727
pflag.Usage = func() {
2828
fmt.Fprintf(os.Stderr, "Usage: %s <command> [...]\n", os.Args[0])
@@ -48,7 +48,7 @@ func main() {
4848

4949
switch command {
5050
case "new":
51-
err = new(projectName, gameName, url, cgVersion, cgeVersion)
51+
err = new(projectName, gameName, url, libraryVersion, supportsWrappers)
5252
default:
5353
err = fmt.Errorf("Unknown command: %s\n", command)
5454
}
@@ -58,15 +58,15 @@ func main() {
5858
}
5959
}
6060

61-
func new(projectName, gameName, url, cgVersion, cgeVersion string) error {
61+
func new(projectName, gameName, url, libraryVersion string, supportsWrappers bool) error {
6262
projectType := strings.ToLower(pflag.Arg(1))
6363

6464
var err error
6565
switch projectType {
6666
case "client":
67-
err = client.CreateNewClient(projectName, gameName, url, cgVersion, cgeVersion)
67+
err = client.CreateNewClient(projectName, gameName, url, libraryVersion, supportsWrappers)
6868
case "server":
69-
err = server.CreateNewServer(projectName)
69+
err = server.CreateNewServer(projectName, libraryVersion)
7070
default:
7171
err = fmt.Errorf("Unknown project type: %s\n", projectType)
7272
}

new/client/client.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var goClientWrapperGameTemplate string
2424
//go:embed templates/wrappers/events.go.tmpl
2525
var goClientWrapperEventsTemplate string
2626

27-
func CreateNewClient(projectName, gameName, serverURL, cgVersion, cgeVersion string) error {
27+
func CreateNewClient(projectName, gameName, serverURL, libraryVersion string, supportsWrappers bool) error {
2828
module, err := cli.Input("Project module path:")
2929
if err != nil {
3030
return err
@@ -38,18 +38,13 @@ func CreateNewClient(projectName, gameName, serverURL, cgVersion, cgeVersion str
3838
return err
3939
}
4040

41-
libraryURL, libraryTag, err := getGoClientLibraryURL(projectName, cgVersion)
41+
libraryURL, libraryTag, err := getGoClientLibraryURL(libraryVersion)
4242
if err != nil {
4343
return err
4444
}
4545

46-
cgeMajor, cgeMinor, _, err := external.ParseVersion(cgeVersion)
47-
if err != nil {
48-
return cli.Error(err.Error())
49-
}
50-
5146
wrappers := false
52-
if cgeMajor > 0 || cgeMinor >= 3 {
47+
if supportsWrappers {
5348
wrappers, err = cli.YesNo("Do you want to generate helper functions?", true)
5449
if err != nil {
5550
return err
@@ -67,7 +62,7 @@ func CreateNewClient(projectName, gameName, serverURL, cgVersion, cgeVersion str
6762
cli.Finish()
6863

6964
cli.Begin("Creating project template...")
70-
err = createGoClientTemplate(libraryTag, projectName, module, gameName, serverURL, libraryURL, cgeVersion, wrappers)
65+
err = createGoClientTemplate(projectName, module, gameName, serverURL, libraryURL, wrappers)
7166
if err != nil {
7267
return err
7368
}
@@ -98,17 +93,20 @@ func CreateNewClient(projectName, gameName, serverURL, cgVersion, cgeVersion str
9893
return nil
9994
}
10095

101-
func createGoClientTemplate(libraryTag, projectName, modulePath, gameName, serverURL, libraryURL, cgeVersion string, wrappers bool) error {
96+
func createGoClientTemplate(projectName, modulePath, gameName, serverURL, libraryURL string, wrappers bool) error {
10297
if !wrappers {
10398
return execGoClientMainTemplate(projectName, serverURL, libraryURL)
10499
}
105100

101+
cgeVersion, err := external.GetCGEVersion(util.BaseURL(serverURL, util.IsSSL(serverURL)))
102+
if err != nil {
103+
return err
104+
}
105+
106106
return execGoClientWrappersTemplate(projectName, modulePath, gameName, serverURL, libraryURL, cgeVersion)
107107
}
108108

109-
func getGoClientLibraryURL(projectName, cgVersion string) (url string, tag string, err error) {
110-
clientVersion := external.ClientVersionFromCGVersion("code-game-project", "go-client", cgVersion)
111-
109+
func getGoClientLibraryURL(clientVersion string) (url string, tag string, err error) {
112110
if clientVersion == "latest" {
113111
var err error
114112
clientVersion, err = external.LatestGithubTag("code-game-project", "go-client")

new/server/server.go

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var goServerCGETemplate string
2424
//go:embed templates/event_definitions.go.tmpl
2525
var goServerEventsTemplate string
2626

27-
func CreateNewServer(projectName string) error {
27+
func CreateNewServer(projectName, libraryVersion string) error {
2828
module, err := cli.Input("Project module path:")
2929
if err != nil {
3030
return err
@@ -44,12 +44,22 @@ func CreateNewServer(projectName string) error {
4444
return err
4545
}
4646

47-
libraryURL, err := getServerLibraryURL()
47+
libraryURL, libraryTag, err := getServerLibraryURL(libraryVersion)
4848
if err != nil {
4949
return err
5050
}
5151
cli.Finish()
5252

53+
cli.Begin("Installing correct go-server version...")
54+
out, err = external.ExecuteHidden("go", "get", fmt.Sprintf("%s@%s", libraryURL, libraryTag))
55+
if err != nil {
56+
if out != "" {
57+
cli.Error(out)
58+
}
59+
return err
60+
}
61+
cli.Finish()
62+
5363
cli.Begin("Creating project template...")
5464
err = createGoServerTemplate(projectName, module, cgeVersion, libraryURL)
5565
if err != nil {
@@ -126,16 +136,25 @@ func executeGoServerTemplate(templateText, fileName, projectName, cgeVersion, li
126136
})
127137
}
128138

129-
func getServerLibraryURL() (string, error) {
130-
tag, err := external.LatestGithubTag("code-game-project", "go-server")
131-
if err != nil {
132-
return "", err
139+
func getServerLibraryURL(serverVersion string) (url string, tag string, err error) {
140+
if serverVersion == "latest" {
141+
var err error
142+
serverVersion, err = external.LatestGithubTag("code-game-project", "go-server")
143+
if err != nil {
144+
return "", "", err
145+
}
146+
serverVersion = strings.TrimPrefix(strings.Join(strings.Split(serverVersion, ".")[:2], "."), "v")
133147
}
134-
majorVersion := strings.TrimPrefix(strings.Split(tag, ".")[0], "v")
135148

149+
majorVersion := strings.Split(serverVersion, ".")[0]
150+
tag, err = external.GithubTagFromVersion("code-game-project", "go-server", serverVersion)
151+
if err != nil {
152+
return "", "", err
153+
}
136154
path := "github.com/code-game-project/go-server/cg"
137155
if majorVersion != "0" && majorVersion != "1" {
138156
path = fmt.Sprintf("github.com/code-game-project/go-server/v%s/cg", majorVersion)
139157
}
140-
return path, nil
158+
159+
return path, tag, nil
141160
}

0 commit comments

Comments
 (0)