Initial commit: DashCaddy v1.0
Full codebase including API server (32 modules + routes), dashboard frontend, DashCA certificate distribution, installer script, and deployment skills.
This commit is contained in:
79
deploy.ps1
Normal file
79
deploy.ps1
Normal file
@@ -0,0 +1,79 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user