184 lines
5.6 KiB
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 "✓ 发布准备完成"
|