Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).

knotserver: return the build version at /version

Version is currently set during build time using ldflags, but if not, it
will attempt to pick up the Go module version (if installed via 'go
install' or 'go get', for example).

+31 -1
+1 -1
.air/knotserver.toml
··· 1 1 [build] 2 - cmd = "go build -o .bin/knot ./cmd/knotserver/main.go" 2 + cmd = 'go build -ldflags "-X tangled.sh/tangled.sh/core/knotserver.version=$(git describe --tags --long)" -o .bin/knot ./cmd/knotserver/main.go' 3 3 bin = ".bin/knot" 4 4 root = "." 5 5
+30
knotserver/handler.go
··· 5 5 "fmt" 6 6 "log/slog" 7 7 "net/http" 8 + "runtime/debug" 8 9 9 10 "github.com/go-chi/chi/v5" 10 11 "tangled.sh/tangled.sh/core/jetstream" ··· 67 66 } 68 67 69 68 r.Get("/", h.Index) 69 + r.Get("/version", h.Version) 70 70 r.Route("/{did}", func(r chi.Router) { 71 71 // Repo routes 72 72 r.Route("/{name}", func(r chi.Router) { ··· 125 123 r.Get("/keys", h.Keys) 126 124 127 125 return r, nil 126 + } 127 + 128 + // version is set during build time. 129 + var version string 130 + 131 + func (h *Handle) Version(w http.ResponseWriter, r *http.Request) { 132 + if version == "" { 133 + info, ok := debug.ReadBuildInfo() 134 + if !ok { 135 + http.Error(w, "failed to read build info", http.StatusInternalServerError) 136 + return 137 + } 138 + 139 + var modVer string 140 + for _, mod := range info.Deps { 141 + if mod.Path == "tangled.sh/tangled.sh/knotserver" { 142 + version = mod.Version 143 + break 144 + } 145 + } 146 + 147 + if modVer == "" { 148 + version = "unknown" 149 + } 150 + } 151 + 152 + w.Header().Set("Content-Type", "text/plain") 153 + fmt.Fprintf(w, "knotserver/%s", version) 128 154 }