This commit is contained in:
@kirill.komarov
2026-05-10 16:49:55 +05:00
parent f56d6a79fb
commit e67d8bdc0a
10 changed files with 935 additions and 113 deletions
+79
View File
@@ -0,0 +1,79 @@
# Вызывает 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).
"@ | 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
}