|
1 | 1 | package main
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "fmt" |
4 | 5 | "net"
|
5 | 6 | "strings"
|
6 | 7 |
|
7 | 8 | "github.com/src-d/engine/api"
|
8 | 9 | "github.com/src-d/engine/cmd/srcd-server/engine"
|
9 | 10 |
|
10 |
| - flags "github.com/jessevdk/go-flags" |
11 |
| - "github.com/sirupsen/logrus" |
| 11 | + "github.com/pkg/errors" |
12 | 12 | grpc "google.golang.org/grpc"
|
| 13 | + "gopkg.in/src-d/go-cli.v0" |
| 14 | + "gopkg.in/src-d/go-log.v1" |
13 | 15 | yaml "gopkg.in/yaml.v2"
|
14 | 16 | )
|
15 | 17 |
|
16 |
| -var version = "undefined" |
| 18 | +// These variables get replaced during the build |
| 19 | +var ( |
| 20 | + version = "dev" |
| 21 | + build = "dev" |
| 22 | +) |
17 | 23 |
|
18 | 24 | func main() {
|
19 |
| - var options struct { |
20 |
| - Addr string `long:"address" short:"a" default:"0.0.0.0:4242"` |
21 |
| - Workdir string `long:"workdir" short:"w" default:""` |
22 |
| - HostOS string `long:"host-os" default:""` |
23 |
| - Config string `long:"config" short:"c" default:""` |
24 |
| - } |
| 25 | + cmd := cli.New("srcd-server", version, build, "The Code as Data solution by source{d}") |
| 26 | + cmd.AddCommand(&serveCmd{}) |
25 | 27 |
|
26 |
| - _, err := flags.Parse(&options) |
27 |
| - if err != nil { |
28 |
| - logrus.Fatal(err) |
29 |
| - } |
| 28 | + cmd.RunMain() |
| 29 | +} |
30 | 30 |
|
31 |
| - workdir := strings.TrimSpace(options.Workdir) |
| 31 | +type serveCmd struct { |
| 32 | + cli.Command `name:"serve" short-description:"Start the server" long-description:"Start the server"` |
| 33 | + |
| 34 | + Addr string `long:"address" short:"a" default:"0.0.0.0:4242"` |
| 35 | + Workdir string `long:"workdir" short:"w" default:""` |
| 36 | + HostOS string `long:"host-os" default:""` |
| 37 | + Config string `long:"config" short:"c" default:""` |
| 38 | +} |
| 39 | + |
| 40 | +func (c *serveCmd) Execute(args []string) error { |
| 41 | + workdir := strings.TrimSpace(c.Workdir) |
32 | 42 | if workdir == "" {
|
33 |
| - logrus.Fatal("No work directory provided!") |
| 43 | + return fmt.Errorf("No work directory provided!") |
34 | 44 | }
|
35 | 45 |
|
36 | 46 | var config api.Config
|
37 |
| - if options.Config != "" { |
38 |
| - err = yaml.Unmarshal([]byte(options.Config), &config) |
| 47 | + if c.Config != "" { |
| 48 | + err := yaml.Unmarshal([]byte(c.Config), &config) |
39 | 49 | if err != nil {
|
40 |
| - logrus.Fatalf("Error reading --config option: %s", err) |
| 50 | + return errors.Wrapf(err, "Error reading --config option") |
41 | 51 | }
|
42 | 52 | }
|
43 | 53 | config.SetDefaults()
|
44 | 54 |
|
45 |
| - l, err := net.Listen("tcp", options.Addr) |
| 55 | + l, err := net.Listen("tcp", c.Addr) |
46 | 56 | if err != nil {
|
47 |
| - logrus.Fatal(err) |
| 57 | + return err |
48 | 58 | }
|
49 | 59 |
|
50 | 60 | srv := grpc.NewServer()
|
51 |
| - api.RegisterEngineServer(srv, engine.NewServer(version, workdir, options.HostOS, config)) |
| 61 | + api.RegisterEngineServer(srv, engine.NewServer(version, workdir, c.HostOS, config)) |
52 | 62 |
|
53 |
| - logrus.Infof("listening on %s", options.Addr) |
54 |
| - if err := srv.Serve(l); err != nil { |
55 |
| - logrus.Fatal(err) |
56 |
| - } |
| 63 | + log.Infof("listening on %s", c.Addr) |
| 64 | + return srv.Serve(l) |
57 | 65 | }
|
0 commit comments