83 lines
2.9 KiB
PowerShell
83 lines
2.9 KiB
PowerShell
# Вызывает deploy-ssh.sh через bash (Git for Windows или bash в PATH).
|
||
# Запускайте из корня репозитория или откуда угодно — скрипт перейдёт в root.
|
||
|
||
param(
|
||
[switch]$FrontendOnly,
|
||
[switch]$BackendOnly,
|
||
[switch]$All,
|
||
[switch]$DryRun,
|
||
[switch]$SkipBuild,
|
||
[switch]$Help
|
||
)
|
||
|
||
$ErrorActionPreference = "Stop"
|
||
$scriptsDir = $PSScriptRoot
|
||
$repoRoot = (Resolve-Path (Join-Path $scriptsDir "..")).Path
|
||
|
||
$gitUsrRs = "C:\Program Files\Git\usr\bin\rsync.exe"
|
||
$chocoRsDir = "C:\ProgramData\chocolatey\bin"
|
||
$chocoRs = Join-Path $chocoRsDir "rsync.exe"
|
||
if (Test-Path -LiteralPath $gitUsrRs) {
|
||
$env:Path = "C:\Program Files\Git\usr\bin;$env:Path"
|
||
} elseif (Test-Path -LiteralPath $chocoRs) {
|
||
$env:Path = "$chocoRsDir;$env:Path"
|
||
}
|
||
|
||
function Show-Help {
|
||
@"
|
||
Использование (рядом с репозиторием или из любого каталога):
|
||
.\scripts\deploy-ssh.ps1 [-FrontendOnly] [-BackendOnly] [-All]
|
||
.\scripts\deploy-ssh.ps1 -DryRun -BackendOnly
|
||
|
||
Конфиг: scripts/deploy.env (скопируйте из deploy.env.example).
|
||
|
||
Нужны: bash (Git for Windows) и rsync в PATH. rsync без Git: установите пакет (например, choco install rsync).
|
||
|
||
Если npm ci падает с EPERM на .node (Windows): остановите Vite/Node, затем снова .\scripts\deploy-ssh.ps1
|
||
Или: cd client; npm run build; затем .\scripts\deploy-ssh.ps1 -SkipBuild (только выкладка dist).
|
||
"@ | Write-Host
|
||
}
|
||
|
||
if ($Help) { Show-Help; exit 0 }
|
||
|
||
$bash = Get-Command bash -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source
|
||
if (-not $bash) {
|
||
$git = "C:\Program Files\Git\bin\bash.exe"
|
||
if (Test-Path $git) { $bash = $git }
|
||
}
|
||
if (-not $bash) {
|
||
Write-Error "Не найден bash. Установите Git for Windows и добавьте Git\usr\bin в PATH (rsync)."
|
||
}
|
||
|
||
if (-not (Get-Command rsync -ErrorAction SilentlyContinue)) {
|
||
Write-Error "Не найден rsync. Установите: choco install rsync -y либо добавьте C:\Program Files\Git\usr\bin в PATH."
|
||
}
|
||
|
||
$argsToSh = [System.Collections.ArrayList]@()
|
||
if ($FrontendOnly) { [void]$argsToSh.Add("--frontend-only") }
|
||
elseif ($BackendOnly) { [void]$argsToSh.Add("--backend-only") }
|
||
else { [void]$argsToSh.Add("--all") }
|
||
|
||
if ($DryRun) { [void]$argsToSh.Add("--dry-run") }
|
||
if ($SkipBuild) { [void]$argsToSh.Add("--skip-build") }
|
||
|
||
function ConvertTo-MsysPath {
|
||
param([string]$Path)
|
||
$full = if (Test-Path $Path) { (Resolve-Path -LiteralPath $Path).Path } else { $Path }
|
||
if ($full -match '^([A-Za-z]):[\\/](.*)$') {
|
||
return "/" + $Matches[1].ToLower() + "/" + ($Matches[2] -replace '\\', '/')
|
||
}
|
||
return ($full -replace '\\', '/')
|
||
}
|
||
|
||
$sh = Join-Path $scriptsDir "deploy-ssh.sh"
|
||
$shUnix = ConvertTo-MsysPath $sh
|
||
Push-Location $repoRoot
|
||
try {
|
||
& $bash $shUnix @argsToSh
|
||
exit $LASTEXITCODE
|
||
}
|
||
finally {
|
||
Pop-Location
|
||
}
|