param([switch]$PublishRelease) $ErrorActionPreference = 'Stop' $root = $PSScriptRoot $destination = Join-Path $root 'dist\KSwitcher' New-Item -ItemType Directory -Force $destination | Out-Null Copy-Item -LiteralPath (Join-Path $root 'build\release\KSwitcher.exe') -Destination $destination Copy-Item -LiteralPath (Join-Path $root 'build\release\KSwitcher.Config.exe') -Destination $destination Copy-Item -LiteralPath (Join-Path $root 'build\release\KSwitcher.Screenshot.exe') -Destination $destination Copy-Item -LiteralPath (Join-Path $root 'LICENSE') -Destination $destination Copy-Item -LiteralPath (Join-Path $root 'vendor\json-LICENSE.txt') -Destination $destination Copy-Item -LiteralPath (Join-Path $root 'README.md') -Destination $destination Copy-Item -LiteralPath (Join-Path $root 'dictionaries') -Destination $destination -Recurse -Force # Enumerate the distributable files explicitly; do not include a user's data directory. $files = @('KSwitcher.exe','KSwitcher.Config.exe','KSwitcher.Screenshot.exe','LICENSE','json-LICENSE.txt','README.md','dictionaries') | ForEach-Object { Join-Path $destination $_ } $entries = foreach ($path in $files) { foreach ($file in @(Get-ChildItem -LiteralPath $path -File -Recurse)) { @{path=$file.FullName.Substring($destination.Length+1).Replace('\','/'); size=$file.Length; sha256=(Get-FileHash -LiteralPath $file.FullName -Algorithm SHA256).Hash.ToLowerInvariant()} } } $version=[Diagnostics.FileVersionInfo]::GetVersionInfo((Join-Path $destination 'KSwitcher.exe')).FileVersion $manifest=Join-Path $destination 'release-files.json' @{schema=1; version=$version; files=@($entries)} | ConvertTo-Json -Depth 4 | Set-Content -LiteralPath $manifest -Encoding utf8 $files += $manifest $archive = Join-Path $root 'dist\KSwitcher-win-x64.zip' Compress-Archive -LiteralPath $files -DestinationPath $archive -Force Get-FileHash -LiteralPath $archive -Algorithm SHA256 if ($PublishRelease) { $release = Join-Path $root 'Release' New-Item -ItemType Directory -Force $release | Out-Null $published = Join-Path $release 'KSwitcher-win-x64.zip' Copy-Item -LiteralPath $archive -Destination $published -Force $hash = (Get-FileHash -LiteralPath $published -Algorithm SHA256).Hash.ToLowerInvariant() "$hash KSwitcher-win-x64.zip" | Set-Content -LiteralPath (Join-Path $release 'SHA256SUMS.txt') -Encoding ascii }