forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 1.1 kB view raw
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}