forked from tangled.org/core
this repo has no description

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

Changed files
+31 -1
.air
knotserver
+1 -1
.air/knotserver.toml
···
[build]
-
cmd = "go build -o .bin/knot ./cmd/knotserver/main.go"
bin = ".bin/knot"
root = "."
···
[build]
+
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"
"github.com/go-chi/chi/v5"
"tangled.sh/tangled.sh/core/jetstream"
···
}
r.Get("/", h.Index)
r.Route("/{did}", func(r chi.Router) {
// Repo routes
r.Route("/{name}", func(r chi.Router) {
···
return r, nil
}
···
"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)
+
}