From 56c6ba3731f30294ac9f832bf296018d35df314f Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 2 Apr 2026 13:23:54 +0800 Subject: [PATCH] =?UTF-8?q?chore(build):=20=E6=B7=BB=E5=8A=A0=20Makefile?= =?UTF-8?q?=20=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC=E5=92=8C=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Makefile: 跨平台构建、测试、代码质量检查命令 - main.go: 程序入口,支持版本信息注入 Co-Authored-By: Claude --- Makefile | 210 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 33 +++++++++ 2 files changed, 243 insertions(+) create mode 100644 Makefile create mode 100644 main.go diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3421c76 --- /dev/null +++ b/Makefile @@ -0,0 +1,210 @@ +# Makefile - Lolly Build Commands + +# 版本信息 +APP_NAME := lolly +VERSION := 0.1.0 +GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") +GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") +BUILD_TIME := $(shell date -u '+%Y-%m-%d %H:%M:%S UTC') +GO_VERSION := $(shell go version | awk '{print $$3}') +BUILD_PLATFORM := $(shell go env GOOS)/$(shell go env GOARCH) +BUILD_DIR := bin + +# 生产构建标志 +LDFLAGS := -ldflags "-s -w \ + -X 'main.version=$(VERSION)' \ + -X 'main.gitCommit=$(GIT_COMMIT)' \ + -X 'main.gitBranch=$(GIT_BRANCH)' \ + -X 'main.buildTime=$(BUILD_TIME)' \ + -X 'main.goVersion=$(GO_VERSION)' \ + -X 'main.buildPlatform=$(BUILD_PLATFORM)'" + +# Go 文件 +MAIN_PATH := main.go + +# 默认目标 +.DEFAULT_GOAL := build + +# ============================================ +# 构建命令 +# ============================================ + +# 本地构建 +build: + @echo "Building $(APP_NAME)..." + @mkdir -p $(BUILD_DIR) + go build $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH) + @echo "Built: $(BUILD_DIR)/$(APP_NAME)" + @echo "Version: $(VERSION) | Commit: $(GIT_COMMIT) | Platform: $(BUILD_PLATFORM)" + +# 生产构建(优化) +build-prod: + @echo "Building $(APP_NAME) for production..." + @mkdir -p $(BUILD_DIR) + go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH) + @echo "Production build complete: $(BUILD_DIR)/$(APP_NAME)" + +# 跨平台构建 +build-linux: + @echo "Building for Linux..." + @mkdir -p $(BUILD_DIR) + GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-linux-amd64 $(MAIN_PATH) + @echo "Built: $(BUILD_DIR)/$(APP_NAME)-linux-amd64" + +build-darwin: + @echo "Building for macOS..." + @mkdir -p $(BUILD_DIR) + GOOS=darwin GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-darwin-amd64 $(MAIN_PATH) + GOOS=darwin GOARCH=arm64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-darwin-arm64 $(MAIN_PATH) + @echo "Built: $(BUILD_DIR)/$(APP_NAME)-darwin-{amd64,arm64}" + +build-windows: + @echo "Building for Windows..." + @mkdir -p $(BUILD_DIR) + GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe $(MAIN_PATH) + @echo "Built: $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe" + +# 构建所有平台 +build-all: build-linux build-darwin build-windows + @echo "All platform builds complete." + +# ============================================ +# 开发命令 +# ============================================ + +# 运行开发服务器 +run: + @echo "Running $(APP_NAME) in development mode..." + go run $(MAIN_PATH) -c configs/lolly.yaml + +# 测试配置 +test-config: + @echo "Testing configuration..." + go run $(MAIN_PATH) -t -c configs/lolly.yaml + +# 显示版本 +version: + @echo "$(APP_NAME) version $(VERSION)" + @echo "Git: $(GIT_COMMIT) ($(GIT_BRANCH))" + @echo "Built: $(BUILD_TIME)" + @echo "Go: $(GO_VERSION)" + +# ============================================ +# 测试命令 +# ============================================ + +# 运行所有测试 +test: + @echo "Running tests..." + go test -v ./... + +# 运行测试(带覆盖率) +test-cover: + @echo "Running tests with coverage..." + go test -v -coverprofile=coverage.out ./... + go tool cover -html=coverage.out -o coverage.html + @echo "Coverage report: coverage.html" + +# 运行基准测试 +bench: + @echo "Running benchmarks..." + go test -bench=. -benchmem ./... + +# ============================================ +# 代码质量 +# ============================================ + +# 格式化代码 +fmt: + @echo "Formatting code..." + go fmt ./... + +# 静态检查 +lint: + @echo "Running linter..." + @if command -v golangci-lint >/dev/null 2>&1; then \ + golangci-lint run ./...; \ + else \ + echo "golangci-lint not installed. Run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"; \ + go vet ./...; \ + fi + +# 代码检查 +check: fmt lint test + @echo "All checks passed." + +# ============================================ +# 依赖管理 +# ============================================ + +# 下载依赖 +deps: + @echo "Downloading dependencies..." + go mod download + go mod tidy + +# 更新依赖 +update-deps: + @echo "Updating dependencies..." + go get -u ./... + go mod tidy + +# ============================================ +# 安装命令 +# ============================================ + +# 安装到系统 +install: + @echo "Installing $(APP_NAME)..." + go install $(LDFLAGS) $(MAIN_PATH) + @echo "Installed to: $(shell go env GOPATH)/bin/$(APP_NAME)" + +# ============================================ +# 清理命令 +# ============================================ + +# 清理构建产物 +clean: + @echo "Cleaning build artifacts..." + rm -rf $(BUILD_DIR) + rm -f coverage.out coverage.html + @echo "Clean complete." + +# ============================================ +# 帮助 +# ============================================ + +help: + @echo "$(APP_NAME) Makefile Commands" + @echo "" + @echo "Build:" + @echo " make build - Build for current platform" + @echo " make build-prod - Production build (optimized)" + @echo " make build-all - Build for all platforms" + @echo " make build-linux - Build for Linux amd64" + @echo " make build-darwin - Build for macOS (amd64 + arm64)" + @echo " make build-windows - Build for Windows amd64" + @echo "" + @echo "Development:" + @echo " make run - Run development server" + @echo " make test-config - Test configuration file" + @echo " make version - Show version info" + @echo "" + @echo "Testing:" + @echo " make test - Run all tests" + @echo " make test-cover - Run tests with coverage" + @echo " make bench - Run benchmarks" + @echo "" + @echo "Quality:" + @echo " make fmt - Format code" + @echo " make lint - Run linter" + @echo " make check - Format + lint + test" + @echo "" + @echo "Dependencies:" + @echo " make deps - Download dependencies" + @echo " make update-deps - Update dependencies" + @echo "" + @echo "Other:" + @echo " make install - Install to GOPATH/bin" + @echo " make clean - Clean build artifacts" + @echo "" \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..54dd236 --- /dev/null +++ b/main.go @@ -0,0 +1,33 @@ +package main + +import ( + "fmt" + "os" +) + +// 通过 -ldflags 注入的版本信息 +var ( + version = "dev" + gitCommit = "unknown" + gitBranch = "unknown" + buildTime = "unknown" + goVersion = "unknown" + buildPlatform = "unknown" +) + +func main() { + if len(os.Args) > 1 && os.Args[1] == "-v" || os.Args[1] == "--version" { + printVersion() + return + } + + fmt.Println("Hello World!") +} + +func printVersion() { + fmt.Printf("lolly version %s\n", version) + fmt.Printf(" Git: %s (%s)\n", gitCommit, gitBranch) + fmt.Printf(" Built: %s\n", buildTime) + fmt.Printf(" Go: %s\n", goVersion) + fmt.Printf(" Platform: %s\n", buildPlatform) +}