init
This commit is contained in:
206
Makefile
Normal file
206
Makefile
Normal file
@@ -0,0 +1,206 @@
|
||||
# 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)"
|
||||
Reference in New Issue
Block a user