From d34d1119dd172e394fbe7643ca3200b316abec60 Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Sun, 8 Feb 2026 19:20:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BC=96=E8=AF=91=E6=97=B6=E5=B5=8C?= =?UTF-8?q?=E5=85=A5=E7=89=88=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加版本显示功能 (--version 参数) - 编译时注入 Version、BuildTime、GitCommit、GoVersion、BuildEnv - 更新 Makefile 支持自动获取版本信息 - 添加 release-full 命令支持完整发布流程 - 启动时显示构建信息 --- Makefile | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- main.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 45e6e3a..9e46ed2 100644 --- a/Makefile +++ b/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 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 GOFMT := gofmt @@ -12,7 +19,7 @@ GOTEST := go test # 构建配置 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_IMAGE := sms-receiver-go @@ -110,3 +117,52 @@ init: else \ echo "config.yaml 已存在"; \ 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)" diff --git a/main.go b/main.go index cb4d6bc..cebe206 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "flag" + "fmt" "log" "net/http" "os" @@ -18,10 +19,61 @@ import ( "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() { + // 检查是否请求版本信息(需要在 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() + // 打印启动信息 + 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", "配置文件路径") templatesPath := flag.String("templates", "templates", "模板目录路径")