forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

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).

anirudh.fi d5f7bdf7 bc6ad081

verified
Changed files
+31 -1
.air
knotserver
+1 -1
.air/knotserver.toml
···
[build]
-
cmd = "go build -o .bin/knot ./cmd/knotserver/main.go"
+
cmd = 'go build -ldflags "-X tangled.sh/tangled.sh/core/knotserver.version=$(git describe --tags --long)" -o .bin/knot ./cmd/knotserver/main.go'
bin = ".bin/knot"
root = "."
+30
knotserver/handler.go
···
"fmt"
"log/slog"
"net/http"
+
"runtime/debug"
"github.com/go-chi/chi/v5"
"tangled.sh/tangled.sh/core/jetstream"
···
}
r.Get("/", h.Index)
+
r.Get("/version", h.Version)
r.Route("/{did}", func(r chi.Router) {
// Repo routes
r.Route("/{name}", func(r chi.Router) {
···
return r, nil
}
+
+
// version is set during build time.
+
var version string
+
+
func (h *Handle) Version(w http.ResponseWriter, r *http.Request) {
+
if version == "" {
+
info, ok := debug.ReadBuildInfo()
+
if !ok {
+
http.Error(w, "failed to read build info", http.StatusInternalServerError)
+
return
+
}
+
+
var modVer string
+
for _, mod := range info.Deps {
+
if mod.Path == "tangled.sh/tangled.sh/knotserver" {
+
version = mod.Version
+
break
+
}
+
}
+
+
if modVer == "" {
+
version = "unknown"
+
}
+
}
+
+
w.Header().Set("Content-Type", "text/plain")
+
fmt.Fprintf(w, "knotserver/%s", version)
+
}