diff --git a/backend/go.mod b/backend/go.mod new file mode 100644 index 0000000..b353af7 --- /dev/null +++ b/backend/go.mod @@ -0,0 +1,3 @@ +module git.chandlerswift.com/chandlerswift/fishfryfinder + +go 1.23.0 diff --git a/backend/main.go b/backend/main.go new file mode 100644 index 0000000..949998e --- /dev/null +++ b/backend/main.go @@ -0,0 +1,64 @@ +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) + } +}