.PHONY: build run test clean docker-build docker-run docker-compose-up docker-compose-down wire docs fmt lint deps dev-setup build-all install-tools check-env mod-tidy # 构建变量 BINARY_NAME=ego MAIN_FILE=cmd/ego/main.go DOCKER_IMAGE=ego:latest GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) # Go版本检查 GO_VERSION := $(shell go version | cut -d ' ' -f 3 | sed 's/go//') REQUIRED_GO_VERSION := 1.21 # 默认目标 .DEFAULT_GOAL := help # 帮助信息 help: ## 显示帮助信息 @echo "可用的命令:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' # 环境检查 check-env: ## 检查开发环境 @echo "检查Go版本..." @if [ "$(shell printf '%s\n' $(REQUIRED_GO_VERSION) $(GO_VERSION) | sort -V | head -n1)" != "$(REQUIRED_GO_VERSION)" ]; then \ echo "错误: 需要Go $(REQUIRED_GO_VERSION)或更高版本,当前版本: $(GO_VERSION)"; \ exit 1; \ fi @echo "✓ Go版本检查通过: $(GO_VERSION)" @echo "检查必要工具..." @command -v git >/dev/null 2>&1 || { echo "错误: 需要安装git"; exit 1; } @echo "✓ 环境检查完成" # 构建 build: check-env ## 构建应用程序 @echo "构建 $(BINARY_NAME)..." @go build -ldflags="-w -s" -o $(BINARY_NAME) ./$(MAIN_FILE) @echo "✓ 构建完成: $(BINARY_NAME)" # 运行 run: check-env ## 运行应用程序 @echo "运行应用程序..." @go run ./$(MAIN_FILE) # 开发模式运行 dev: check-env ## 开发模式运行(调试模式) @echo "以开发模式运行..." @GIN_MODE=debug LOG_LEVEL=debug go run ./$(MAIN_FILE) # 测试 test: ## 运行测试 @echo "运行测试..." @go test -v -race -coverprofile=coverage.out ./... @go tool cover -html=coverage.out -o coverage.html @echo "✓ 测试完成,覆盖率报告: coverage.html" # 基准测试 bench: ## 运行基准测试 @echo "运行基准测试..." @go test -bench=. -benchmem ./... # 清理 clean: ## 清理构建文件 @echo "清理构建文件..." @go clean @rm -f $(BINARY_NAME) @rm -f cmd/ego/$(BINARY_NAME) @rm -f coverage.out coverage.html @rm -rf dist/ @echo "✓ 清理完成" # 整理依赖 mod-tidy: ## 整理Go模块依赖 @echo "整理依赖..." @go mod tidy @go mod verify @echo "✓ 依赖整理完成" # Docker 构建 docker-build: ## 构建Docker镜像 @echo "构建Docker镜像..." @docker build -f deployments/Dockerfile -t $(DOCKER_IMAGE) . @echo "✓ Docker镜像构建完成: $(DOCKER_IMAGE)" # Docker 运行 docker-run: ## 运行Docker容器 @echo "运行Docker容器..." @docker run -p 3000:3000 --env-file .env $(DOCKER_IMAGE) # Docker Compose 启动 docker-compose-up: ## 使用Docker Compose启动服务 @echo "启动Docker Compose服务..." @docker-compose -f deployments/docker-compose.yml up -d @echo "✓ 服务已启动" # Docker Compose 停止 docker-compose-down: ## 停止Docker Compose服务 @echo "停止Docker Compose服务..." @docker-compose -f deployments/docker-compose.yml down @echo "✓ 服务已停止" # 生成 wire 依赖注入代码 wire: ## 生成依赖注入代码 @echo "生成Wire依赖注入代码..." @cd internal/wire && wire @echo "✓ Wire代码生成完成" # 生成 API 文档 docs: ## 生成API文档 @echo "生成API文档..." @swag init -g $(MAIN_FILE) -o ./api --parseDependency --parseInternal @echo "✓ API文档生成完成" # 安装依赖 deps: check-env ## 下载依赖包 @echo "下载依赖包..." @go mod download @go mod verify @echo "✓ 依赖下载完成" # 代码格式化 fmt: ## 格式化代码 @echo "格式化代码..." @go fmt ./... @gofmt -w . @echo "✓ 代码格式化完成" # 代码检查 lint: ## 代码静态检查 @echo "运行代码检查..." @golangci-lint run --timeout=5m @echo "✓ 代码检查完成" # 安全检查 security: ## 运行安全检查 @echo "运行安全检查..." @govulncheck ./... @echo "✓ 安全检查完成" # 开发环境设置 dev-setup: check-env ## 设置开发环境 @echo "设置开发环境..." @if [ ! -f "configs/config.yaml" ]; then \ cp "configs/config.yaml.example" "configs/config.yaml"; \ echo "✓ 配置文件已创建: configs/config.yaml"; \ fi @if [ ! -f ".env" ]; then \ cp ".env.example" ".env" 2>/dev/null || echo "# 请根据需要设置环境变量" > .env; \ echo "✓ 环境变量文件已创建: .env"; \ fi @mkdir -p logs @echo "✓ 日志目录已创建: logs/" @$(MAKE) deps @$(MAKE) install-tools @$(MAKE) wire @echo "✓ 开发环境设置完成!" # 构建所有平台 build-all: check-env ## 构建所有平台的二进制文件 @echo "构建所有平台..." @mkdir -p dist @GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o dist/$(BINARY_NAME)-linux-amd64 ./$(MAIN_FILE) @GOOS=windows GOARCH=amd64 go build -ldflags="-w -s" -o dist/$(BINARY_NAME)-windows-amd64.exe ./$(MAIN_FILE) @GOOS=darwin GOARCH=amd64 go build -ldflags="-w -s" -o dist/$(BINARY_NAME)-darwin-amd64 ./$(MAIN_FILE) @GOOS=darwin GOARCH=arm64 go build -ldflags="-w -s" -o dist/$(BINARY_NAME)-darwin-arm64 ./$(MAIN_FILE) @echo "✓ 所有平台构建完成,文件位于 dist/ 目录" # 安装开发工具 install-tools: ## 安装开发工具 @echo "安装开发工具..." @go install github.com/swaggo/swag/cmd/swag@latest @go install github.com/google/wire/cmd/wire@latest @go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest @go install golang.org/x/vuln/cmd/govulncheck@latest @echo "✓ 开发工具安装完成" # 运行所有检查 check-all: fmt lint test security ## 运行所有代码质量检查 @echo "✓ 所有检查完成" # 发布准备 release-prep: check-all build-all docs ## 准备发布版本 @echo "✓ 发布准备完成"