DeployHelper/Makefile

184 lines
5.6 KiB
Makefile

.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 "✓ 发布准备完成"