GoTest/Makefile
Table f490a0dac5 将 @internal 目录重命名为 src 目录并做以下变更:
1、将 @pkg  目录移动到变更后的 src 目录;
2、将 @cmd  下的 @main.go 移动到  src 目录;
3、移除 cmd 目录
2025-11-29 04:58:41 +08:00

237 lines
8.0 KiB
Makefile

# Makefile for Yinli API
# 变量定义
APP_NAME := yinli-api
VERSION := $(shell git tag --sort=-version:refname | head -n 1 2>/dev/null || echo "1.0.0")
BUILD_DIR := build
DOCKER_DIR := docker
DOC_DIR := doc
# Go 相关变量
GO := go
GOFMT := gofmt
GOVET := go vet
# Docker 相关变量
DOCKER := docker
DOCKER_COMPOSE := docker-compose
# 默认目标
.PHONY: help
help: ## 显示帮助信息
@echo "可用的命令:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
# 开发环境
.PHONY: dev
dev: ## 启动开发环境
@echo "启动开发环境..."
$(GO) run src/main.go -env=dev
.PHONY: stage
stage: ## 启动预发布环境
@echo "启动预发布环境..."
$(GO) run src/main.go -env=stage
.PHONY: prod
prod: ## 启动生产环境
@echo "启动生产环境..."
$(GO) run src/main.go -env=prod
# 构建相关
.PHONY: build
build: ## 构建应用程序
@echo "构建应用程序..."
@mkdir -p $(BUILD_DIR)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -ldflags="-w -s" -o $(BUILD_DIR)/$(APP_NAME) src/main.go
.PHONY: build-windows
build-windows: ## 构建Windows版本
@echo "构建Windows版本..."
@mkdir -p $(BUILD_DIR)
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GO) build -ldflags="-w -s" -o $(BUILD_DIR)/$(APP_NAME).exe src/main.go
.PHONY: build-mac
build-mac: ## 构建macOS版本
@echo "构建macOS版本..."
@mkdir -p $(BUILD_DIR)
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 $(GO) build -ldflags="-w -s" -o $(BUILD_DIR)/$(APP_NAME)-mac src/main.go
.PHONY: build-all
build-all: build build-windows build-mac ## 构建所有平台版本
# 依赖管理
.PHONY: deps
deps: ## 下载依赖
@echo "下载依赖..."
$(GO) mod download
.PHONY: deps-update
deps-update: ## 更新依赖
@echo "更新依赖..."
$(GO) mod tidy
$(GO) get -u ./...
# 代码质量
.PHONY: fmt
fmt: ## 格式化代码
@echo "格式化代码..."
$(GOFMT) -s -w .
.PHONY: vet
vet: ## 代码静态检查
@echo "代码静态检查..."
$(GOVET) ./...
.PHONY: check
check: fmt vet ## 执行所有代码检查
# 测试相关
.PHONY: test
test: ## 运行测试
@echo "运行测试..."
$(GO) test -v ./...
.PHONY: test-coverage
test-coverage: ## 运行测试并生成覆盖率报告
@echo "运行测试并生成覆盖率报告..."
@mkdir -p $(BUILD_DIR)
$(GO) test -v -coverprofile=$(BUILD_DIR)/coverage.out ./...
$(GO) tool cover -html=$(BUILD_DIR)/coverage.out -o $(BUILD_DIR)/coverage.html
@echo "覆盖率报告已生成: $(BUILD_DIR)/coverage.html"
.PHONY: test-race
test-race: ## 运行竞态检测测试
@echo "运行竞态检测测试..."
$(GO) test -race -v ./...
.PHONY: benchmark
benchmark: ## 运行基准测试
@echo "运行基准测试..."
$(GO) test -bench=. -benchmem ./...
# 文档生成
.PHONY: docs
docs: ## 生成API文档
@echo "生成API文档..."
@mkdir -p $(DOC_DIR)/dev $(DOC_DIR)/stage $(DOC_DIR)/prod
@echo "请先安装 swag: go install github.com/swaggo/swag/cmd/swag@latest"
@echo "然后运行: swag init -g src/main.go -o doc/dev --parseDependency --parseInternal"
.PHONY: docs-serve
docs-serve: docs ## 启动文档服务器
@echo "启动文档服务器..."
@cd $(DOC_DIR) && python3 -m http.server 8081
# Docker 相关
.PHONY: docker-build
docker-build: ## 构建Docker镜像
@echo "构建Docker镜像..."
$(DOCKER) build -t $(APP_NAME):$(VERSION) -t $(APP_NAME):latest .
.PHONY: docker-compose-dev
docker-compose-dev: ## 生成开发环境Docker Compose文件
@echo "生成开发环境Docker Compose文件..."
@mkdir -p $(DOCKER_DIR)
@echo "version: '3.8'" > $(DOCKER_DIR)/docker-compose.dev.yml
@echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "services:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " yinli-api:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " build:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " context: .." >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " dockerfile: Dockerfile" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - \"8080:8080\"" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " environment:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - APP_ENV=dev" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " depends_on:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - mysql" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - redis" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - ../config:/app/config:ro" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - yinli-network" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " mysql:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " image: mysql:8.0" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " environment:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " MYSQL_ROOT_PASSWORD: sasasasa" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " MYSQL_DATABASE: yinli" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - \"3306:3306\"" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - mysql_data:/var/lib/mysql" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - ../sql:/docker-entrypoint-initdb.d:ro" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - yinli-network" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " redis:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " image: redis:7-alpine" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - \"6379:6379\"" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - redis_data:/data" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " - yinli-network" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " mysql_data:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " redis_data:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "networks:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " yinli-network:" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo " driver: bridge" >> $(DOCKER_DIR)/docker-compose.dev.yml
@echo "开发环境Docker Compose文件已生成: $(DOCKER_DIR)/docker-compose.dev.yml"
.PHONY: docker-up-dev
docker-up-dev: docker-compose-dev ## 启动开发环境Docker容器
@echo "启动开发环境Docker容器..."
cd $(DOCKER_DIR) && $(DOCKER_COMPOSE) -f docker-compose.dev.yml up -d
.PHONY: docker-down
docker-down: ## 停止并移除Docker容器
@echo "停止并移除Docker容器..."
cd $(DOCKER_DIR) && $(DOCKER_COMPOSE) down
.PHONY: docker-logs
docker-logs: ## 查看Docker容器日志
@echo "查看Docker容器日志..."
cd $(DOCKER_DIR) && $(DOCKER_COMPOSE) logs -f
# 清理
.PHONY: clean
clean: ## 清理构建文件
@echo "清理构建文件..."
rm -rf $(BUILD_DIR)
rm -rf $(DOC_DIR)
$(GO) clean
.PHONY: clean-docker
clean-docker: ## 清理Docker资源
@echo "清理Docker资源..."
$(DOCKER) system prune -f
$(DOCKER) volume prune -f
# 安装工具
.PHONY: install-tools
install-tools: ## 安装开发工具
@echo "安装开发工具..."
$(GO) install github.com/swaggo/swag/cmd/swag@latest
$(GO) install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# 全流程
.PHONY: all
all: clean deps check test build docs ## 执行完整的构建流程
.PHONY: ci
ci: deps check test-coverage ## CI流程
# 版本管理
.PHONY: version
version: ## 显示版本信息
@echo "应用名称: $(APP_NAME)"
@echo "版本: $(VERSION)"
@echo "Go版本: $(shell $(GO) version)"
# 默认目标
.DEFAULT_GOAL := help