Full codebase including API server (32 modules + routes), dashboard frontend, DashCA certificate distribution, installer script, and deployment skills.
80 lines
3.1 KiB
PowerShell
80 lines
3.1 KiB
PowerShell
# DashCaddy Deployment Script
|
|
# Deploys changes from Dev (E:) to Prod (C:)
|
|
|
|
$DevRoot = "E:\CaddyCerts\sites"
|
|
$ProdRoot = "C:\Caddy"
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
Write-Host "Deploying DashCaddy Changes..." -ForegroundColor Cyan
|
|
|
|
# 1. Pre-deploy validation - syntax check all JS files
|
|
Write-Host "Validating JavaScript syntax..." -ForegroundColor Yellow
|
|
$syntaxErrors = 0
|
|
Get-ChildItem "$DevRoot\dashcaddy-api" -Filter "*.js" | ForEach-Object {
|
|
$result = & node -c $_.FullName 2>&1
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Syntax error in $($_.Name): $result"
|
|
$syntaxErrors++
|
|
}
|
|
}
|
|
Get-ChildItem "$DevRoot\dashcaddy-api\routes" -Filter "*.js" | ForEach-Object {
|
|
$result = & node -c $_.FullName 2>&1
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Syntax error in routes/$($_.Name): $result"
|
|
$syntaxErrors++
|
|
}
|
|
}
|
|
if ($syntaxErrors -gt 0) {
|
|
Write-Error "Aborting deploy: $syntaxErrors syntax error(s) found."
|
|
exit 1
|
|
}
|
|
Write-Host " All files pass syntax check." -ForegroundColor Green
|
|
|
|
# 2. Update Frontend
|
|
Write-Host "Updating Dashboard UI..." -ForegroundColor Yellow
|
|
if (Test-Path "$ProdRoot\sites\status") {
|
|
Copy-Item "$DevRoot\status\index.html" "$ProdRoot\sites\status\index.html" -Force
|
|
} else {
|
|
Write-Warning "Target status folder not found. Skipping UI update."
|
|
}
|
|
|
|
# 3. Update Backend API
|
|
Write-Host "Updating API Server..." -ForegroundColor Yellow
|
|
if (Test-Path "$ProdRoot\sites\dashcaddy-api") {
|
|
# Copy all JS files, package files, API spec
|
|
Get-ChildItem "$DevRoot\dashcaddy-api" -Filter "*.js" | Copy-Item -Destination "$ProdRoot\sites\dashcaddy-api\" -Force
|
|
Copy-Item "$DevRoot\dashcaddy-api\package.json" "$ProdRoot\sites\dashcaddy-api\" -Force
|
|
Copy-Item "$DevRoot\dashcaddy-api\package-lock.json" "$ProdRoot\sites\dashcaddy-api\" -Force -ErrorAction SilentlyContinue
|
|
Copy-Item "$DevRoot\dashcaddy-api\openapi.yaml" "$ProdRoot\sites\dashcaddy-api\" -Force -ErrorAction SilentlyContinue
|
|
|
|
# Copy route modules
|
|
if (!(Test-Path "$ProdRoot\sites\dashcaddy-api\routes")) {
|
|
New-Item -ItemType Directory -Path "$ProdRoot\sites\dashcaddy-api\routes" | Out-Null
|
|
}
|
|
Copy-Item "$DevRoot\dashcaddy-api\routes\*" "$ProdRoot\sites\dashcaddy-api\routes\" -Force
|
|
|
|
# 4. Rebuild and Restart
|
|
Write-Host "Rebuilding API Container..." -ForegroundColor Yellow
|
|
Set-Location $ProdRoot
|
|
docker-compose up -d --build dashcaddy-api
|
|
|
|
# 5. Post-deploy health check
|
|
Write-Host "Waiting for container startup..." -ForegroundColor Yellow
|
|
Start-Sleep -Seconds 5
|
|
try {
|
|
$health = Invoke-RestMethod -Uri "http://localhost:3001/health" -TimeoutSec 10 -ErrorAction Stop
|
|
if ($health.status -eq 'ok') {
|
|
Write-Host " Health check passed." -ForegroundColor Green
|
|
} else {
|
|
Write-Warning "Health check returned unexpected status: $($health.status)"
|
|
}
|
|
} catch {
|
|
Write-Warning "Health check failed: $_"
|
|
Write-Warning "Check logs with: docker logs --tail 30 dashcaddy-api"
|
|
}
|
|
} else {
|
|
Write-Warning "Target API folder not found. Skipping API update."
|
|
}
|
|
|
|
Write-Host "Deployment Complete! Refresh your dashboard." -ForegroundColor Green
|