#!/usr/bin/env sh set -eu ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) cd "$ROOT_DIR" PROJECT_VENV="$ROOT_DIR/.venv" case "${VIRTUAL_ENV:-}" in ""|"$PROJECT_VENV"|"$PROJECT_VENV/") ;; *) unset VIRTUAL_ENV ;; esac show_help() { cat <<'EOF' iTi-Flask 开发脚本 用法: ./scripts/iti.sh <命令> [参数] 常用命令: help 显示帮助 install 安装开发依赖:uv sync --extra dev test 运行测试:uv run pytest -q check 运行测试和 mypy serve [端口] 启动框架示例应用,默认 8000 migrate 执行当前仓库 Alembic upgrade head migration <说明> 生成 migration,说明建议以作者名开头 heads 查看 Alembic heads current 查看当前 Alembic 版本 make-app <目录> [包名] 从当前框架仓库模板生成业务项目 make-system-app <目录> [包名] 生成带 iti-system 的业务项目 release [版本] 发布框架:测试、改版本、提交、打 tag、推送 示例: ./scripts/iti.sh install ./scripts/iti.sh test ./scripts/iti.sh serve 8000 ./scripts/iti.sh make-app ../hsyh-erp hsyh_erp ./scripts/iti.sh make-system-app ../hsyh-mes-phase2 hsyh_mes_phase2 说明: - 默认生成项目使用 copier-template 里的 Git 依赖配置。 - 临时本地验证可在生成时按 copier 交互改成 file://。 EOF } command=${1:-help} shift || true case "$command" in help|-h|--help) show_help ;; install) uv sync --extra dev ;; test) uv run pytest -q ;; check) uv run pytest -q uv run mypy ;; serve) port=${1:-8000} uv run uvicorn iti.app:create_app --factory --reload --port "$port" ;; migrate) uv run alembic upgrade head ;; migration) message=${1:-} if [ -z "$message" ]; then echo "缺少 migration 说明。示例:./scripts/iti.sh migration \"alice add order table\"" >&2 exit 2 fi uv run alembic revision --autogenerate -m "$message" ;; heads) uv run alembic heads ;; current) uv run alembic current ;; release) uv run python scripts/release.py "$@" ;; make-app|make-system-app) target=${1:-} package=${2:-} if [ -z "$target" ]; then echo "缺少目标目录。示例:./scripts/iti.sh make-app ../my-app my_app" >&2 exit 2 fi if [ -z "$package" ]; then package=$(basename "$target" | tr '-' '_') fi include_system=false if [ "$command" = "make-system-app" ]; then include_system=true fi uvx copier copy --defaults --vcs-ref HEAD "$ROOT_DIR" "$target" \ -d project_name="$(basename "$target")" \ -d project_slug="$package" \ -d include_system="$include_system" ;; *) echo "未知命令:$command" >&2 echo >&2 show_help >&2 exit 2 ;; esac