Files
Art-gallery/infra/scripts/sync-images-to-prod.ps1
T
Danila KhodjaefandCursor 313666a4ab Make dev->prod deploy work for non-superuser role and fix image sync.
restore-db-data.js: fall back to multi-pass insert when the DB role cannot set session_replication_role, and parse multi-line INSERT values (bios) as whole statements. sync-images-to-prod.ps1: fix SMB root variable typo and fail fast with guidance when the share is not mapped. Document SMB mapping, non-superuser restore, and a troubleshooting table in the release runbook.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 15:26:35 +03:00

57 lines
1.8 KiB
PowerShell

# Sync dev image files to TrueNAS production volume.
#
# Usage (from repo root):
# npm run devtoprod:images
# Copies data/images/ → \\192.168.10.122\Gallery\data\images
# Map the share first if needed: net use \\192.168.10.122\Gallery /user:YOUR_TRUENAS_USER
param(
[string]$Source = (Join-Path $PSScriptRoot "..\..\data\images"),
[string]$Dest = "\\192.168.10.122\Gallery\data\images",
[switch]$SkipConfirm
)
$ErrorActionPreference = "Stop"
$Source = (Resolve-Path $Source -ErrorAction Stop).Path
Write-Host "Source: $Source"
Write-Host "Dest: $Dest"
if (-not $SkipConfirm) {
$confirm = Read-Host "Copy all files (skip older)? Type yes"
if ($confirm -ne "yes") {
Write-Host "Aborted."
exit 0
}
}
$smbRoot = "\\192.168.10.122\Gallery"
if ($env:SMB_USER -and $env:SMB_PASSWORD) {
Write-Host "Mapping $smbRoot ..."
net use $smbRoot /user:$env:SMB_USER $env:SMB_PASSWORD 2>&1 | Out-Host
} elseif (-not (Test-Path $smbRoot)) {
Write-Warning "Cannot access $smbRoot (not authenticated)."
Write-Warning "Map the share first, e.g.:"
Write-Warning (' net use ' + $smbRoot + ' /user:YOUR_TRUENAS_USER')
Write-Warning 'or set $env:SMB_USER and $env:SMB_PASSWORD before running this script.'
Write-Error 'SMB share not reachable - aborting before robocopy.'
exit 1
}
try {
if (-not (Test-Path $Dest)) {
New-Item -ItemType Directory -Path $Dest -Force | Out-Null
}
} catch {
Write-Host "Note: could not pre-create dest (will rely on robocopy): $($_.Exception.Message)"
}
robocopy $Source $Dest /E /XO /R:2 /W:3 /NFL /NDL /NJH /NJS
$code = $LASTEXITCODE
if ($code -ge 8) {
Write-Error "robocopy failed with exit code $code"
exit $code
}
Write-Host "Image sync complete (robocopy exit $code)."