Decode percent-encoded tags and filter release artifacts

This commit is contained in:
2026-07-08 21:14:00 +03:00
parent f6b722b22a
commit 2e80f7b8eb
8 changed files with 179 additions and 9 deletions

View File

@@ -386,6 +386,25 @@ function Invoke-NativeCommand {
}
}
function Clear-ReleaseBundleOutput {
if (-not (Test-Path -LiteralPath $BundleRoot)) {
return
}
$targetRoot = Get-FullPath -Path (Join-Path $RepoRoot "src-tauri\target")
$bundleFull = Get-FullPath -Path $BundleRoot
if (
$bundleFull.Equals($targetRoot, [System.StringComparison]::OrdinalIgnoreCase) -or
-not (Test-IsSubPath -Parent $targetRoot -Child $bundleFull)
) {
throw "Refusing to remove bundle directory outside src-tauri target: $bundleFull"
}
Write-Host ""
Write-Host "Cleaning stale Tauri bundle output: $bundleFull"
Remove-Item -LiteralPath $bundleFull -Recurse -Force
}
function Invoke-ReleaseBuild {
if ($SkipBuild) {
Write-Host ""
@@ -402,22 +421,50 @@ function Invoke-ReleaseBuild {
Write-Host "Skipping Rust tests because -SkipTests was provided."
}
Clear-ReleaseBundleOutput
Invoke-NativeCommand -Name "Tauri release build" -FilePath "npm" -Arguments @("run", "tauri", "--", "build")
}
function Get-ArtifactVersionPattern {
param([string]$TargetVersion)
"(^|[^0-9A-Za-z])$([regex]::Escape($TargetVersion))([^0-9A-Za-z]|$)"
}
function Copy-ReleaseArtifacts {
param([string]$ReleaseDir)
param(
[string]$ReleaseDir,
[string]$TargetVersion
)
if (-not (Test-Path -LiteralPath $BundleRoot)) {
throw "Tauri bundle output was not found: $BundleRoot"
}
$artifactDir = Join-Path $ReleaseDir "artifacts"
$files = Get-ChildItem -LiteralPath $BundleRoot -Recurse -File |
Where-Object { $_.Extension -in @(".exe", ".msi", ".zip", ".sig") }
$allFiles = @(Get-ChildItem -LiteralPath $BundleRoot -Recurse -File |
Where-Object { $_.Extension -in @(".exe", ".msi", ".zip", ".sig") } |
Sort-Object FullName)
if ($allFiles.Count -eq 0) {
throw "No release artifacts were found under $BundleRoot."
}
$versionPattern = Get-ArtifactVersionPattern -TargetVersion $TargetVersion
$files = @($allFiles | Where-Object { $_.Name -match $versionPattern })
$ignoredFiles = @($allFiles | Where-Object { $_.Name -notmatch $versionPattern })
if ($files.Count -eq 0) {
throw "No release artifacts were found under $BundleRoot."
$found = ($allFiles | ForEach-Object { Get-RelativePath -BasePath $BundleRoot -Path $_.FullName }) -join ", "
throw "No release artifacts for version $TargetVersion were found under $BundleRoot. Found artifacts: $found"
}
if ($ignoredFiles.Count -gt 0) {
Write-Host ""
Write-Host "Ignoring bundle artifacts that do not match version ${TargetVersion}:"
foreach ($ignored in $ignoredFiles) {
Write-Host (" - " + (Get-RelativePath -BasePath $BundleRoot -Path $ignored.FullName))
}
}
$copied = @()
@@ -587,7 +634,7 @@ try {
Invoke-ReleaseBuild
$releaseDir = New-ReleaseDirectory -TargetVersion $targetVersion
$artifacts = @(Copy-ReleaseArtifacts -ReleaseDir $releaseDir)
$artifacts = @(Copy-ReleaseArtifacts -ReleaseDir $releaseDir -TargetVersion $targetVersion)
Write-Checksums -ReleaseDir $releaseDir -Files $artifacts | Out-Null
Write-ReleaseMetadata -ReleaseDir $releaseDir -TargetVersion $targetVersion -Artifacts $artifacts