65 lines
1.4 KiB
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)
|
||
|
}
|
||
|
}
|