.PHONY: help build test clean check fmt lint install dev docker-build docker-up docker-down # 默认目标 .DEFAULT_GOAL := help # 颜色输出 BLUE := \033[0;34m GREEN := \033[0;32m YELLOW := \033[0;33m NC := \033[0m # No Color help: ## 显示帮助信息 @echo "$(BLUE)BlueArchive Toolkit - Makefile 命令$(NC)" @echo "" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-15s$(NC) %s\n", $$1, $$2}' # ============================================================================ # 构建相关 # ============================================================================ build: build-rust build-go ## 构建所有组件 build-rust: ## 构建 Rust 组件 @echo "$(BLUE)Building Rust workspace...$(NC)" cargo build --release --workspace build-go: ## 构建 Go 组件 @echo "$(BLUE)Building Go CLI...$(NC)" @if [ -f cmd/bat/main.go ]; then \ go build -o bin/bat ./cmd/bat; \ else \ echo "$(YELLOW)Go CLI entrypoint not implemented yet, skipping...$(NC)"; \ fi install: ## 安装到本地 @echo "$(BLUE)Installing bat CLI...$(NC)" @if [ -f cmd/bat/main.go ]; then \ go install ./cmd/bat; \ else \ echo "$(YELLOW)Go CLI entrypoint not implemented yet, skipping...$(NC)"; \ fi # ============================================================================ # 测试相关 # ============================================================================ test: test-rust test-go ## 运行所有测试 test-rust: ## 运行 Rust 测试 @echo "$(BLUE)Running Rust tests...$(NC)" cargo test --workspace test-go: ## 运行 Go 测试 @echo "$(BLUE)Running Go tests...$(NC)" @if [ -n "$$(go list ./... 2>/dev/null)" ]; then \ go test -v ./...; \ else \ echo "$(YELLOW)No Go packages yet, skipping...$(NC)"; \ fi bench: ## 运行性能基准测试 @echo "$(BLUE)Running benchmarks...$(NC)" cargo bench --workspace @if [ -n "$$(go list ./... 2>/dev/null)" ]; then \ go test -bench=. -benchmem ./...; \ else \ echo "$(YELLOW)No Go packages yet, skipping Go benchmarks...$(NC)"; \ fi # ============================================================================ # 代码质量 # ============================================================================ check: check-rust check-go ## 检查代码(不编译) check-rust: ## 检查 Rust 代码 @echo "$(BLUE)Checking Rust code...$(NC)" cargo check --workspace check-go: ## 检查 Go 代码 @echo "$(BLUE)Checking Go code...$(NC)" @if [ -n "$$(go list ./... 2>/dev/null)" ]; then \ go vet ./...; \ else \ echo "$(YELLOW)No Go packages yet, skipping...$(NC)"; \ fi fmt: fmt-rust fmt-go ## 格式化所有代码 fmt-rust: ## 格式化 Rust 代码 @echo "$(BLUE)Formatting Rust code...$(NC)" cargo fmt --all fmt-go: ## 格式化 Go 代码 @echo "$(BLUE)Formatting Go code...$(NC)" @if [ -n "$$(go list ./... 2>/dev/null)" ]; then \ go fmt ./...; \ else \ echo "$(YELLOW)No Go packages yet, skipping...$(NC)"; \ fi lint: lint-rust lint-go ## 运行所有 Linter lint-rust: ## Rust Clippy 检查 @echo "$(BLUE)Running Clippy...$(NC)" cargo clippy --workspace -- -D warnings lint-go: ## Go Linter 检查 @echo "$(BLUE)Running golangci-lint...$(NC)" @command -v golangci-lint >/dev/null 2>&1 || { echo "$(YELLOW)golangci-lint not installed, skipping...$(NC)"; exit 0; } @if [ -n "$$(go list ./... 2>/dev/null)" ]; then \ golangci-lint run ./...; \ else \ echo "$(YELLOW)No Go packages yet, skipping...$(NC)"; \ fi # ============================================================================ # 清理 # ============================================================================ clean: ## 清理构建产物 @echo "$(BLUE)Cleaning build artifacts...$(NC)" cargo clean rm -rf bin/ go clean # ============================================================================ # 开发环境 # ============================================================================ dev: ## 启动开发环境(数据库等) @echo "$(BLUE)Starting development environment...$(NC)" docker compose -f deployments/docker-compose.dev.yml up -d dev-stop: ## 停止开发环境 @echo "$(BLUE)Stopping development environment...$(NC)" docker compose -f deployments/docker-compose.dev.yml down # ============================================================================ # Docker # ============================================================================ docker-build: ## 构建 Docker 镜像 @echo "$(BLUE)Building Docker images...$(NC)" docker compose -f deployments/docker-compose.yml build docker-up: ## 启动 Docker 容器 @echo "$(BLUE)Starting Docker containers...$(NC)" docker compose -f deployments/docker-compose.yml up -d docker-down: ## 停止 Docker 容器 @echo "$(BLUE)Stopping Docker containers...$(NC)" docker compose -f deployments/docker-compose.yml down # ============================================================================ # 依赖管理 # ============================================================================ deps: ## 安装/更新依赖 @echo "$(BLUE)Updating dependencies...$(NC)" go mod download cargo fetch tidy: ## 整理依赖 @echo "$(BLUE)Tidying dependencies...$(NC)" go mod tidy cargo update --workspace # ============================================================================ # 文档 # ============================================================================ docs: ## 生成文档 @echo "$(BLUE)Generating documentation...$(NC)" cargo doc --workspace --no-deps --open # ============================================================================ # CI/CD # ============================================================================ ci: fmt lint test ## 运行 CI 检查(本地模拟) @echo "$(GREEN)✓ All CI checks passed!$(NC)"