Sanctum Release / Build & Release (Windows x86_64) (push) Waiting to run
- R-01: Bereinigung verbliebener Restbehauptungen in Doku und Code (LEGAL.md, README.md, QUICKSTART.md, main.rs, crypto/storage/recovery/verify.rs) - R-02: Lückenloser Carrier-Schutz in SanctumFs::copy (Quelle & Ziel) und sync (Pull-Skip & Push-Schutz) - R-03: Shared Dateinamen-Validierung (validate_node_name) in pathutil.rs, durchgesetzt in storage.rs und vfs.rs - R-04: Fail-closed Release-Packaging & obligatorische Minisign-Signatur in CI (.gitea/workflows/release.yaml) und Scripts - R-05: Session-Token Beseitigung im argv: In-Process Win32 WNetAddConnection2W/WNetCancelConnection2W, kein gio argv-Token, Multi-Auth HTTP Middleware (Basic Auth, X-Sanctum-Token, Path-Fallback) mit 401 WWW-Authenticate - R-06: Sofortiges Löschen von SANCTUM_RECOVERY_KEY aus der Prozessumgebung
142 lines
6.0 KiB
PowerShell
142 lines
6.0 KiB
PowerShell
param (
|
|
[switch]$SkipTests = $false
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Repository-Wurzelverzeichnis ermitteln
|
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$ProjectRoot = Split-Path -Parent $ScriptDir
|
|
Set-Location $ProjectRoot
|
|
|
|
# Toolchain-Pfade sicherstellen (WinLibs GCC + Cargo)
|
|
$env:PATH = "C:\Users\pansih\AppData\Local\Microsoft\WinGet\Packages\BrechtSanders.WinLibs.POSIX.UCRT_Microsoft.Winget.Source_8wekyb3d8bbwe\mingw64\bin;C:\Users\pansih\.cargo\bin;C:\Program Files\Git\cmd;C:\Users\pansih\AppData\Local\Microsoft\WinGet\Links;" + $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 Release Packaging v$Version (Windows x86_64)" -ForegroundColor Cyan
|
|
Write-Host "============================================================" -ForegroundColor Cyan
|
|
|
|
# 1. Tests ausfuehren
|
|
if (-not $SkipTests) {
|
|
Write-Host "`n[1/4] Fuehre Testsuite aus (cargo test --all)..." -ForegroundColor Yellow
|
|
cargo test --all
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Tests fehlgeschlagen! Release-Erstellung abgebrochen."
|
|
exit $LASTEXITCODE
|
|
}
|
|
Write-Host "[OK] Alle Tests erfolgreich bestanden." -ForegroundColor Green
|
|
} else {
|
|
Write-Host "`n[1/4] Tests uebersprungen (-SkipTests)." -ForegroundColor DarkYellow
|
|
}
|
|
|
|
# 2. Release-Binary bauen
|
|
Write-Host "`n[2/4] Kompiliere Release-Binary mit LTO (cargo build --release)..." -ForegroundColor Yellow
|
|
cargo build --release
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Release-Build fehlgeschlagen!"
|
|
exit $LASTEXITCODE
|
|
}
|
|
Write-Host "[OK] Release-Binary erfolgreich gebaut." -ForegroundColor Green
|
|
|
|
# 3. Release-Verzeichnisstruktur vorbereiten
|
|
Write-Host "`n[3/4] Erstelle Distributionspaket..." -ForegroundColor Yellow
|
|
|
|
$DistDir = Join-Path $ProjectRoot "dist"
|
|
$PackageName = "sanctum-v$Version-windows-x86_64"
|
|
$StagingDir = Join-Path $DistDir $PackageName
|
|
$ZipFile = Join-Path $DistDir "$PackageName.zip"
|
|
|
|
if (-not (Test-Path $DistDir)) {
|
|
New-Item -ItemType Directory -Path $DistDir -Force | Out-Null
|
|
}
|
|
if (Test-Path $StagingDir) {
|
|
Remove-Item $StagingDir -Recurse -Force
|
|
}
|
|
New-Item -ItemType Directory -Path $StagingDir -Force | Out-Null
|
|
|
|
$ExeSource = Join-Path $ProjectRoot "target\release\sanctum.exe"
|
|
Copy-Item $ExeSource (Join-Path $StagingDir "sanctum.exe")
|
|
Copy-Item (Join-Path $ProjectRoot "README.md") (Join-Path $StagingDir "README.md")
|
|
Copy-Item (Join-Path $ProjectRoot "QUICKSTART.md") (Join-Path $StagingDir "QUICKSTART.md")
|
|
Copy-Item (Join-Path $ProjectRoot "INSTALL.md") (Join-Path $StagingDir "INSTALL.md")
|
|
Copy-Item (Join-Path $ProjectRoot "LICENSE") (Join-Path $StagingDir "LICENSE")
|
|
Copy-Item (Join-Path $ProjectRoot "LEGAL.md") (Join-Path $StagingDir "LEGAL.md")
|
|
Copy-Item (Join-Path $ProjectRoot "THIRD_PARTY_LICENSES.md") (Join-Path $StagingDir "THIRD_PARTY_LICENSES.md")
|
|
Copy-Item (Join-Path $ProjectRoot "CHANGELOG.md") (Join-Path $StagingDir "CHANGELOG.md")
|
|
Copy-Item (Join-Path $ProjectRoot "assets") (Join-Path $StagingDir "assets") -Recurse
|
|
|
|
# ZIP-Archiv schnueren
|
|
Compress-Archive -Path "$StagingDir\*" -DestinationPath $ZipFile -Force
|
|
Remove-Item $StagingDir -Recurse -Force
|
|
|
|
Write-Host "[OK] Archiv erstellt: $ZipFile" -ForegroundColor Green
|
|
|
|
# 4. SHA-256 Pruefsummen generieren
|
|
Write-Host "`n[4/4] Generiere SHA-256 Pruefsummen..." -ForegroundColor Yellow
|
|
|
|
$ZipHash = (Get-FileHash -Path $ZipFile -Algorithm SHA256).Hash.ToLower()
|
|
$ExeHash = (Get-FileHash -Path $ExeSource -Algorithm SHA256).Hash.ToLower()
|
|
|
|
$ChecksumFile = Join-Path $DistDir "SHA256SUMS.txt"
|
|
$ExistingLines = if (Test-Path $ChecksumFile) {
|
|
Get-Content $ChecksumFile | Where-Object { $_ -notmatch "$PackageName\.zip" -and $_ -notmatch "\s+sanctum\.exe$" }
|
|
} else {
|
|
@()
|
|
}
|
|
|
|
$AllLines = @()
|
|
$AllLines += "$ZipHash $PackageName.zip"
|
|
$AllLines += "$ExeHash sanctum.exe"
|
|
$AllLines += $ExistingLines
|
|
$AllLines | Set-Content -Path $ChecksumFile -Encoding utf8
|
|
|
|
Write-Host "[OK] Pruefsummen in SHA256SUMS.txt gespeichert." -ForegroundColor Green
|
|
|
|
# 5. Minisign Signatur generieren (S-02)
|
|
Write-Host "`n[5/5] Signiere Pruefsummen mit Minisign..." -ForegroundColor Yellow
|
|
$MinisignExe = "C:\Users\pansih\AppData\Local\Microsoft\WinGet\Packages\jedisct1.minisign_Microsoft.Winget.Source_8wekyb3d8bbwe\minisign-win64\x86_64\minisign.exe"
|
|
$KeyFile = Join-Path $ProjectRoot "sanctum-release.key"
|
|
$SigFile = Join-Path $DistDir "SHA256SUMS.txt.minisig"
|
|
|
|
if (Test-Path $KeyFile) {
|
|
if (Test-Path $MinisignExe) {
|
|
if (Test-Path $SigFile) { Remove-Item $SigFile -Force }
|
|
& $MinisignExe -S -s $KeyFile -m $ChecksumFile -W -x $SigFile
|
|
if ($LASTEXITCODE -eq 0 -and (Test-Path $SigFile)) {
|
|
Write-Host "[OK] Minisign-Signatur erstellt: dist\SHA256SUMS.txt.minisig" -ForegroundColor Green
|
|
} else {
|
|
Write-Error "Minisign-Signierung fehlgeschlagen!"
|
|
exit 1
|
|
}
|
|
} else {
|
|
Write-Error "minisign.exe nicht gefunden ($MinisignExe)! Release-Erstellung abgebrochen (Signatur ist obligatorisch)."
|
|
exit 1
|
|
}
|
|
} else {
|
|
Write-Error "sanctum-release.key nicht gefunden ($KeyFile)! Release-Erstellung abgebrochen (Signatur ist obligatorisch)."
|
|
exit 1
|
|
}
|
|
|
|
# Abschluss-Zusammenfassung
|
|
$ZipSize = (Get-Item $ZipFile).Length / 1MB
|
|
Write-Host "`n============================================================" -ForegroundColor Green
|
|
Write-Host " Sanctum Release v$Version erfolgreich gepackt!" -ForegroundColor Green
|
|
Write-Host "============================================================" -ForegroundColor Green
|
|
Write-Host " Archiv: dist\$PackageName.zip ($([math]::Round($ZipSize, 2)) MB)"
|
|
Write-Host " ZIP SHA-256: $ZipHash"
|
|
Write-Host " EXE SHA-256: $ExeHash"
|
|
Write-Host " Checksum-File: dist\SHA256SUMS.txt"
|
|
if (Test-Path $SigFile) {
|
|
Write-Host " Minisign Sig: dist\SHA256SUMS.txt.minisig"
|
|
}
|
|
Write-Host "`nBereit fuer Gitea Release / Verteilung.`n"
|