main.go
1052 bytes
1package main
2
3import (
4 "log/slog"
5 "net/http"
6 "os"
7)
8
9func main() {
10 slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, nil)))
11
12 config, err := loadConfig()
13 if err != nil {
14 slog.Error("load configuration", "error", err)
15 os.Exit(1)
16 }
17
18 database, err := openDatabase(config.databasePath)
19 if err != nil {
20 slog.Error("open database", "error", err)
21 os.Exit(1)
22 }
23 defer func() {
24 if err := database.close(); err != nil {
25 slog.Error("close database", "error", err)
26 }
27 }()
28
29 statuses := newBuildStatuses(database)
30 jobs := make(chan buildJob, 100)
31 go runWorker(config, jobs, statuses)
32
33 server := http.NewServeMux()
34 server.HandleFunc("POST /build", buildHandler(jobs, statuses))
35 server.HandleFunc("POST /build-statuses", buildStatusHandler(statuses))
36 slog.Info("worker started", "address", ":8080", "registry", config.registry, "buildkit_address", config.buildkitAddress, "database_path", config.databasePath)
37 if err := http.ListenAndServe(":8080", server); err != nil {
38 slog.Error("serve HTTP", "error", err)
39 os.Exit(1)
40 }
41}