#!/usr/bin/env bash # 标准启动与验证入口(Unix shell 版),与 init.ps1 等价,二选一: # - WSL / Git Bash / macOS / Linux:用本文件 ./init.sh # - Windows 原生 PowerShell:用 ./init.ps1 # 一条命令完成:依赖安装 -> 基础验证 -> 打印启动命令。 # 命令已按 Django 技术栈预填;T-001 骨架落地后如有调整(如改用 uv),同步更新 # docs/03-tech-stack.md、docs/00-ai-start-here.md 和 docs/current-state.md。 set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$ROOT_DIR" # T-001 固定使用系统 Python 3.12,不使用虚拟环境。 INSTALL_CMD=(python3.12 -m pip install -r requirements.txt) VERIFY_CMD=(python3.12 manage.py check) START_CMD=(python3.12 manage.py runserver) ensure_configured() { local name="$1" local first="$2" if [[ "$first" == __REPLACE_* ]]; then echo "ERROR: 请先在 init.sh 中替换 ${name}。" echo " 同步更新 docs/03-tech-stack.md、docs/00-ai-start-here.md 和 docs/current-state.md 中的命令。" exit 2 fi } ensure_configured "INSTALL_CMD" "${INSTALL_CMD[0]}" ensure_configured "VERIFY_CMD" "${VERIFY_CMD[0]}" ensure_configured "START_CMD" "${START_CMD[0]}" echo "==> 当前目录: $PWD" echo "==> 校验 Python 版本" if ! PYTHON_VERSION="$(python3.12 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}")' 2>/dev/null)"; then echo "ERROR: 无法运行 python3.12。请安装 Python 3.12/3.13,并确保命令可用。" exit 3 fi IFS=. read -r PY_MAJOR PY_MINOR _ <<< "$PYTHON_VERSION" if [ "$PY_MAJOR" -ne 3 ] || [ "$PY_MINOR" -lt 12 ] || [ "$PY_MINOR" -ge 14 ]; then echo "ERROR: Python 版本必须满足 >=3.12,<3.14,当前为 ${PYTHON_VERSION}。" exit 3 fi echo " Python ${PYTHON_VERSION}" if [ ! -f "manage.py" ]; then echo "ERROR: 未找到 manage.py。Django 骨架尚未初始化(见 docs/06-tasks.md 的 T-001)。" echo " 完成 T-001 后本脚本即可正常运行。" exit 1 fi echo "==> 同步依赖" "${INSTALL_CMD[@]}" echo "==> 运行基础验证" "${VERIFY_CMD[@]}" echo "==> 启动命令" printf ' %q' "${START_CMD[@]}" printf '\n' if [ "${RUN_START_COMMAND:-0}" = "1" ]; then echo "==> 启动应用" exec "${START_CMD[@]}" fi echo "如果希望 init.sh 直接启动应用,请设置 RUN_START_COMMAND=1。" echo "如果基础验证失败,先修复基线状态,不要在坏的起点上继续叠新功能。"