From efad8fdb67f55ff084095be8690350b7a7801aca Mon Sep 17 00:00:00 2001 From: Anirudh Oppiliappan Date: Tue, 25 Mar 2025 11:28:05 +0200 Subject: [PATCH] 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). --- .air/knotserver.toml | 2 +- knotserver/handler.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/.air/knotserver.toml b/.air/knotserver.toml index d0d874c0..4b1164e0 100644 --- a/.air/knotserver.toml +++ b/.air/knotserver.toml @@ -1,5 +1,5 @@ [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 = "." diff --git a/knotserver/handler.go b/knotserver/handler.go index d64fe27d..0d372081 100644 --- a/knotserver/handler.go +++ b/knotserver/handler.go @@ -5,6 +5,7 @@ import ( "fmt" "log/slog" "net/http" + "runtime/debug" "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/jetstream" @@ -66,6 +67,7 @@ func Setup(ctx context.Context, c *config.Config, db *db.DB, e *rbac.Enforcer, j } 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) { @@ -124,3 +126,31 @@ func Setup(ctx context.Context, c *config.Config, db *db.DB, e *rbac.Enforcer, j 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) +} -- 2.51.2