206 lines
5.8 KiB
Makefile
206 lines
5.8 KiB
Makefile
|
|
# Makefile for AI English Learning Project
|
|||
|
|
|
|||
|
|
# 变量定义
|
|||
|
|
APP_NAME := ai-english-learning
|
|||
|
|
VERSION := $(shell git describe --tags --always --dirty)
|
|||
|
|
BUILD_TIME := $(shell date +%Y-%m-%d_%H:%M:%S)
|
|||
|
|
GO_VERSION := $(shell go version | awk '{print $$3}')
|
|||
|
|
GIT_COMMIT := $(shell git rev-parse HEAD)
|
|||
|
|
|
|||
|
|
# Go相关变量
|
|||
|
|
GOCMD := go
|
|||
|
|
GOBUILD := $(GOCMD) build
|
|||
|
|
GOCLEAN := $(GOCMD) clean
|
|||
|
|
GOTEST := $(GOCMD) test
|
|||
|
|
GOGET := $(GOCMD) get
|
|||
|
|
GOMOD := $(GOCMD) mod
|
|||
|
|
|
|||
|
|
# 构建标志
|
|||
|
|
LDFLAGS := -ldflags "-X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT)"
|
|||
|
|
|
|||
|
|
# 目录
|
|||
|
|
SERVE_DIR := ./serve
|
|||
|
|
CLIENT_DIR := ./client
|
|||
|
|
DOCS_DIR := ./docs
|
|||
|
|
|
|||
|
|
.PHONY: help build clean test deps docker-build docker-run docker-stop dev prod lint format check
|
|||
|
|
|
|||
|
|
# 默认目标
|
|||
|
|
all: clean deps test build
|
|||
|
|
|
|||
|
|
# 帮助信息
|
|||
|
|
help:
|
|||
|
|
@echo "AI English Learning Project Makefile"
|
|||
|
|
@echo ""
|
|||
|
|
@echo "Available targets:"
|
|||
|
|
@echo " build - Build the Go application"
|
|||
|
|
@echo " clean - Clean build artifacts"
|
|||
|
|
@echo " test - Run tests"
|
|||
|
|
@echo " deps - Download dependencies"
|
|||
|
|
@echo " dev - Run in development mode"
|
|||
|
|
@echo " prod - Run in production mode"
|
|||
|
|
@echo " docker-build - Build Docker image"
|
|||
|
|
@echo " docker-run - Run production environment"
|
|||
|
|
@echo " docker-dev - Run development environment"
|
|||
|
|
@echo " docker-stop - Stop all Docker services"
|
|||
|
|
@echo " restart - Restart production environment"
|
|||
|
|
@echo " restart-dev - Restart development environment"
|
|||
|
|
@echo " logs - Show production logs"
|
|||
|
|
@echo " logs-dev - Show development logs"
|
|||
|
|
@echo " lint - Run linter"
|
|||
|
|
@echo " format - Format code"
|
|||
|
|
@echo " check - Run all checks (lint, test, build)"
|
|||
|
|
@echo " migrate - Run database migrations"
|
|||
|
|
@echo " seed - Seed database with test data"
|
|||
|
|
|
|||
|
|
# 构建应用
|
|||
|
|
build:
|
|||
|
|
@echo "Building $(APP_NAME)..."
|
|||
|
|
cd $(SERVE_DIR) && $(GOBUILD) $(LDFLAGS) -o $(APP_NAME) .
|
|||
|
|
@echo "Build completed: $(SERVE_DIR)/$(APP_NAME)"
|
|||
|
|
|
|||
|
|
# 清理构建产物
|
|||
|
|
clean:
|
|||
|
|
@echo "Cleaning..."
|
|||
|
|
cd $(SERVE_DIR) && $(GOCLEAN)
|
|||
|
|
rm -f $(SERVE_DIR)/$(APP_NAME)
|
|||
|
|
rm -rf $(SERVE_DIR)/logs/*
|
|||
|
|
docker-compose down --volumes --remove-orphans 2>/dev/null || true
|
|||
|
|
docker system prune -f 2>/dev/null || true
|
|||
|
|
|
|||
|
|
# 下载依赖
|
|||
|
|
deps:
|
|||
|
|
@echo "Downloading dependencies..."
|
|||
|
|
cd $(SERVE_DIR) && $(GOMOD) download
|
|||
|
|
cd $(SERVE_DIR) && $(GOMOD) tidy
|
|||
|
|
|
|||
|
|
# 运行测试
|
|||
|
|
test:
|
|||
|
|
@echo "Running tests..."
|
|||
|
|
cd $(SERVE_DIR) && $(GOTEST) -v ./...
|
|||
|
|
|
|||
|
|
# 开发模式运行
|
|||
|
|
dev: deps
|
|||
|
|
@echo "Starting development server..."
|
|||
|
|
cd $(SERVE_DIR) && go run main.go
|
|||
|
|
|
|||
|
|
# 生产模式运行
|
|||
|
|
prod: build
|
|||
|
|
@echo "Starting production server..."
|
|||
|
|
cd $(SERVE_DIR) && ./$(APP_NAME)
|
|||
|
|
|
|||
|
|
# Docker构建
|
|||
|
|
docker-build:
|
|||
|
|
@echo "Building Docker image..."
|
|||
|
|
docker-compose build ai-english-backend
|
|||
|
|
|
|||
|
|
# Docker运行(生产环境)
|
|||
|
|
docker-run:
|
|||
|
|
@echo "Starting services with Docker Compose..."
|
|||
|
|
docker-compose up -d
|
|||
|
|
@echo "Services started. Frontend available at http://localhost:80"
|
|||
|
|
@echo "Backend available at http://localhost:8080"
|
|||
|
|
@echo "Use 'make logs' to view logs"
|
|||
|
|
|
|||
|
|
# Docker运行(开发环境)
|
|||
|
|
docker-dev:
|
|||
|
|
@echo "Starting development environment..."
|
|||
|
|
docker-compose -f docker-compose.dev.yml up -d
|
|||
|
|
@echo "Development environment started!"
|
|||
|
|
@echo "Backend: http://localhost:8080"
|
|||
|
|
@echo "Database Admin: http://localhost:8081"
|
|||
|
|
@echo "Redis Admin: http://localhost:8082"
|
|||
|
|
|
|||
|
|
# Docker停止
|
|||
|
|
docker-stop:
|
|||
|
|
@echo "Stopping Docker Compose services..."
|
|||
|
|
docker-compose down
|
|||
|
|
docker-compose -f docker-compose.dev.yml down
|
|||
|
|
|
|||
|
|
# 代码检查
|
|||
|
|
lint:
|
|||
|
|
@echo "Running linter..."
|
|||
|
|
cd $(SERVE_DIR) && golangci-lint run ./... || echo "golangci-lint not installed, skipping..."
|
|||
|
|
|
|||
|
|
# 代码格式化
|
|||
|
|
format:
|
|||
|
|
@echo "Formatting code..."
|
|||
|
|
cd $(SERVE_DIR) && go fmt ./...
|
|||
|
|
cd $(SERVE_DIR) && goimports -w . 2>/dev/null || echo "goimports not installed, skipping..."
|
|||
|
|
|
|||
|
|
# 运行所有检查
|
|||
|
|
check: format lint test build
|
|||
|
|
@echo "All checks passed!"
|
|||
|
|
|
|||
|
|
# 数据库迁移
|
|||
|
|
migrate:
|
|||
|
|
@echo "Running database migrations..."
|
|||
|
|
@echo "Please ensure database is running and execute SQL files manually"
|
|||
|
|
@echo "SQL files location: $(DOCS_DIR)/database_schema.sql"
|
|||
|
|
|
|||
|
|
# 数据库种子数据
|
|||
|
|
seed:
|
|||
|
|
@echo "Seeding database..."
|
|||
|
|
@echo "Please implement seed data scripts"
|
|||
|
|
|
|||
|
|
# 查看日志(生产环境)
|
|||
|
|
logs:
|
|||
|
|
@echo "Showing application logs..."
|
|||
|
|
docker-compose logs -f
|
|||
|
|
|
|||
|
|
# 查看日志(开发环境)
|
|||
|
|
logs-dev:
|
|||
|
|
@echo "Showing development logs..."
|
|||
|
|
docker-compose -f docker-compose.dev.yml logs -f
|
|||
|
|
|
|||
|
|
# 查看所有服务状态
|
|||
|
|
status:
|
|||
|
|
@echo "Service status:"
|
|||
|
|
docker-compose ps
|
|||
|
|
|
|||
|
|
# 重启服务(生产环境)
|
|||
|
|
restart: docker-stop docker-run
|
|||
|
|
|
|||
|
|
# 重启服务(开发环境)
|
|||
|
|
restart-dev:
|
|||
|
|
@echo "Restarting development environment..."
|
|||
|
|
docker-compose -f docker-compose.dev.yml restart
|
|||
|
|
|
|||
|
|
# 安装开发工具
|
|||
|
|
install-tools:
|
|||
|
|
@echo "Installing development tools..."
|
|||
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|||
|
|
go install golang.org/x/tools/cmd/goimports@latest
|
|||
|
|
|
|||
|
|
# 生成API文档
|
|||
|
|
docs:
|
|||
|
|
@echo "Generating API documentation..."
|
|||
|
|
@echo "API documentation available in $(DOCS_DIR)/API接口文档.md"
|
|||
|
|
|
|||
|
|
# 备份数据库
|
|||
|
|
backup:
|
|||
|
|
@echo "Creating database backup..."
|
|||
|
|
mkdir -p ./backups
|
|||
|
|
docker-compose exec mysql mysqldump -u ai_english -pai_english_password ai_english_learning > ./backups/backup_$(shell date +%Y%m%d_%H%M%S).sql
|
|||
|
|
|
|||
|
|
# 恢复数据库
|
|||
|
|
restore:
|
|||
|
|
@echo "To restore database, run:"
|
|||
|
|
@echo "docker-compose exec -T mysql mysql -u ai_english -pai_english_password ai_english_learning < ./backups/your_backup_file.sql"
|
|||
|
|
|
|||
|
|
# 性能测试
|
|||
|
|
bench:
|
|||
|
|
@echo "Running benchmarks..."
|
|||
|
|
cd $(SERVE_DIR) && go test -bench=. -benchmem ./...
|
|||
|
|
|
|||
|
|
# 安全扫描
|
|||
|
|
security:
|
|||
|
|
@echo "Running security scan..."
|
|||
|
|
cd $(SERVE_DIR) && gosec ./... 2>/dev/null || echo "gosec not installed, skipping..."
|
|||
|
|
|
|||
|
|
# 版本信息
|
|||
|
|
version:
|
|||
|
|
@echo "Version: $(VERSION)"
|
|||
|
|
@echo "Build Time: $(BUILD_TIME)"
|
|||
|
|
@echo "Go Version: $(GO_VERSION)"
|
|||
|
|
@echo "Git Commit: $(GIT_COMMIT)"
|