feat: add ortho annotation removal and package integrity manifest

This commit is contained in:
codex
2026-08-07 14:51:57 +03:00
parent 3eaa659947
commit 1986d15c2b
5 changed files with 82 additions and 2 deletions
@@ -3,6 +3,7 @@ $ErrorActionPreference='Stop'
dotnet build (Join-Path $PSScriptRoot '..\PRecAnnot2026.sln') --configuration $Configuration /p:AutoCAD2026ManagedDir=$AutoCAD2026ManagedDir /p:Plant3D2026ManagedDir=$Plant3D2026ManagedDir
if($LASTEXITCODE -ne 0){ throw "Build failed: $LASTEXITCODE" }
$bundleRoot=Join-Path $PSScriptRoot '..\artifacts\P_Rec_Annot.bundle'
$bundleRoot=(Resolve-Path $bundleRoot).Path
$contents=Join-Path $bundleRoot 'Contents\Windows'
New-Item -ItemType Directory -Force -Path $contents | Out-Null
$output=Join-Path $PSScriptRoot "..\src\PRecAnnot.Plant3D2026\bin\$Configuration\net8.0-windows"
@@ -11,6 +12,10 @@ Copy-Item (Join-Path $PSScriptRoot '..\bundle\P_Rec_Annot.bundle\PackageContents
Copy-Item (Join-Path $PSScriptRoot '..\bundle\P_Rec_Annot.bundle\Settings.xml') $bundleRoot -Force
$modules=@('PHP_REC_ANNOT','AnnotateLineNumbers','AutoLinenumberConnections','AutoElevation','InsertElevation','ExtentsIntersect','DataLinksRead')
$assemblies=Get-ChildItem $contents -File -Filter '*.dll' | Sort-Object Name | ForEach-Object { [ordered]@{ name=$_.Name; sha256=(Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLowerInvariant(); required=$true } }
$manifest=[ordered]@{ schemaVersion=1; package='P_Rec_Annot'; version='0.2.3'; modules=$modules; assemblies=$assemblies }
$moduleManifestPath=Join-Path $bundleRoot 'Contents\module-manifest.json'
$files=Get-ChildItem $bundleRoot -Recurse -File | Where-Object { $_.FullName -ne $moduleManifestPath } | Sort-Object FullName | ForEach-Object {
[ordered]@{ relativePath=$_.FullName.Substring($bundleRoot.Length + 1).Replace('\','/'); sha256=(Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLowerInvariant(); required=$true }
}
$manifest=[ordered]@{ schemaVersion=2; package='P_Rec_Annot'; version='0.2.4'; modules=$modules; assemblies=$assemblies; files=$files }
$manifest | ConvertTo-Json -Depth 5 | Set-Content (Join-Path $bundleRoot 'Contents\module-manifest.json') -Encoding utf8
Write-Host 'Bundle assembly build completed; deployment is intentionally not performed.'
@@ -12,6 +12,8 @@ if(-not (Test-Path $moduleManifestPath)){throw 'Composite module manifest is mis
$moduleManifest=Get-Content $moduleManifestPath -Raw | ConvertFrom-Json
if($moduleManifest.package -ne 'P_Rec_Annot' -or $moduleManifest.version -ne $xml.ApplicationPackage.AppVersion){throw 'Composite module manifest identity/version mismatch.'}
foreach($assembly in $moduleManifest.assemblies){$path=Join-Path $BundleRoot "Contents\Windows\$($assembly.name)"; if(-not (Test-Path $path)){throw "Manifest assembly missing: $($assembly.name)"}; if((Get-FileHash $path -Algorithm SHA256).Hash.ToLowerInvariant() -ne $assembly.sha256){throw "Manifest hash mismatch: $($assembly.name)"}}
if($moduleManifest.schemaVersion -lt 2 -or @($moduleManifest.files).Count -eq 0){throw 'Complete package file manifest is missing.'}
foreach($file in $moduleManifest.files){$path=Join-Path $BundleRoot ($file.relativePath -replace '/', '\'); if(-not (Test-Path -LiteralPath $path)){throw "Manifest file missing: $($file.relativePath)"}; if((Get-FileHash $path -Algorithm SHA256).Hash.ToLowerInvariant() -ne $file.sha256){throw "Manifest hash mismatch: $($file.relativePath)"}}
$forbidden='^(AcMgd|AcDbMgd|AcCoreMgd|AdWindows|PnP.*)\.dll$'
$forbiddenFiles=Get-ChildItem $BundleRoot -Recurse -File | Where-Object { $_.Name -match $forbidden -or $_.Extension -in '.pdb','.cs' -or $_.FullName -match '\\(bin|obj)\\' }
if($forbiddenFiles){throw "Bundle contains forbidden files: $($forbiddenFiles.FullName -join ', ')"}