fishfryfinder/backend/main.go

65 lines
1.4 KiB
Go

package main
import (
"embed"
"encoding/json"
"flag"
"fmt"
"io/fs"
"net/http"
"runtime/debug"
)
//go:embed dist/*
var embeddedFiles embed.FS
var buildInfoJSON []byte
func main() {
port := flag.Int("port", 8000, "Port to listen on")
flag.Parse()
frontend, err := fs.Sub(embeddedFiles, "dist")
if err != nil {
panic(err)
}
http.Handle("GET /", http.FileServer(http.FS(frontend)))
initializeBuildInfoJSON()
http.HandleFunc("GET /api/v1/version", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write(buildInfoJSON)
})
fmt.Printf("Serving on :%v\n", *port)
panic(http.ListenAndServe(fmt.Sprintf(":%v", *port), nil))
}
func initializeBuildInfoJSON() {
rawBuildInfo, _ := debug.ReadBuildInfo()
var revision, time string
var dirty bool
for _, buildSetting := range rawBuildInfo.Settings {
if buildSetting.Key == "vcs.revision" {
revision = buildSetting.Value
} else if buildSetting.Key == "vcs.time" {
time = buildSetting.Value
} else if buildSetting.Key == "vcs.modified" {
dirty = buildSetting.Value == "true"
}
}
buildInfo := map[string]interface{}{
"GitRev": revision,
"GitDirty": dirty,
"GitTime": time,
"GoVersion": rawBuildInfo.GoVersion,
"AllBuildInfo": rawBuildInfo.String(),
}
var err error
buildInfoJSON, err = json.Marshal(buildInfo)
if err != nil {
panic(err)
}
}