forked from
tangled.org/core
Monorepo for Tangled — https://tangled.org
1package xrpc
2
3import (
4 "fmt"
5 "net/http"
6 "runtime/debug"
7
8 "tangled.org/core/api/tangled"
9)
10
11// version is set during build time.
12var version string
13
14func (x *Xrpc) Version(w http.ResponseWriter, r *http.Request) {
15 if version == "" {
16 info, ok := debug.ReadBuildInfo()
17 if !ok {
18 http.Error(w, "failed to read build info", http.StatusInternalServerError)
19 return
20 }
21
22 var modVer string
23 var sha string
24 var modified bool
25
26 for _, mod := range info.Deps {
27 if mod.Path == "tangled.org/tangled.org/knotserver/xrpc" {
28 modVer = mod.Version
29 break
30 }
31 }
32
33 for _, setting := range info.Settings {
34 switch setting.Key {
35 case "vcs.revision":
36 sha = setting.Value
37 case "vcs.modified":
38 modified = setting.Value == "true"
39 }
40 }
41
42 if modVer == "" {
43 modVer = "unknown"
44 }
45
46 if sha == "" {
47 version = modVer
48 } else if modified {
49 version = fmt.Sprintf("%s (%s with modifications)", modVer, sha)
50 } else {
51 version = fmt.Sprintf("%s (%s)", modVer, sha)
52 }
53 }
54
55 response := tangled.KnotVersion_Output{
56 Version: version,
57 }
58
59 writeJson(w, response)
60}