在前后端开发联调前 的提交20260223

This commit is contained in:
Neo
2026-02-23 23:02:20 +08:00
parent 254ccb1e77
commit fafc95e64c
1142 changed files with 10366960 additions and 36957 deletions

View File

@@ -0,0 +1,230 @@
<#
.SYNOPSIS
服务器环境初始化脚本:删除 skip-worktree 排除的文件/目录 + 创建 export 目录树。
.DESCRIPTION
在服务器上 git clone + setup-server-git.py 之后运行。
1. 删除已被 skip-worktree 标记的目录和散文件(释放磁盘空间)
2. 创建完整的 export/ 目录树ETL/SYSTEM/BACKEND 三大类)
三个环境都需要 export 目录LOG、JSON、REPORTS 等运行时输出在每个环境都会产生)。
.PARAMETER Envs
要初始化的环境列表,默认 test,prod。
可选值test, prod逗号分隔
.EXAMPLE
# 初始化 test + prod默认
.\init-server-env.ps1
# 只初始化 test
.\init-server-env.ps1 -Envs test
# 只初始化 prod
.\init-server-env.ps1 -Envs prod
#>
param(
[string[]]$Envs = @("test", "prod")
)
$ErrorActionPreference = "Stop"
# ============================================================================
# 配置
# ============================================================================
# 服务器根目录
$ServerRoot = "D:\NeoZQYY"
# 环境 → repo 路径映射
$EnvPaths = @{
"test" = "$ServerRoot\test\repo"
"prod" = "$ServerRoot\prod\repo"
}
# skip-worktree 后可安全删除的目录(与 setup-server-git.py DELETABLE_DIRS 一致)
$DeletableDirs = @(
"export"
"docs"
"tests"
"samples"
"infra"
".kiro"
".hypothesis"
".pytest_cache"
"apps\miniprogram"
"scripts\ops"
"scripts\audit"
"scripts\migrate"
)
# 可安全删除的根目录散文件(与 setup-server-git.py SKIP_PREFIXES 中的散文件一致)
$DeletableFiles = @(
"coach-detail-full.png"
"customer-detail-full.png"
"perf-records-current.png"
"white-screen-debug.png"
"NeoZQYY.code-workspace"
"start-admin.bat"
".kiroignore"
)
# export 目录树(所有环境通用,运行时输出在每个环境都会产生)
$ExportDirs = @(
"export\ETL-Connectors\feiqiu\JSON"
"export\ETL-Connectors\feiqiu\LOGS"
"export\ETL-Connectors\feiqiu\REPORTS"
"export\SYSTEM\LOGS"
"export\SYSTEM\REPORTS\dataflow_analysis"
"export\SYSTEM\REPORTS\field_audit"
"export\SYSTEM\REPORTS\full_dataflow_doc"
"export\SYSTEM\CACHE\api_samples"
"export\BACKEND\LOGS"
)
# ============================================================================
# 函数
# ============================================================================
function Remove-SkipWorktreeItems {
<#
.SYNOPSIS
删除指定 repo 下已被 skip-worktree 标记的目录和散文件。
#>
param([string]$RepoPath)
Write-Host "`n [删除] 清理 skip-worktree 排除的目录和文件..." -ForegroundColor Yellow
$freedMB = 0
# 删除目录
foreach ($dir in $DeletableDirs) {
$fullPath = Join-Path $RepoPath $dir
if (Test-Path $fullPath) {
$size = (Get-ChildItem $fullPath -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
$sizeMB = [math]::Round($size / 1MB, 1)
Remove-Item $fullPath -Recurse -Force
Write-Host " 已删除: $dir/ ($sizeMB MB)" -ForegroundColor Red
$freedMB += $sizeMB
} else {
Write-Host " 跳过: $dir/ (不存在)" -ForegroundColor DarkGray
}
}
# 删除散文件
foreach ($file in $DeletableFiles) {
$fullPath = Join-Path $RepoPath $file
if (Test-Path $fullPath) {
$size = (Get-Item $fullPath).Length
$sizeMB = [math]::Round($size / 1MB, 2)
Remove-Item $fullPath -Force
Write-Host " 已删除: $file ($sizeMB MB)" -ForegroundColor Red
$freedMB += $sizeMB
}
}
# 删除根目录下所有 .png 文件server-exclude.txt 中 *.png 规则)
Get-ChildItem $RepoPath -Filter "*.png" -File -ErrorAction SilentlyContinue | ForEach-Object {
$sizeMB = [math]::Round($_.Length / 1MB, 2)
Remove-Item $_.FullName -Force
Write-Host " 已删除: $($_.Name) ($sizeMB MB)" -ForegroundColor Red
$freedMB += $sizeMB
}
Write-Host " 共释放: $freedMB MB" -ForegroundColor Green
}
function New-ExportTree {
<#
.SYNOPSIS
在指定 repo 下创建完整的 export 目录树。
#>
param([string]$RepoPath)
Write-Host "`n [创建] 初始化 export 目录树..." -ForegroundColor Yellow
foreach ($dir in $ExportDirs) {
$fullPath = Join-Path $RepoPath $dir
if (-not (Test-Path $fullPath)) {
New-Item -ItemType Directory -Path $fullPath -Force | Out-Null
Write-Host " 已创建: $dir/" -ForegroundColor Cyan
} else {
Write-Host " 已存在: $dir/" -ForegroundColor DarkGray
}
}
}
function Test-GitSetup {
<#
.SYNOPSIS
检查 setup-server-git.py 是否已运行(通过检查 .git/info/exclude 内容)。
#>
param([string]$RepoPath)
$excludeFile = Join-Path $RepoPath ".git\info\exclude"
if (-not (Test-Path $excludeFile)) {
return $false
}
$content = Get-Content $excludeFile -Raw -ErrorAction SilentlyContinue
return ($content -match "server-exclude")
}
# ============================================================================
# 主流程
# ============================================================================
Write-Host "============================================" -ForegroundColor White
Write-Host " NeoZQYY 服务器环境初始化" -ForegroundColor White
Write-Host " 目标环境: $($Envs -join ', ')" -ForegroundColor White
Write-Host "============================================" -ForegroundColor White
foreach ($env in $Envs) {
$repoPath = $EnvPaths[$env]
if (-not $repoPath) {
Write-Host "`n[错误] 未知环境: $env(可选: test, prod" -ForegroundColor Red
continue
}
Write-Host "`n========== 环境: $env ==========" -ForegroundColor Magenta
Write-Host " 路径: $repoPath"
# 检查 repo 是否存在
if (-not (Test-Path $repoPath)) {
Write-Host " [警告] 目录不存在,跳过。请先 git clone。" -ForegroundColor Yellow
continue
}
# 检查 setup-server-git.py 是否已运行
if (-not (Test-GitSetup $repoPath)) {
Write-Host " [警告] 未检测到 setup-server-git.py 的配置。" -ForegroundColor Yellow
Write-Host " 建议先运行: python scripts/server/setup-server-git.py" -ForegroundColor Yellow
$answer = Read-Host " 是否继续删除操作?(y/N)"
if ($answer -ne "y" -and $answer -ne "Y") {
Write-Host " 已跳过 $env 环境的删除操作。" -ForegroundColor DarkGray
# 仍然创建 export 目录
New-ExportTree -RepoPath $repoPath
continue
}
}
# 步骤 1删除排除的文件/目录
Remove-SkipWorktreeItems -RepoPath $repoPath
# 步骤 2创建 export 目录树
New-ExportTree -RepoPath $repoPath
Write-Host "`n [完成] $env 环境初始化完毕。" -ForegroundColor Green
}
Write-Host "`n============================================" -ForegroundColor White
Write-Host " 全部完成。" -ForegroundColor Green
Write-Host ""
Write-Host " 后续步骤:" -ForegroundColor White
Write-Host " 1. 手动创建各环境的 .env 文件(参考 .env.template" -ForegroundColor White
Write-Host " 2. 确认 .env 中的 export 路径指向 repo/export/ 下对应子目录" -ForegroundColor White
Write-Host " 3. 运行 uv sync --all-packages 安装依赖" -ForegroundColor White
Write-Host "============================================" -ForegroundColor White