gplx/scripts/deploy.ps1

154 lines
5.3 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<#
.SYNOPSIS
Deployt GPLX MediaWiki auf den Bitpalast-Server.
.PARAMETER Mode
skin - Cavendish-Skin synchronisieren (Standard, schnell)
templates - Wiki-Seiten-Vorlagen synchronisieren
all - Skin + Templates
initial - Erstinstallation: gesamten MediaWiki-Core übertragen
.EXAMPLE
.\deploy.ps1 # Skin deployen
.\deploy.ps1 -Mode all # Skin + Templates
.\deploy.ps1 -Mode initial
#>
param(
[ValidateSet('skin', 'templates', 'all', 'initial')]
[string]$Mode = 'skin'
)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
# === Config laden ===
$envFile = Join-Path $PSScriptRoot '..' '.deploy.env'
if (-not (Test-Path $envFile)) {
Write-Error @"
.deploy.env nicht gefunden.
Kopiere .deploy.example.env zu .deploy.env und trage deine Zugangsdaten ein.
"@
exit 1
}
Get-Content $envFile | ForEach-Object {
if ($_ -match '^\s*([^#][^=]+)=(.*)$') {
[System.Environment]::SetEnvironmentVariable($Matches[1].Trim(), $Matches[2].Trim(), 'Process')
}
}
$deployHost = $env:DEPLOY_HOST
$deployUser = $env:DEPLOY_USER
$mwPath = $env:DEPLOY_MW_PATH
$projectPath = $env:DEPLOY_PROJECT_PATH
$target = "${deployUser}@${deployHost}"
foreach ($var in @('DEPLOY_HOST','DEPLOY_USER','DEPLOY_MW_PATH')) {
if (-not [System.Environment]::GetEnvironmentVariable($var, 'Process')) {
Write-Error "$var ist nicht in .deploy.env gesetzt."
exit 1
}
}
# === WSL rsync oder scp ===
$hasWsl = $null -ne (Get-Command 'wsl' -ErrorAction SilentlyContinue)
function ConvertTo-WslPath([string]$winPath) {
$abs = [System.IO.Path]::GetFullPath($winPath)
$drive = $abs.Substring(0, 1).ToLower()
$rest = $abs.Substring(2).Replace('\', '/')
return "/mnt/$drive$rest"
}
function Sync-Dir([string]$localDir, [string]$remoteDir, [bool]$delete = $false) {
Write-Host " $localDir" -ForegroundColor DarkGray
Write-Host " -> ${target}:${remoteDir}" -ForegroundColor DarkGray
if ($hasWsl) {
$wslSrc = (ConvertTo-WslPath $localDir) + '/'
$rsyncArgs = @('-az', '--progress')
if ($delete) { $rsyncArgs += '--delete' }
$rsyncArgs += $wslSrc
$rsyncArgs += "${target}:${remoteDir}/"
wsl rsync @rsyncArgs
} else {
# Fallback: scp (kein automatisches Loeschen von Remotedateien)
Write-Warning "WSL nicht gefunden nutze scp. Geloeschte lokale Dateien bleiben auf dem Server."
ssh $target "mkdir -p '$remoteDir'"
scp -r "${localDir}\." "${target}:${remoteDir}/"
}
if ($LASTEXITCODE -ne 0) {
Write-Error "Uebertragung fehlgeschlagen (Exit $LASTEXITCODE)."
exit $LASTEXITCODE
}
}
$repoRoot = Split-Path $PSScriptRoot
# === Deploy-Modi ===
switch ($Mode) {
'skin' {
Write-Host "Deploye Cavendish-Skin..." -ForegroundColor Cyan
Sync-Dir "$repoRoot\mediawiki\skins\Cavendish" "$mwPath/skins/Cavendish" -delete $true
Write-Host "Fertig." -ForegroundColor Green
}
'templates' {
if (-not $projectPath) {
Write-Error "DEPLOY_PROJECT_PATH muss in .deploy.env gesetzt sein."
exit 1
}
Write-Host "Deploye Wiki-Templates..." -ForegroundColor Cyan
Sync-Dir "$repoRoot\scripts\templates" "$projectPath/scripts/templates"
Write-Host "Fertig." -ForegroundColor Green
}
'all' {
Write-Host "Deploye Skin + Templates..." -ForegroundColor Cyan
Sync-Dir "$repoRoot\mediawiki\skins\Cavendish" "$mwPath/skins/Cavendish" -delete $true
if ($projectPath) {
Sync-Dir "$repoRoot\scripts\templates" "$projectPath/scripts/templates"
}
Write-Host "Fertig." -ForegroundColor Green
}
'initial' {
Write-Host "Erstinstallation uebertraege MediaWiki-Core..." -ForegroundColor Yellow
Write-Host "Das kann einige Minuten dauern." -ForegroundColor DarkGray
$excludes = @(
'--exclude=.git',
'--exclude=vendor/',
'--exclude=images/',
'--exclude=cache/',
'--exclude=LocalSettings.php'
)
if ($hasWsl) {
$wslSrc = (ConvertTo-WslPath "$repoRoot\mediawiki") + '/'
$rsyncArgs = @('-az', '--progress') + $excludes + @($wslSrc, "${target}:${mwPath}/")
wsl rsync @rsyncArgs
} else {
Write-Warning "Fuer die Erstinstallation wird WSL empfohlen (grosse Datenmenge)."
Write-Warning "Alternative: WinSCP GUI verwenden oder WSL installieren."
exit 1
}
Write-Host ""
Write-Host "Erstinstallation abgeschlossen." -ForegroundColor Green
Write-Host ""
Write-Host "Naechste Schritte auf dem Server:" -ForegroundColor Yellow
Write-Host " 1. LocalSettings.php anlegen:"
Write-Host " Vorlage: mediawiki/LocalSettings.production.example.php"
Write-Host " 2. Composer-Abhaengigkeiten installieren:"
Write-Host " cd $mwPath && composer install --no-dev"
Write-Host " 3. Datenbank einrichten:"
Write-Host " php maintenance/run.php install ..."
Write-Host " oder: Dump importieren mit mysql -u user -p dbname < dump.sql"
Write-Host " 4. SMW initialisieren:"
Write-Host " php maintenance/run.php setupStore"
}
}