From 716c2cdc4ed51faae5d3df7316e2d207e1759326 Mon Sep 17 00:00:00 2001 From: criyle Date: Thu, 23 Jul 2020 22:43:36 -0700 Subject: [PATCH] add /version api --- .github/workflows/build.yml | 5 ++++- README.md | 1 + cmd/executorserver/cmd_handler.go | 10 ++++++++++ cmd/executorserver/gen.go | 3 +++ cmd/executorserver/genversion.go | 33 +++++++++++++++++++++++++++++++ cmd/executorserver/main.go | 3 +++ cmd/executorserver/version.go | 5 +++++ 7 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 cmd/executorserver/gen.go create mode 100644 cmd/executorserver/genversion.go create mode 100644 cmd/executorserver/version.go diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a215960..d3e5c6a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: branches: [master] jobs: build: - name: Build + name: Build-Linux strategy: matrix: GOARCH: [amd64] @@ -22,6 +22,7 @@ jobs: GOOS: linux GOARCH: ${{ matrix.GOARCH }} run: | + go generate ./cmd/executorserver go build -o executorserver ./cmd/executorserver - name: Build shared objects env: @@ -58,6 +59,7 @@ jobs: run: go mod download - name: Build on Windows run: | + go generate ./cmd/executorserver go build -o executorserver.exe ./cmd/executorserver go build -buildmode=c-shared -o executorserver.dll ./cmd/ffi - name: Upload executorserver.exe on Windows @@ -83,6 +85,7 @@ jobs: run: go mod download - name: Build on MacOS run: | + go generate ./cmd/executorserver go build -o executorserver ./cmd/executorserver go build -buildmode=c-shared -o executorserver.dylib ./cmd/ffi - name: Upload executorserver diff --git a/README.md b/README.md index c0e8c5c..f96afe2 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ A rest service to run program in restricted environment and it is basically a wr - /ws WebSocket for /run - /metrics prometheus metrics (specifies `METRICS=1` environment variable to enable metrics) - /debug (specifies `DEBUG=1` environment variable to enable go runtime debug endpoint) +- /version gets build git version (e.g. `v0.6.4-1-g20d2815`) together with runtime information (go version, os, platform) ### Install & Run Developing Server diff --git a/cmd/executorserver/cmd_handler.go b/cmd/executorserver/cmd_handler.go index 9797700..de9f078 100644 --- a/cmd/executorserver/cmd_handler.go +++ b/cmd/executorserver/cmd_handler.go @@ -2,6 +2,7 @@ package main import ( "net/http" + "runtime" "github.com/criyle/go-judge/cmd/executorserver/model" "github.com/gin-gonic/gin" @@ -34,3 +35,12 @@ func handleRun(c *gin.Context) { } c.JSON(http.StatusOK, model.ConvertResponse(rt).Results) } + +func handleVersion(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "buildVersion": Version, + "goVersion": runtime.Version(), + "platform": runtime.GOARCH, + "os": runtime.GOOS, + }) +} diff --git a/cmd/executorserver/gen.go b/cmd/executorserver/gen.go new file mode 100644 index 0000000..40cacfc --- /dev/null +++ b/cmd/executorserver/gen.go @@ -0,0 +1,3 @@ +package main + +//go:generate go run genversion.go diff --git a/cmd/executorserver/genversion.go b/cmd/executorserver/genversion.go new file mode 100644 index 0000000..1014b0b --- /dev/null +++ b/cmd/executorserver/genversion.go @@ -0,0 +1,33 @@ +// +build ignore + +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "log" + "os/exec" + "strings" +) + +func main() { + var ret bytes.Buffer + c := exec.Command("git", "describe", "--tags") + c.Stdout = &ret + + if err := c.Run(); err != nil { + log.Fatalln("run git describe", err) + } + + var buf bytes.Buffer + fmt.Fprintln(&buf, "// Code generated by go generate; DO NOT EDIT.") + fmt.Fprintln(&buf) + fmt.Fprintln(&buf, "package main") + fmt.Fprintln(&buf) + fmt.Fprintf(&buf, "const Version = `%s`", strings.TrimSpace(ret.String())) + + if err := ioutil.WriteFile("version.go", buf.Bytes(), 0644); err != nil { + log.Fatalln("write file", err) + } +} diff --git a/cmd/executorserver/main.go b/cmd/executorserver/main.go index 8985757..a479b77 100644 --- a/cmd/executorserver/main.go +++ b/cmd/executorserver/main.go @@ -171,6 +171,9 @@ func main() { p.Use(r) } + // Version handle + r.GET("/version", handleVersion) + // Add auth token if *token != "" { r.Use(tokenAuth(*token)) diff --git a/cmd/executorserver/version.go b/cmd/executorserver/version.go new file mode 100644 index 0000000..e6cbc12 --- /dev/null +++ b/cmd/executorserver/version.go @@ -0,0 +1,5 @@ +// Code generated by go generate; DO NOT EDIT. + +package main + +const Version = `v0.6.4-1-g20d2815` \ No newline at end of file