.PHONY: build run test clean install dev docker-build docker-run docker-stop migrate # 应用配置 APP_NAME := photography-backend VERSION := 1.0.0 BUILD_TIME := $(shell date +%Y%m%d_%H%M%S) LDFLAGS := -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) # 构建相关 BUILD_DIR := bin MAIN_FILE := cmd/server/main.go # 数据库配置 DB_URL := postgres://postgres:password@localhost:5432/photography?sslmode=disable MIGRATION_DIR := migrations # 安装依赖 install: @echo "Installing dependencies..." go mod download go mod tidy # 构建应用 build: @echo "Building $(APP_NAME)..." mkdir -p $(BUILD_DIR) CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_FILE) # 运行应用 run: @echo "Running $(APP_NAME)..." go run $(MAIN_FILE) # 开发模式运行 dev: @echo "Running in development mode..." air -c .air.toml || go run $(MAIN_FILE) # 运行测试 test: @echo "Running tests..." go test -v ./... # 运行测试(带覆盖率) test-coverage: @echo "Running tests with coverage..." go test -v -coverprofile=coverage.out ./... go tool cover -html=coverage.out -o coverage.html # 代码检查 lint: @echo "Running linter..." golangci-lint run # 格式化代码 fmt: @echo "Formatting code..." go fmt ./... # 清理构建文件 clean: @echo "Cleaning build files..." rm -rf $(BUILD_DIR) rm -f coverage.out coverage.html # 数据库迁移 migrate-up: @echo "Running database migrations..." migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" up migrate-down: @echo "Rolling back database migrations..." migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" down migrate-force: @echo "Forcing migration version..." migrate -path $(MIGRATION_DIR) -database "$(DB_URL)" force $(VERSION) # 创建新的迁移文件 migrate-create: @echo "Creating new migration: $(NAME)" migrate create -ext sql -dir $(MIGRATION_DIR) -seq $(NAME) # Docker 相关 docker-build: @echo "Building Docker image..." docker build -t $(APP_NAME):$(VERSION) . docker tag $(APP_NAME):$(VERSION) $(APP_NAME):latest docker-run: @echo "Running Docker container..." docker-compose up -d docker-stop: @echo "Stopping Docker containers..." docker-compose down docker-logs: @echo "Showing Docker logs..." docker-compose logs -f # 开发环境 dev-up: @echo "Starting development environment..." docker-compose -f docker-compose.dev.yml up -d dev-down: @echo "Stopping development environment..." docker-compose -f docker-compose.dev.yml down # 生产环境 prod-up: @echo "Starting production environment..." docker-compose -f docker-compose.prod.yml up -d prod-down: @echo "Stopping production environment..." docker-compose -f docker-compose.prod.yml down # 数据库备份 backup-db: @echo "Backing up database..." docker exec photography-postgres pg_dump -U postgres photography > backup_$(shell date +%Y%m%d_%H%M%S).sql # 工具安装 install-tools: @echo "Installing development tools..." go install github.com/cosmtrek/air@latest go install github.com/golang-migrate/migrate/v4/cmd/migrate@latest go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest # 初始化项目 init: install-tools install @echo "Initializing project..." mkdir -p logs uploads # 检查依赖更新 mod-update: @echo "Checking for module updates..." go list -u -m all # 生成 API 文档 docs: @echo "Generating API documentation..." swag init -g cmd/server/main.go -o docs/swagger # 全面检查 check: fmt lint test @echo "All checks passed!" # 构建发布版本 release: clean build @echo "Building release version..." tar -czf $(BUILD_DIR)/$(APP_NAME)-$(VERSION)-$(BUILD_TIME).tar.gz -C $(BUILD_DIR) $(APP_NAME) # 帮助信息 help: @echo "Available commands:" @echo " install - Install dependencies" @echo " build - Build the application" @echo " run - Run the application" @echo " dev - Run in development mode" @echo " test - Run tests" @echo " lint - Run linter" @echo " fmt - Format code" @echo " clean - Clean build files" @echo " migrate-up - Run database migrations" @echo " migrate-down - Rollback database migrations" @echo " docker-build - Build Docker image" @echo " docker-run - Run Docker container" @echo " docker-stop - Stop Docker containers" @echo " dev-up - Start development environment" @echo " prod-up - Start production environment" @echo " help - Show this help message"