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