add /version api

This commit is contained in:
criyle 2020-07-23 22:43:36 -07:00
parent 20d2815e86
commit 716c2cdc4e
7 changed files with 59 additions and 1 deletions

View File

@ -4,7 +4,7 @@ on:
branches: [master] branches: [master]
jobs: jobs:
build: build:
name: Build name: Build-Linux
strategy: strategy:
matrix: matrix:
GOARCH: [amd64] GOARCH: [amd64]
@ -22,6 +22,7 @@ jobs:
GOOS: linux GOOS: linux
GOARCH: ${{ matrix.GOARCH }} GOARCH: ${{ matrix.GOARCH }}
run: | run: |
go generate ./cmd/executorserver
go build -o executorserver ./cmd/executorserver go build -o executorserver ./cmd/executorserver
- name: Build shared objects - name: Build shared objects
env: env:
@ -58,6 +59,7 @@ jobs:
run: go mod download run: go mod download
- name: Build on Windows - name: Build on Windows
run: | run: |
go generate ./cmd/executorserver
go build -o executorserver.exe ./cmd/executorserver go build -o executorserver.exe ./cmd/executorserver
go build -buildmode=c-shared -o executorserver.dll ./cmd/ffi go build -buildmode=c-shared -o executorserver.dll ./cmd/ffi
- name: Upload executorserver.exe on Windows - name: Upload executorserver.exe on Windows
@ -83,6 +85,7 @@ jobs:
run: go mod download run: go mod download
- name: Build on MacOS - name: Build on MacOS
run: | run: |
go generate ./cmd/executorserver
go build -o executorserver ./cmd/executorserver go build -o executorserver ./cmd/executorserver
go build -buildmode=c-shared -o executorserver.dylib ./cmd/ffi go build -buildmode=c-shared -o executorserver.dylib ./cmd/ffi
- name: Upload executorserver - name: Upload executorserver

View File

@ -30,6 +30,7 @@ A rest service to run program in restricted environment and it is basically a wr
- /ws WebSocket for /run - /ws WebSocket for /run
- /metrics prometheus metrics (specifies `METRICS=1` environment variable to enable metrics) - /metrics prometheus metrics (specifies `METRICS=1` environment variable to enable metrics)
- /debug (specifies `DEBUG=1` environment variable to enable go runtime debug endpoint) - /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 ### Install & Run Developing Server

View File

@ -2,6 +2,7 @@ package main
import ( import (
"net/http" "net/http"
"runtime"
"github.com/criyle/go-judge/cmd/executorserver/model" "github.com/criyle/go-judge/cmd/executorserver/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -34,3 +35,12 @@ func handleRun(c *gin.Context) {
} }
c.JSON(http.StatusOK, model.ConvertResponse(rt).Results) 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,
})
}

View File

@ -0,0 +1,3 @@
package main
//go:generate go run genversion.go

View File

@ -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)
}
}

View File

@ -171,6 +171,9 @@ func main() {
p.Use(r) p.Use(r)
} }
// Version handle
r.GET("/version", handleVersion)
// Add auth token // Add auth token
if *token != "" { if *token != "" {
r.Use(tokenAuth(*token)) r.Use(tokenAuth(*token))

View File

@ -0,0 +1,5 @@
// Code generated by go generate; DO NOT EDIT.
package main
const Version = `v0.6.4-1-g20d2815`