Ctrl K
ComunidadGuías…

scripts/backup.ps1

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env pwsh
# Capture a gramsrv backup bundle with sensible defaults for a monolith
# deployment. Every unrecognised argument is forwarded to gramsrv-backup.
#
#   ./scripts/backup.ps1 -Out D:\gramsrv-backup\20261004 -Component all
#
# The tool reads .env for database credentials, so nothing secret is passed on
# the command line.
[CmdletBinding()]
param(
    [Parameter(ValueFromRemainingArguments = $true)]
    [string[]]$ToolArgs
)

$ErrorActionPreference = 'Stop'

$RepoRoot = Split-Path -Parent $PSScriptRoot
$Binary = Join-Path $RepoRoot 'bin/gramsrv-backup.exe'

function Test-HasFlag([string]$Name, [string[]]$Items) {
    foreach ($item in $Items) {
        if ($item -eq $Name -or $item.StartsWith("$Name=")) { return $true }
    }
    return $false
}

function Build-Binary {
    if (-not (Get-Command go -ErrorAction SilentlyContinue)) {
        throw "go is required to build $Binary"
    }
    Write-Host "building $Binary"
    # Serial compilation keeps peak memory low enough for small hosts.
    Push-Location $RepoRoot
    try {
        $env:GOFLAGS = '-p=1'
        go build -o $Binary ./cmd/gramsrv-backup
        if ($LASTEXITCODE -ne 0) { throw "go build failed" }
    } finally {
        Pop-Location
    }
}

if ($ToolArgs -contains '--help') {
    Get-Content -Raw (Join-Path $PSScriptRoot 'backup.sh') | Select-String -Pattern '(?s)usage\(\).*?^}' | ForEach-Object { $_.Matches.Value }
    exit 0
}

if (-not (Test-Path $Binary)) { Build-Binary }

$forwarded = @()
if (-not (Test-HasFlag '--out' $ToolArgs)) {
    $stamp = (Get-Date).ToUniversalTime().ToString('yyyyMMdd')
    $forwarded += @('--out', (Join-Path (Split-Path -Parent $RepoRoot) "gramsrv-backup-$stamp"))
}
if (-not (Test-HasFlag '--repo-dir' $ToolArgs)) {
    $forwarded += @('--repo-dir', $RepoRoot)
}
if (-not (Test-HasFlag '--pg-tools' $ToolArgs) -and (Get-Command docker -ErrorAction SilentlyContinue)) {
    $forwarded += @('--pg-tools', 'docker')
}
if (-not (Test-HasFlag '--redis-tools' $ToolArgs) -and (Get-Command docker -ErrorAction SilentlyContinue)) {
    $forwarded += @('--redis-tools', 'docker')
}

Push-Location $RepoRoot
try {
    & $Binary backup @forwarded @ToolArgs
    exit $LASTEXITCODE
} finally {
    Pop-Location
}