feat(api): M-04 添加版本信息端点
Some checks failed
CI / Build & Test (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
CI / Release (push) Has been cancelled

- 添加 /version 端点返回版本信息
- 版本变量支持构建时 ldflags 注入
- 返回 version、commit、build_time、go_version
This commit is contained in:
phamnazage-jpg
2026-06-02 07:00:15 +08:00
parent 133da2d442
commit 28f377f2bd
2 changed files with 100 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ import (
"net/http"
"os"
"path/filepath"
"runtime"
"strconv"
"strings"
"time"
@@ -25,6 +26,13 @@ import (
"sub2api-cn-relay-manager/internal/access"
)
// 版本信息变量,在构建时通过 -ldflags 注入
var (
version = "dev"
commit = "unknown"
buildTime = "unknown"
)
type ActionSet struct {
CreateBatchImportRun func(context.Context, CreateBatchImportRunRequest) (BatchImportRunCreateResponse, error)
ListBatchImportRuns func(context.Context, ListBatchImportRunsRequest) (ListBatchImportRunsResponse, error)
@@ -327,6 +335,7 @@ func NewAPIHandler(adminToken string, actions ActionSet) http.Handler {
func NewAPIHandlerWithAuth(adminAuth AdminAuthConfig, actions ActionSet) http.Handler {
mux := http.NewServeMux()
mux.HandleFunc("GET /healthz", healthz)
mux.HandleFunc("GET /version", handleVersion)
mux.HandleFunc("GET /api/admin/session", func(w http.ResponseWriter, r *http.Request) {
handleAdminSessionState(w, r, adminAuth)
})
@@ -557,6 +566,24 @@ func healthz(w http.ResponseWriter, _ *http.Request) {
_, _ = w.Write([]byte("ok"))
}
// VersionInfo 包含版本信息响应
type VersionInfo struct {
Version string `json:"version"`
Commit string `json:"commit"`
BuildTime string `json:"build_time"`
GoVersion string `json:"go_version"`
}
func handleVersion(w http.ResponseWriter, r *http.Request) {
info := VersionInfo{
Version: version,
Commit: commit,
BuildTime: buildTime,
GoVersion: runtime.Version(),
}
writeJSON(w, http.StatusOK, info)
}
func handleCreateProviderDraft(w http.ResponseWriter, r *http.Request, fn func(context.Context, CreateProviderDraftRequest) (ProviderDraftInfo, error)) {
if fn == nil {
writeHTTPError(w, &httpError{StatusCode: http.StatusInternalServerError, Code: "server_misconfigured", Message: "create-provider-draft action is not configured"})