feat: 编译时嵌入版本信息
- 添加版本显示功能 (--version 参数) - 编译时注入 Version、BuildTime、GitCommit、GoVersion、BuildEnv - 更新 Makefile 支持自动获取版本信息 - 添加 release-full 命令支持完整发布流程 - 启动时显示构建信息
This commit is contained in:
60
Makefile
60
Makefile
@@ -1,9 +1,16 @@
|
|||||||
.PHONY: all build clean run test docker-build docker-run install-dev help
|
.PHONY: all build clean run test docker-build docker-run install-dev help release
|
||||||
|
|
||||||
# 应用名称
|
# 应用名称
|
||||||
APP_NAME := sms-receiver-v2
|
APP_NAME := sms-receiver-v2
|
||||||
MAIN_FILE := main.go
|
MAIN_FILE := main.go
|
||||||
|
|
||||||
|
# 版本信息
|
||||||
|
VERSION := v2.0.0
|
||||||
|
BUILD_TIME := $(shell date +%Y-%m-%d\ %H:%M:%S)
|
||||||
|
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||||
|
GO_VERSION := $(shell go version | awk '{print $$3}')
|
||||||
|
BUILD_ENV := prod
|
||||||
|
|
||||||
# Go 配置
|
# Go 配置
|
||||||
GO := go
|
GO := go
|
||||||
GOFMT := gofmt
|
GOFMT := gofmt
|
||||||
@@ -12,7 +19,7 @@ GOTEST := go test
|
|||||||
|
|
||||||
# 构建配置
|
# 构建配置
|
||||||
BUILD_DIR := ./build
|
BUILD_DIR := ./build
|
||||||
LDFLAGS := -ldflags="-w -s"
|
LDFLAGS := -ldflags="-X 'main.Version=$(VERSION)' -X 'main.BuildTime=$(BUILD_TIME)' -X 'main.GitCommit=$(GIT_COMMIT)' -X 'main.GoVersion=$(GO_VERSION)' -X 'main.BuildEnv=$(BUILD_ENV)' -w -s"
|
||||||
|
|
||||||
# Docker 配置
|
# Docker 配置
|
||||||
DOCKER_IMAGE := sms-receiver-go
|
DOCKER_IMAGE := sms-receiver-go
|
||||||
@@ -110,3 +117,52 @@ init:
|
|||||||
else \
|
else \
|
||||||
echo "config.yaml 已存在"; \
|
echo "config.yaml 已存在"; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
## release: 发布版本(创建 tag、推送到远程、上传二进制文件)
|
||||||
|
release: clean build
|
||||||
|
@echo "正在发布版本: $(VERSION)"
|
||||||
|
@if [ -z "$(VERSION)" ]; then \
|
||||||
|
echo "错误: 请指定 VERSION,例如: make release VERSION=v2.0.0"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@git tag -a $(VERSION) -m "Release $(VERSION)" || echo "Tag 已存在,继续..."
|
||||||
|
@git push origin $(VERSION) || echo "Tag 已推送"
|
||||||
|
@echo "请在 Gitea 上手动上传二进制文件到 Release: $(VERSION)"
|
||||||
|
@echo "或者使用: make release-upload VERSION=$(VERSION)"
|
||||||
|
|
||||||
|
## release-upload: 上传二进制文件到 Gitea Release
|
||||||
|
release-upload:
|
||||||
|
@echo "上传二进制文件到 Gitea Release: $(VERSION)"
|
||||||
|
@if [ ! -f $(APP_NAME) ]; then \
|
||||||
|
echo "错误: 找不到编译文件 $(APP_NAME),请先运行 make build"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@if [ -z "$(GITEA_TOKEN)" ]; then \
|
||||||
|
echo "错误: 请设置环境变量 GITEA_TOKEN"; \
|
||||||
|
echo "用法: make release-upload VERSION=v2.0.0 GITEA_TOKEN=your_token"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@echo "正在上传 $(APP_NAME) 到 Gitea..."
|
||||||
|
@curl -X POST \
|
||||||
|
-H "Authorization: token $(GITEA_TOKEN)" \
|
||||||
|
-F "attachment=@$(APP_NAME)" \
|
||||||
|
"https://gitea.king.nyc.mn/api/v1/repos/openclaw/SmsReceiver-go/releases/$(VERSION)/assets" \
|
||||||
|
2>&1 | grep -E "(name|size|browser_download_url)" || echo "上传完成"
|
||||||
|
@echo "✅ 上传完成!"
|
||||||
|
|
||||||
|
## release-full: 完整发布流程(编译、tag、推送、上传)
|
||||||
|
release-full: clean build
|
||||||
|
@echo "完整发布流程: $(VERSION)"
|
||||||
|
@if [ -z "$(VERSION)" ] || [ -z "$(GITEA_TOKEN)" ]; then \
|
||||||
|
echo "用法: make release-full VERSION=v2.0.0 GITEA_TOKEN=your_token"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@echo "1. 创建并推送 Git tag..."
|
||||||
|
@git tag -a $(VERSION) -m "Release $(VERSION)"
|
||||||
|
@git push origin $(VERSION)
|
||||||
|
@echo "2. 上传二进制文件到 Gitea Release..."
|
||||||
|
@curl -X POST \
|
||||||
|
-H "Authorization: token $(GITEA_TOKEN)" \
|
||||||
|
-F "attachment=@$(APP_NAME)" \
|
||||||
|
"https://gitea.king.nyc.mn/api/v1/repos/openclaw/SmsReceiver-go/releases/$(VERSION)/assets"
|
||||||
|
@echo "✅ 发布完成!访问: https://gitea.king.nyc.mn/openclaw/SmsReceiver-go/releases/tag/$(VERSION)"
|
||||||
|
|||||||
52
main.go
52
main.go
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@@ -18,10 +19,61 @@ import (
|
|||||||
"github.com/robfig/cron/v3"
|
"github.com/robfig/cron/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// 编译时注入的版本信息
|
||||||
|
var (
|
||||||
|
Version = "dev" // 版本号
|
||||||
|
BuildTime = "unknown" // 构建时间
|
||||||
|
GitCommit = "unknown" // Git commit hash
|
||||||
|
GoVersion = "unknown" // Go 版本
|
||||||
|
BuildEnv = "dev" // 构建环境(dev/prod)
|
||||||
|
)
|
||||||
|
|
||||||
|
func printVersion() {
|
||||||
|
fmt.Printf("SmsReceiver-go %s\n", Version)
|
||||||
|
fmt.Printf(" Version: %s\n", Version)
|
||||||
|
fmt.Printf(" Build Env: %s\n", BuildEnv)
|
||||||
|
fmt.Printf(" Build Time: %s\n", BuildTime)
|
||||||
|
fmt.Printf(" Git Commit: %s\n", GitCommit)
|
||||||
|
fmt.Printf(" Go Version: %s\n", GoVersion)
|
||||||
|
fmt.Printf(" Repository: https://gitea.king.nyc.mn/openclaw/SmsReceiver-go\n")
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
// 检查是否请求版本信息(需要在 flag.Parse 之前)
|
||||||
|
for _, arg := range os.Args[1:] {
|
||||||
|
if arg == "--version" || arg == "-v" {
|
||||||
|
printVersion()
|
||||||
|
os.Exit(0)
|
||||||
|
} else if arg == "--help" || arg == "-h" {
|
||||||
|
fmt.Println("SmsReceiver-go - 短信转发接收端 Go 版本")
|
||||||
|
fmt.Println()
|
||||||
|
fmt.Println("Usage:")
|
||||||
|
fmt.Println(" sms-receiver-v2 [options]")
|
||||||
|
fmt.Println()
|
||||||
|
fmt.Println("Options:")
|
||||||
|
flag.PrintDefaults()
|
||||||
|
fmt.Println()
|
||||||
|
fmt.Println("Additional Options:")
|
||||||
|
fmt.Println(" -v, --version 显示版本信息")
|
||||||
|
fmt.Println(" -h, --help 显示帮助信息")
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 记录启动时间
|
// 记录启动时间
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
|
|
||||||
|
// 打印启动信息
|
||||||
|
log.Printf("========================================")
|
||||||
|
log.Printf("SmsReceiver-go v%s (%s)", Version, BuildEnv)
|
||||||
|
log.Printf("========================================")
|
||||||
|
log.Printf("Version: %s", Version)
|
||||||
|
log.Printf("Build Env: %s", BuildEnv)
|
||||||
|
log.Printf("Build Time: %s", BuildTime)
|
||||||
|
log.Printf("Git Commit: %s", GitCommit)
|
||||||
|
log.Printf("Go Version: %s", GoVersion)
|
||||||
|
log.Printf("========================================")
|
||||||
|
|
||||||
// 命令行参数
|
// 命令行参数
|
||||||
configPath := flag.String("config", "config.yaml", "配置文件路径")
|
configPath := flag.String("config", "config.yaml", "配置文件路径")
|
||||||
templatesPath := flag.String("templates", "templates", "模板目录路径")
|
templatesPath := flag.String("templates", "templates", "模板目录路径")
|
||||||
|
|||||||
Reference in New Issue
Block a user