@@ -7,34 +7,25 @@ import (
7
7
"strings"
8
8
9
9
"github.com/Bananenpro/cli"
10
+ "github.com/Bananenpro/pflag"
10
11
"github.com/code-game-project/codegame-cli-go/new/client"
11
12
"github.com/code-game-project/codegame-cli-go/new/server"
12
- "github.com/spf13/pflag"
13
+ "github.com/code-game-project/codegame-cli-go/run"
14
+ "github.com/code-game-project/codegame-cli/util/cgfile"
13
15
)
14
16
15
17
func main () {
16
- var gameName string
17
- pflag .StringVar (& gameName , "game-name" , "" , "The name of the game. (required for clients)" )
18
-
19
- var url string
20
- pflag .StringVar (& url , "url" , "" , "The URL of the game. (required for clients)" )
21
-
22
- var generateWrappers bool
23
- pflag .BoolVar (& generateWrappers , "generate-wrappers" , false , "Whether to generate helper functions." )
24
-
25
- var libraryVersion string
26
- pflag .StringVar (& libraryVersion , "library-version" , "latest" , "The version of the Go library to use, e.g. 0.8" )
27
-
28
18
pflag .Usage = func () {
29
19
fmt .Fprintf (os .Stderr , "Usage: %s <command> [...]\n " , os .Args [0 ])
30
20
fmt .Fprintln (os .Stderr , "\n Commands:" )
31
21
fmt .Fprintln (os .Stderr , "\t new \t Create a new project." )
22
+ fmt .Fprintln (os .Stderr , "\t run \t Run the current project." )
32
23
fmt .Fprintln (os .Stderr , "\n Options:" )
33
24
pflag .PrintDefaults ()
25
+ fmt .Fprintln (os .Stderr , "This program expects to be executed inside of the project directory." )
34
26
}
35
27
36
- pflag .Parse ()
37
- if pflag .NArg () < 2 {
28
+ if len (os .Args ) < 2 {
38
29
pflag .Usage ()
39
30
os .Exit (1 )
40
31
}
@@ -45,11 +36,13 @@ func main() {
45
36
}
46
37
projectName := filepath .Base (workingDir )
47
38
48
- command := strings .ToLower (pflag . Arg ( 0 ) )
39
+ command := strings .ToLower (os . Args [ 1 ] )
49
40
50
41
switch command {
51
42
case "new" :
52
- err = new (projectName , gameName , url , libraryVersion , generateWrappers )
43
+ err = newProject (projectName )
44
+ case "run" :
45
+ err = runProject ()
53
46
default :
54
47
err = cli .Error ("Unknown command: %s\n " , command )
55
48
}
@@ -58,8 +51,33 @@ func main() {
58
51
}
59
52
}
60
53
61
- func new (projectName , gameName , url , libraryVersion string , generateWrappers bool ) error {
62
- projectType := strings .ToLower (pflag .Arg (1 ))
54
+ func newProject (projectName string ) error {
55
+ flagSet := pflag .NewFlagSet ("new" , pflag .ExitOnError )
56
+
57
+ var gameName string
58
+ flagSet .StringVar (& gameName , "game-name" , "" , "The name of the game. (required for `new client`)" )
59
+
60
+ var url string
61
+ flagSet .StringVar (& url , "url" , "" , "The URL of the game. (required for `new client`)" )
62
+
63
+ var generateWrappers bool
64
+ flagSet .BoolVar (& generateWrappers , "generate-wrappers" , false , "Whether to generate helper functions. (used by `new client`)" )
65
+
66
+ var libraryVersion string
67
+ flagSet .StringVar (& libraryVersion , "library-version" , "latest" , "The version of the Go library to use, e.g. 0.8" )
68
+
69
+ flagSet .Usage = func () {
70
+ fmt .Fprintf (os .Stderr , "Usage: %s run [...]\n " , os .Args [0 ])
71
+ fmt .Fprintln (os .Stderr , "\n Options:" )
72
+ flagSet .PrintDefaults ()
73
+ }
74
+ flagSet .Parse (os .Args [2 :])
75
+
76
+ if flagSet .NArg () == 0 {
77
+ flagSet .Usage ()
78
+ os .Exit (1 )
79
+ }
80
+ projectType := flagSet .Arg (0 )
63
81
64
82
var err error
65
83
switch projectType {
@@ -73,3 +91,47 @@ func new(projectName, gameName, url, libraryVersion string, generateWrappers boo
73
91
74
92
return err
75
93
}
94
+
95
+ func runProject () error {
96
+ flagSet := pflag .NewFlagSet ("run" , pflag .ExitOnError )
97
+ flagSet .ParseErrorsWhitelist = pflag.ParseErrorsWhitelist {
98
+ UnknownFlags : true ,
99
+ PassUnknownFlagsToArgs : true ,
100
+ }
101
+
102
+ var overrideURL string
103
+ flagSet .StringVar (& overrideURL , "override-url" , "" , "The URL of the game. (required for `new client`)" )
104
+
105
+ flagSet .Usage = func () {
106
+ fmt .Fprintf (os .Stderr , "Usage: %s run [...]\n " , os .Args [0 ])
107
+ fmt .Fprintln (os .Stderr , "\n Options:" )
108
+ flagSet .PrintDefaults ()
109
+ }
110
+ flagSet .Parse (os .Args [2 :])
111
+
112
+ projectRoot , err := cgfile .FindProjectRootRelative ()
113
+ if err != nil {
114
+ return err
115
+ }
116
+
117
+ data , err := cgfile .LoadCodeGameFile (projectRoot )
118
+ if err != nil {
119
+ return err
120
+ }
121
+
122
+ url := data .URL
123
+ if overrideURL != "" {
124
+ url = overrideURL
125
+ }
126
+
127
+ switch data .Type {
128
+ case "client" :
129
+ err = run .RunClient (projectRoot , url , flagSet .Args ()... )
130
+ case "server" :
131
+ err = run .RunServer (projectRoot , flagSet .Args ()... )
132
+ default :
133
+ err = cli .Error ("Unknown project type: %s\n " , data .Type )
134
+ }
135
+
136
+ return err
137
+ }
0 commit comments