forked from remind101/conveyor
/
server.go
66 lines (56 loc) · 1.3 KB
/
server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import (
"net/http"
"os"
"os/signal"
"syscall"
"github.com/codegangsta/cli"
"github.com/remind101/conveyor"
)
// flags for the http server.
var serverFlags = []cli.Flag{
cli.StringFlag{
Name: "port",
Value: "8080",
Usage: "Port to run the server on",
EnvVar: "PORT",
},
cli.StringFlag{
Name: "github.secret",
Value: "",
Usage: "Shared secret used by GitHub to sign webhook payloads. This secret will be used to verify that the request came from GitHub.",
EnvVar: "GITHUB_SECRET",
},
cli.StringFlag{
Name: "slack.token",
Value: "",
Usage: "Secret shared with Slack to verify slash command webhooks",
EnvVar: "SLACK_TOKEN",
},
}
var cmdServer = cli.Command{
Name: "server",
Usage: "Run only the http server component.",
Action: serverAction,
Flags: append(sharedFlags, serverFlags...),
}
func serverAction(c *cli.Context) {
q := newBuildQueue(c)
runServer(q, c)
}
func runServer(q conveyor.BuildQueue, c *cli.Context) error {
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
port := c.String("port")
info("Starting server on %s\n", port)
errCh := make(chan error)
go func() {
errCh <- http.ListenAndServe(":"+port, newServer(q, c))
}()
select {
case err := <-errCh:
return err
case <-quit:
return nil
}
}