Files
cmhub/init.ps1
T

73 lines
2.6 KiB
PowerShell

#!/usr/bin/env pwsh
# 标准启动与验证入口(Windows PowerShell 版),与 init.sh 等价,二选一:
# - Windows 原生 PowerShell:用本文件 ./init.ps1
# - WSL / Git Bash / macOS / Linux:用 ./init.sh
# 一条命令完成:依赖安装 -> 基础验证 -> 打印启动命令。
# 命令已按 Django 技术栈预填;T-001 骨架落地后如有调整(如改用 uv),同步更新
# docs/03-tech-stack.md、docs/00-ai-start-here.md 和 docs/current-state.md。
$ErrorActionPreference = "Stop"
Set-Location -Path $PSScriptRoot
# T-001 固定使用系统 Python 3.12,不使用虚拟环境。
$InstallCmd = "py -3.12 -m pip install -r requirements.txt"
$VerifyCmd = "py -3.12 manage.py check"
$StartCmd = "py -3.12 manage.py runserver"
function Assert-Configured {
param(
[string]$Name,
[string]$Value
)
if ($Value -like "__REPLACE_*") {
Write-Error "请先在 init.ps1 中替换 $Name。同步更新 docs/03-tech-stack.md、docs/00-ai-start-here.md 和 docs/current-state.md 中的命令。"
exit 2
}
}
Assert-Configured -Name "InstallCmd" -Value $InstallCmd
Assert-Configured -Name "VerifyCmd" -Value $VerifyCmd
Assert-Configured -Name "StartCmd" -Value $StartCmd
Write-Host "==> 当前目录: $($PWD.Path)"
Write-Host "==> 校验 Python 版本"
$PythonVersion = py -3.12 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}')"
if ($LASTEXITCODE -ne 0) {
Write-Error "无法运行 py -3.12。请安装 Python 3.12/3.13,并确保 py launcher 可用。"
exit 3
}
$VersionParts = $PythonVersion.Trim().Split(".")
$MajorVersion = [int]$VersionParts[0]
$MinorVersion = [int]$VersionParts[1]
if ($MajorVersion -ne 3 -or $MinorVersion -lt 12 -or $MinorVersion -ge 14) {
Write-Error "Python 版本必须满足 >=3.12,<3.14,当前为 $PythonVersion。"
exit 3
}
Write-Host " Python $PythonVersion"
if (-not (Test-Path "manage.py")) {
Write-Error "未找到 manage.py。Django 骨架尚未初始化(见 docs/06-tasks.md 的 T-001)。完成 T-001 后本脚本即可正常运行。"
exit 1
}
Write-Host "==> 同步依赖"
Invoke-Expression $InstallCmd
Write-Host "==> 运行基础验证"
Invoke-Expression $VerifyCmd
Write-Host "==> 启动命令"
Write-Host " $StartCmd"
if ($env:RUN_START_COMMAND -eq "1") {
Write-Host "==> 启动应用"
Invoke-Expression $StartCmd
} else {
Write-Host "如果希望 init.ps1 直接启动应用,请设置环境变量 RUN_START_COMMAND=1。"
Write-Host "如果基础验证失败,先修复基线状态,不要在坏的起点上继续叠新功能。"
}