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."