forked from sagnik/Project_Velocity
141 lines
4.7 KiB
PowerShell
141 lines
4.7 KiB
PowerShell
param(
|
|
[string]$BundleRoot = "",
|
|
[string]$RepoRoot = "F:\Workin In Progress\DESINEURON\GITLAB\Project_Velocity"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
if (-not $BundleRoot) {
|
|
$candidate = Join-Path $RepoRoot ".local-dev\source-bundles"
|
|
if (-not (Test-Path $candidate)) {
|
|
throw "Bundle root not provided and no source bundles found at $candidate"
|
|
}
|
|
|
|
$latest = Get-ChildItem -Path $candidate -Directory | Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
|
if (-not $latest) {
|
|
throw "No extracted bundle directories found under $candidate"
|
|
}
|
|
$BundleRoot = $latest.FullName
|
|
}
|
|
|
|
$envExport = Join-Path $BundleRoot "backend.env.export"
|
|
$dumpFile = Join-Path $BundleRoot "velocity.dump"
|
|
|
|
if (-not (Test-Path $envExport)) {
|
|
throw "Missing backend.env.export in $BundleRoot"
|
|
}
|
|
|
|
if (-not (Test-Path $dumpFile)) {
|
|
throw "Missing velocity.dump in $BundleRoot"
|
|
}
|
|
|
|
$localRoot = Join-Path $RepoRoot ".local-dev"
|
|
$backendRoot = Join-Path $localRoot "backend"
|
|
$dbRoot = Join-Path $localRoot "db"
|
|
$assetsRoot = Join-Path $localRoot "assets"
|
|
|
|
New-Item -ItemType Directory -Force -Path $localRoot, $backendRoot, $dbRoot, $assetsRoot | Out-Null
|
|
|
|
$targetEnv = Join-Path $backendRoot ".env.local"
|
|
$restoreScript = Join-Path $dbRoot "restore_local_snapshot.ps1"
|
|
$composeFile = Join-Path $dbRoot "docker-compose.local-db.yml"
|
|
$copiedDump = Join-Path $dbRoot "velocity.dump"
|
|
|
|
Copy-Item $dumpFile $copiedDump -Force
|
|
|
|
$rawEnv = @{}
|
|
Get-Content $envExport | ForEach-Object {
|
|
if ($_ -match '^\s*#' -or $_ -notmatch '=') {
|
|
return
|
|
}
|
|
$key, $value = $_ -split '=', 2
|
|
$rawEnv[$key.Trim()] = $value.Trim()
|
|
}
|
|
|
|
$localEnvLines = [System.Collections.Generic.List[string]]::new()
|
|
$localEnvLines.Add("VELOCITY_DB_HOST=127.0.0.1")
|
|
$localEnvLines.Add("VELOCITY_DB_PORT=54329")
|
|
$localEnvLines.Add("VELOCITY_DB_NAME=velocity_local")
|
|
$localEnvLines.Add("VELOCITY_DB_USER=velocity_local")
|
|
$localEnvLines.Add("VELOCITY_DB_PASSWORD=velocity_local")
|
|
$localEnvLines.Add("DATABASE_URL=postgresql://velocity_local:velocity_local@127.0.0.1:54329/velocity_local")
|
|
$localEnvLines.Add("CORS_ORIGINS=http://127.0.0.1:5173,http://localhost:5173,http://127.0.0.1:3000,http://localhost:3000")
|
|
|
|
if ($rawEnv.ContainsKey("VELOCITY_JWT_SECRET")) {
|
|
$localEnvLines.Add("VELOCITY_JWT_SECRET=$($rawEnv['VELOCITY_JWT_SECRET'])")
|
|
}
|
|
|
|
if ($rawEnv.ContainsKey("JWT_SECRET_KEY")) {
|
|
$localEnvLines.Add("JWT_SECRET_KEY=$($rawEnv['JWT_SECRET_KEY'])")
|
|
}
|
|
|
|
if ($rawEnv.ContainsKey("JWT_ALGORITHM")) {
|
|
$localEnvLines.Add("JWT_ALGORITHM=$($rawEnv['JWT_ALGORITHM'])")
|
|
}
|
|
|
|
if ($rawEnv.ContainsKey("JWT_EXP_MINUTES")) {
|
|
$localEnvLines.Add("JWT_EXP_MINUTES=$($rawEnv['JWT_EXP_MINUTES'])")
|
|
}
|
|
|
|
$localAssetsRoot = Join-Path $localRoot "assets"
|
|
$localEnvLines.Add("VELOCITY_ASSET_DIR=$localAssetsRoot")
|
|
|
|
Set-Content -Path $targetEnv -Value ($localEnvLines -join "`r`n") -Encoding UTF8
|
|
|
|
$compose = @"
|
|
services:
|
|
velocity-postgres-local:
|
|
image: postgres:16
|
|
container_name: velocity-postgres-local
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: velocity_local
|
|
POSTGRES_USER: velocity_local
|
|
POSTGRES_PASSWORD: velocity_local
|
|
ports:
|
|
- "54329:5432"
|
|
volumes:
|
|
- velocity_postgres_local_data:/var/lib/postgresql/data
|
|
|
|
volumes:
|
|
velocity_postgres_local_data:
|
|
"@
|
|
|
|
Set-Content -Path $composeFile -Value $compose -Encoding UTF8
|
|
|
|
$restoreTemplate = @'
|
|
param(
|
|
[string]$RepoRoot = "__REPO_ROOT__"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$DbRoot = Join-Path $RepoRoot ".local-dev\db"
|
|
$Compose = Join-Path $DbRoot "docker-compose.local-db.yml"
|
|
$Dump = Join-Path $DbRoot "velocity.dump"
|
|
|
|
docker compose -f $Compose up -d
|
|
Start-Sleep -Seconds 4
|
|
docker exec -i velocity-postgres-local dropdb --if-exists -U velocity_local velocity_local
|
|
docker exec -i velocity-postgres-local createdb -U velocity_local velocity_local
|
|
docker cp $Dump velocity-postgres-local:/tmp/velocity.dump
|
|
docker exec -i velocity-postgres-local pg_restore -U velocity_local -d velocity_local --clean --if-exists --no-owner --no-privileges /tmp/velocity.dump
|
|
|
|
Write-Host "Local PostgreSQL restore complete."
|
|
Write-Host "Use these local DB env values:"
|
|
Write-Host "VELOCITY_DB_HOST=127.0.0.1"
|
|
Write-Host "VELOCITY_DB_PORT=54329"
|
|
Write-Host "VELOCITY_DB_NAME=velocity_local"
|
|
Write-Host "VELOCITY_DB_USER=velocity_local"
|
|
Write-Host "VELOCITY_DB_PASSWORD=velocity_local"
|
|
'@
|
|
|
|
$restore = $restoreTemplate.Replace("__REPO_ROOT__", $RepoRoot)
|
|
|
|
Set-Content -Path $restoreScript -Value $restore -Encoding UTF8
|
|
|
|
Write-Host "Imported local bundle from $BundleRoot"
|
|
Write-Host "Backend env snapshot: $targetEnv"
|
|
Write-Host "DB dump copied to: $copiedDump"
|
|
Write-Host "Run this next:"
|
|
Write-Host "powershell -ExecutionPolicy Bypass -File `"$restoreScript`""
|