feat: footer 显示 Git 提交版本与编译时间(-ldflags 注入 buildinfo)

This commit is contained in:
2026-08-27 20:14:28 +08:00
parent 443eccb8a6
commit 0f1dc7969d
5 files changed
+35 -1

No files matched your search

+25
View File
@@ -0,0 +1,25 @@
// Package buildinfo 保存编译时通过 -ldflags -X 注入的版本信息,
// 部署时由 install_linux.sh 注入 Git 提交哈希与编译时间。
package buildinfo
import "fmt"
// Commit 是编译时的 Git 短提交哈希(-X go_blog/buildinfo.Commit=<sha>)。
// 未注入时回退为 "dev"。
var Commit string
// BuildTime 是编译时间(UTC-X go_blog/buildinfo.BuildTime=<time>)。
// 未注入时回退为 "unknown"。
var BuildTime string
// String 返回展示用的版本字符串,如 "v443eccb · 2026-08-27T12:00:00Z"。
func String() string {
commit, buildTime := Commit, BuildTime
if commit == "" {
commit = "dev"
}
if buildTime == "" {
buildTime = "unknown"
}
return fmt.Sprintf("v%s · %s", commit, buildTime)
}
+2
View File
@@ -49,6 +49,7 @@ func DefaultData(c *gin.Context) gin.H {
siteFooterText, _ := c.Get("site_footer_text")
navLinks, _ := c.Get("nav_links")
csrfToken, _ := c.Get("csrf_token")
buildInfo, _ := c.Get("build_info")
return gin.H{
"Tr": tr,
@@ -71,6 +72,7 @@ func DefaultData(c *gin.Context) gin.H {
"SiteFooterText": siteFooterText,
"NavLinks": navLinks,
"CSRFToken": csrfToken,
"BuildInfo": buildInfo,
}
}
+1 -1
View File
@@ -22,7 +22,7 @@ echo "拉取最新代码..."
git pull
echo "编译 Go 程序..."
go build -o "${BINARY_NAME}" .
go build -ldflags "-X go_blog/buildinfo.Commit=$(git rev-parse --short HEAD) -X go_blog/buildinfo.BuildTime=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" -o "${BINARY_NAME}" .
echo "检查系统用户..."
if ! id -u "${SERVICE_USER}" >/dev/null 2>&1; then
+4
View File
@@ -8,6 +8,7 @@ import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"go_blog/buildinfo"
"go_blog/i18n"
"go_blog/models"
)
@@ -224,6 +225,9 @@ func SetUserContext(db *gorm.DB) gin.HandlerFunc {
navLinks := models.GetNavLinks()
c.Set("nav_links", navLinks)
// --- 构建信息(编译时注入的 Git 版本与编译时间)---
c.Set("build_info", buildinfo.String())
c.Next()
}
}
+3
View File
@@ -173,6 +173,9 @@
<div class="text-center text-gray-500 text-xs">
{{if .SiteFooterText}}{{.SiteFooterText}}{{else}}{{index .Tr "footer_text"}}{{end}}
</div>
<div class="text-center text-gray-400 text-[10px] mt-1">
{{.BuildInfo}}
</div>
</div>
</footer>
<script>