-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
105 lines (82 loc) · 2.35 KB
/
main.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package main
import (
"context"
"time"
"github.com/Noah-Huppert/kube-git-deploy/api/config"
"github.com/Noah-Huppert/kube-git-deploy/api/jobs"
"github.com/Noah-Huppert/kube-git-deploy/api/models"
"github.com/Noah-Huppert/kube-git-deploy/api/server"
"github.com/Noah-Huppert/golog"
etcd "go.etcd.io/etcd/client"
)
func main() {
// Get context
ctx := context.Background()
// Setup logger
logger := golog.NewStdLogger("api")
// Load configuration
cfg, err := config.NewConfig()
if err != nil {
logger.Fatalf("error loading configuration: %s", err.Error())
}
// Connect to Ectd
etcdClient, err := etcd.New(etcd.Config{
Endpoints: []string{cfg.EtcdEndpoint},
Transport: etcd.DefaultTransport,
HeaderTimeoutPerRequest: time.Second,
})
if err != nil {
logger.Fatalf("error connecting to Etcd: %s", err.Error())
}
etcdKV := etcd.NewKeysAPI(etcdClient)
_, err = etcdKV.Set(ctx, "/ping", "pong", nil)
if err != nil {
logger.Fatalf("error testing Etcd connection: %s", err.Error())
}
// Create initial keys
_, err = etcdKV.Set(ctx, models.KeyDirRepositories, "",
&etcd.SetOptions{
Dir: true,
PrevExist: etcd.PrevNoExist,
})
if err != nil && err.(etcd.Error).Code != etcd.ErrorCodeNodeExist {
logger.Fatalf("error creating initial empty tracked GitHub "+
"repositories key: %s", err.Error())
}
// Create JobRunner
jobRunner := jobs.NewJobRunner(ctx, logger.GetChild("job_runner"),
etcdKV)
go func() {
logger.Info("Starting job runner")
jobRunner.Run()
}()
// Run HTTP servers
serverReturns := make(chan string)
go func() {
// Private
logger.Infof("Starting private HTTP server on :%d",
cfg.PrivateHTTPPort)
privServer := server.NewPrivateServer(ctx, logger, cfg, etcdKV)
err = privServer.Run()
if err != nil {
logger.Fatalf("error while running private HTTP server: %s", err.Error())
}
serverReturns <- "private"
}()
go func() {
// Public
logger.Infof("Starting public HTTP server on %s",
cfg.PublicHTTPHost)
pubServer := server.NewPublicServer(ctx, logger, cfg, etcdKV,
jobRunner)
err = pubServer.Run()
if err != nil {
logger.Fatalf("error while running public HTTP server: %s", err.Error())
}
serverReturns <- "public"
}()
// Wait for both servers to stop
for i := 0; i < 2; i++ {
logger.Infof("%s server stopped", <-serverReturns)
}
}