120 lines
4.7 KiB
PowerShell
120 lines
4.7 KiB
PowerShell
param (
|
|
[switch]$SkipBuild = $false
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Repository-Wurzelverzeichnis ermitteln
|
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$ProjectRoot = Split-Path -Parent $ScriptDir
|
|
Set-Location $ProjectRoot
|
|
|
|
# Toolchain-Pfade sicherstellen (Zig + Cargo Bin)
|
|
$ZigDir = "C:\Users\pansih\AppData\Local\Microsoft\WinGet\Packages\zig.zig_Microsoft.Winget.Source_8wekyb3d8bbwe\zig-x86_64-windows-0.16.0"
|
|
$env:PATH = "$ZigDir;C:\Users\pansih\.cargo\bin;C:\Windows\System32;" + $env:PATH
|
|
|
|
# Version aus Cargo.toml auslesen
|
|
$CargoToml = Get-Content (Join-Path $ProjectRoot "Cargo.toml") -Raw
|
|
if ($CargoToml -match 'version\s*=\s*"([^"]+)"') {
|
|
$Version = $matches[1]
|
|
} else {
|
|
Write-Error "Konnte Versionsnummer nicht aus Cargo.toml ermitteln."
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "============================================================" -ForegroundColor Cyan
|
|
Write-Host " Sanctum Linux Release Packaging v$Version (x86_64 musl)" -ForegroundColor Cyan
|
|
Write-Host "============================================================" -ForegroundColor Cyan
|
|
|
|
# 1. Linux Release-Binary bauen
|
|
$Target = "x86_64-unknown-linux-musl"
|
|
$BinaryPath = Join-Path $ProjectRoot "target\$Target\release\sanctum"
|
|
|
|
if (-not $SkipBuild -or -not (Test-Path $BinaryPath)) {
|
|
Write-Host "`n[1/3] Kompiliere statisches Linux-Binary via cargo-zigbuild..." -ForegroundColor Yellow
|
|
cargo-zigbuild.exe zigbuild --target $Target --release
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Linux-Build fehlgeschlagen!"
|
|
exit $LASTEXITCODE
|
|
}
|
|
Write-Host "[OK] Linux-Binary erfolgreich gebaut." -ForegroundColor Green
|
|
} else {
|
|
Write-Host "`n[1/3] Build uebersprungen (-SkipBuild)." -ForegroundColor DarkYellow
|
|
}
|
|
|
|
# 2. Release-Verzeichnisstruktur vorbereiten
|
|
Write-Host "`n[2/3] Erstelle Linux-Distributionspaket..." -ForegroundColor Yellow
|
|
|
|
$DistDir = Join-Path $ProjectRoot "dist"
|
|
if (-not (Test-Path $DistDir)) {
|
|
New-Item -ItemType Directory -Path $DistDir -Force | Out-Null
|
|
}
|
|
|
|
$PackageName = "sanctum-v$Version-linux-x86_64"
|
|
$StagingDir = Join-Path $DistDir $PackageName
|
|
$TarGzFile = Join-Path $DistDir "$PackageName.tar.gz"
|
|
|
|
if (Test-Path $StagingDir) {
|
|
Remove-Item $StagingDir -Recurse -Force
|
|
}
|
|
New-Item -ItemType Directory -Path $StagingDir -Force | Out-Null
|
|
|
|
# Dateien kopieren
|
|
Copy-Item $BinaryPath -Destination (Join-Path $StagingDir "sanctum") -Force
|
|
Copy-Item (Join-Path $ProjectRoot "README.md") -Destination $StagingDir -Force
|
|
Copy-Item (Join-Path $ProjectRoot "LICENSE") -Destination $StagingDir -Force
|
|
Copy-Item (Join-Path $ProjectRoot "CHANGELOG.md") -Destination $StagingDir -Force
|
|
Copy-Item (Join-Path $ProjectRoot "INSTALL.md") -Destination $StagingDir -Force
|
|
Copy-Item (Join-Path $ProjectRoot "QUICKSTART.md") -Destination $StagingDir -Force
|
|
Copy-Item (Join-Path $ProjectRoot "LEGAL.md") -Destination $StagingDir -Force
|
|
Copy-Item (Join-Path $ProjectRoot "THIRD_PARTY_LICENSES.md") -Destination $StagingDir -Force
|
|
|
|
# .tar.gz Archiv erstellen mit Windows nativem bsdtar
|
|
if (Test-Path $TarGzFile) {
|
|
Remove-Item $TarGzFile -Force
|
|
}
|
|
|
|
tar.exe -czf $TarGzFile -C $DistDir $PackageName
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Fehler beim Erstellen des tar.gz-Archivs!"
|
|
exit $LASTEXITCODE
|
|
}
|
|
|
|
# Staging-Verzeichnis bereinigen
|
|
Remove-Item $StagingDir -Recurse -Force
|
|
|
|
Write-Host "[OK] Archiv erstellt: $TarGzFile" -ForegroundColor Green
|
|
|
|
# 3. SHA-256 Pruefsummen berechnen und aktualisieren
|
|
Write-Host "`n[3/3] Aktualisiere SHA-256 Pruefsummen..." -ForegroundColor Yellow
|
|
|
|
$ChecksumFile = Join-Path $DistDir "SHA256SUMS.txt"
|
|
$TarHash = (Get-FileHash -Path $TarGzFile -Algorithm SHA256).Hash.ToLower()
|
|
$ElfHash = (Get-FileHash -Path $BinaryPath -Algorithm SHA256).Hash.ToLower()
|
|
|
|
# Existierende Pruefsummen lesen und um Linux-Assets ergaenzen/aktualisieren
|
|
$ExistingLines = if (Test-Path $ChecksumFile) {
|
|
Get-Content $ChecksumFile | Where-Object { $_ -notmatch "$PackageName\.tar\.gz" -and $_ -notmatch "\s+sanctum$" }
|
|
} else {
|
|
@()
|
|
}
|
|
|
|
$AllLines = @()
|
|
$AllLines += $ExistingLines
|
|
$AllLines += "$TarHash $PackageName.tar.gz"
|
|
$AllLines += "$ElfHash sanctum"
|
|
|
|
$AllLines | Set-Content -Path $ChecksumFile -Encoding utf8
|
|
|
|
$TarSizeMB = [math]::Round((Get-Item $TarGzFile).Length / 1MB, 2)
|
|
$ElfSizeMB = [math]::Round((Get-Item $BinaryPath).Length / 1MB, 2)
|
|
|
|
Write-Host "`n============================================================" -ForegroundColor Green
|
|
Write-Host " Sanctum Linux Release v$Version erfolgreich gepackt!" -ForegroundColor Green
|
|
Write-Host "============================================================" -ForegroundColor Green
|
|
Write-Host " Archiv: $TarGzFile ($TarSizeMB MB)"
|
|
Write-Host " TAR SHA-256: $TarHash"
|
|
Write-Host " ELF SHA-256: $ElfHash"
|
|
Write-Host " Checksum-File: $ChecksumFile"
|
|
Write-Host "`nBereit fuer Gitea Release."
|