# Makefile for Aerich and Tortoise ORM management

# 告诉 Make 这些目标不是实际文件名
.PHONY: help init init-db migrate upgrade downgrade reset aerich test coverage build clean publish testpypi pypi

# 帮助文档，执行make不带参数
.DEFAULT: help

# 设置默认的配置路径和迁移目录
CONFIG_PATH = algo_flow.cores.model.TORTOISE_ORM
MIGRATIONS_DIR = ./migrations

# 显示帮助信息
help:
	@echo "Usage: make [target]"
	@echo ""
	@echo "Targets:"
	@echo "  init            初始化 Aerich"
	@echo "  init-db         初始化迁移目录并同步数据库"
	@echo "  migrate         生成新的迁移文件，必须提供迁移名称"
	@echo "  upgrade         应用所有未应用的迁移"
	@echo "  downgrade       回滚最后一个迁移"
	@echo "  reset           清除数据库和迁移记录"
	@echo "  test            运行所有单元测试"
	@echo "  coverage        生成测试覆盖率报告"
	@echo "  pre-commit      运行 pre-commit 检查"
	@echo "  build           构建包"
	@echo "  clean           清理构建文件"
	@echo "  testpypi        发布到 TestPyPI"
	@echo "  pypi            发布到 PyPI"
	@echo "  help            显示帮助信息"


# 初始化 Aerich
init:
	@aerich init -t $(CONFIG_PATH)

# 初始化迁移目录并同步数据库
init-db:
	@aerich init-db

# 生成新的迁移文件，必须提供迁移名称
migrate:
	aerich migrate

# 应用所有未应用的迁移
upgrade:
	@aerich upgrade

# 回滚最后一个迁移
downgrade:
	@aerich downgrade

# 清除数据库和迁移记录
reset:
	@aerich downgrade
	@rm -rf $(MIGRATIONS_DIR)

# 运行所有单元测试
test:
	@pytest tests/


# 生成测试覆盖率报告
coverage:
	@pytest --cov=. tests/ --cov-report=html
	@echo "Coverage report generated in htmlcov/index.html"
	@open htmlcov/index.html

# 运行 pre-commit 检查
pre-commit:
	@pre-commit run --all-files
	@echo "Pre-commit checks completed."

# 构建包
build:
	@echo "构建 AlgoFlow 包..."
	@uv build
	@echo "包构建完成！"

# 清理构建文件
clean:
	@echo "清理构建文件..."
	@rm -rf build/ dist/ *.egg-info/
	@echo "构建文件已清理！"

# 发布到 TestPyPI
testpypi: build
	@echo "发布到 TestPyPI..."
	@uv run twine check dist/*
	@uv run twine upload --repository testpypi dist/*
	@echo "已成功发布到 TestPyPI！"

# 发布到 PyPI
pypi: build
	@echo "发布到 PyPI..."
	@uv run twine check dist/*
	@uv run twine upload dist/*
	@echo "已成功发布到 PyPI！"