32 lines
1.5 KiB
PowerShell
32 lines
1.5 KiB
PowerShell
# niikn-kb-sync.ps1 — автосинхронизация базы знаний НИИКН с Gitea
|
||
# Запускается Scheduled Task каждые ~7 минут. Тянет изменения с сервера,
|
||
# коммитит локальные правки и отправляет обратно. Лог: niikn-kb-sync.log
|
||
$ErrorActionPreference = "Continue"
|
||
$base = "C:\Users\msi\Documents\niikn-knowledge-base"
|
||
$git = "C:\Program Files\Git\cmd\git.exe"
|
||
$log = "$base\niikn-kb-sync.log"
|
||
|
||
function Log($m) { "$([DateTime]::Now.ToString('yyyy-MM-dd HH:mm:ss')) $m" | Add-Content -Path $log -Encoding UTF8 }
|
||
|
||
# mutex — не запускать второй экземпляр
|
||
$mtx = New-Object System.Threading.Mutex($false, "niikn-kb-sync")
|
||
if (-not $mtx.WaitOne(0)) { exit 0 }
|
||
|
||
try {
|
||
Set-Location $base
|
||
# подтянуть с сервера (rebase, чтобы не плодить merge-коммиты)
|
||
& $git pull --rebase --autostash origin main 2>&1 | Out-Null
|
||
# есть ли локальные изменения?
|
||
$status = & $git status --porcelain
|
||
if ($status) {
|
||
& $git add -A 2>&1 | Out-Null
|
||
& $git commit -m "auto-sync $([DateTime]::Now.ToString('yyyy-MM-dd HH:mm'))" 2>&1 | Out-Null
|
||
Log "committed local changes"
|
||
}
|
||
# отправить (если есть что)
|
||
$push = & $git push origin main 2>&1
|
||
if ($LASTEXITCODE -eq 0) { Log "sync ok" } else { Log "push issue: $push" }
|
||
}
|
||
catch { Log "ERROR: $_" }
|
||
finally { $mtx.ReleaseMutex() }
|