@@ -7,34 +7,25 @@ import (
77 "strings"
88
99 "github.com/Bananenpro/cli"
10+ "github.com/Bananenpro/pflag"
1011 "github.com/code-game-project/codegame-cli-go/new/client"
1112 "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"
1315)
1416
1517func 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-
2818 pflag .Usage = func () {
2919 fmt .Fprintf (os .Stderr , "Usage: %s <command> [...]\n " , os .Args [0 ])
3020 fmt .Fprintln (os .Stderr , "\n Commands:" )
3121 fmt .Fprintln (os .Stderr , "\t new \t Create a new project." )
22+ fmt .Fprintln (os .Stderr , "\t run \t Run the current project." )
3223 fmt .Fprintln (os .Stderr , "\n Options:" )
3324 pflag .PrintDefaults ()
25+ fmt .Fprintln (os .Stderr , "This program expects to be executed inside of the project directory." )
3426 }
3527
36- pflag .Parse ()
37- if pflag .NArg () < 2 {
28+ if len (os .Args ) < 2 {
3829 pflag .Usage ()
3930 os .Exit (1 )
4031 }
@@ -45,11 +36,13 @@ func main() {
4536 }
4637 projectName := filepath .Base (workingDir )
4738
48- command := strings .ToLower (pflag . Arg ( 0 ) )
39+ command := strings .ToLower (os . Args [ 1 ] )
4940
5041 switch command {
5142 case "new" :
52- err = new (projectName , gameName , url , libraryVersion , generateWrappers )
43+ err = newProject (projectName )
44+ case "run" :
45+ err = runProject ()
5346 default :
5447 err = cli .Error ("Unknown command: %s\n " , command )
5548 }
@@ -58,8 +51,33 @@ func main() {
5851 }
5952}
6053
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 )
6381
6482 var err error
6583 switch projectType {
@@ -73,3 +91,47 @@ func new(projectName, gameName, url, libraryVersion string, generateWrappers boo
7391
7492 return err
7593}
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