mirror of
https://github.com/MAKS-IT-COM/maksit-postclient.git
synced 2026-09-30 03:18:09 +02:00
136 lines
5.6 KiB
PowerShell
136 lines
5.6 KiB
PowerShell
#requires -Version 7.0
|
|
#requires -PSEdition Core
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
.NET release archive plugin — zip from NuGet pack/publish artifacts.
|
|
|
|
.DESCRIPTION
|
|
This plugin compresses .NET release artifact inputs prepared by an earlier
|
|
DotNet plugin (DotNetPack or DotNetPublish) into a zip file
|
|
and exposes the resulting release assets for later publisher plugins.
|
|
|
|
For desktop apps with per-RID publish folders, the zip is the portable
|
|
build only (default win-x64). Windows installer and Flatpak artifacts are
|
|
separate GitHub assets and are never added to this zip.
|
|
#>
|
|
|
|
if (-not (Get-Command Import-PluginDependency -ErrorAction SilentlyContinue)) {
|
|
$srcDir = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
|
|
$pluginSupportModulePath = Join-Path $srcDir "modules/Engine/PluginSupport.psm1"
|
|
if (Test-Path $pluginSupportModulePath -PathType Leaf) {
|
|
Import-Module $pluginSupportModulePath -Force -Global -ErrorAction Stop
|
|
}
|
|
}
|
|
|
|
function Invoke-Plugin {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
$Settings
|
|
)
|
|
|
|
Import-PluginDependency -ModuleName "Logging" -RequiredCommand "Write-Log"
|
|
Import-PluginDependency -ModuleName "EngineContext" -RequiredCommand "Add-ReleaseAssetPaths"
|
|
|
|
$pluginSettings = $Settings
|
|
$sharedSettings = $Settings.context
|
|
$artifactsDirectory = $sharedSettings.artifactsDirectory
|
|
$version = $sharedSettings.version
|
|
$archiveInputs = @()
|
|
|
|
$fromFact = Get-EngineFact -Context $sharedSettings -Namespace 'release' -Name 'archiveInputs' -LegacyProperty @('releaseArchiveInputs')
|
|
if ($null -ne $fromFact) {
|
|
$archiveInputs = @($fromFact)
|
|
}
|
|
else {
|
|
$packageFile = Get-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'packageFile' -LegacyProperty @('packageFile')
|
|
if ($null -ne $packageFile) {
|
|
$archiveInputs = @($packageFile.FullName)
|
|
$symbolsPackageFile = Get-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'symbolsPackageFile' -LegacyProperty @('symbolsPackageFile')
|
|
if ($null -ne $symbolsPackageFile) {
|
|
$archiveInputs += $symbolsPackageFile.FullName
|
|
}
|
|
}
|
|
}
|
|
|
|
$portableRid = $null
|
|
if ($pluginSettings.PSObject.Properties['portableRuntimeIdentifier'] -and -not [string]::IsNullOrWhiteSpace([string]$pluginSettings.portableRuntimeIdentifier)) {
|
|
$portableRid = ([string]$pluginSettings.portableRuntimeIdentifier).Trim()
|
|
}
|
|
|
|
$publishOutputs = @(Get-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'publishOutputs' -Default @())
|
|
if ($publishOutputs.Count -gt 0) {
|
|
if ([string]::IsNullOrWhiteSpace($portableRid)) {
|
|
$portableRid = 'win-x64'
|
|
}
|
|
|
|
$portableOutputs = @(
|
|
$publishOutputs |
|
|
Where-Object { [string]$_.runtimeIdentifier -eq $portableRid }
|
|
)
|
|
if ($portableOutputs.Count -eq 0) {
|
|
$portableOutputs = @(
|
|
$publishOutputs |
|
|
Where-Object { ([string]$_.runtimeIdentifier).StartsWith('win-', [System.StringComparison]::OrdinalIgnoreCase) }
|
|
)
|
|
}
|
|
|
|
if ($portableOutputs.Count -gt 0) {
|
|
$archiveInputs = @($portableOutputs | ForEach-Object { [string]$_.directory })
|
|
Write-Log -Level "INFO" -Message " Portable zip uses runtime '$portableRid' only (installer/Flatpak stay out of the zip)."
|
|
}
|
|
}
|
|
|
|
if ($archiveInputs.Count -eq 0) {
|
|
throw "DotNetCreateArchive plugin requires prepared artifacts. Run DotNetPack or DotNetPublish first."
|
|
}
|
|
|
|
if ([string]::IsNullOrWhiteSpace($artifactsDirectory)) {
|
|
throw "DotNetCreateArchive plugin requires an artifacts directory in the shared context."
|
|
}
|
|
|
|
if (-not (Test-Path $artifactsDirectory -PathType Container)) {
|
|
New-Item -ItemType Directory -Path $artifactsDirectory | Out-Null
|
|
}
|
|
|
|
$zipNamePattern = if ($pluginSettings.PSObject.Properties['zipNamePattern'] -and -not [string]::IsNullOrWhiteSpace([string]$pluginSettings.zipNamePattern)) {
|
|
[string]$pluginSettings.zipNamePattern
|
|
}
|
|
else {
|
|
"release-{version}.zip"
|
|
}
|
|
|
|
$zipFileName = $zipNamePattern -replace '\{version\}', $version
|
|
$zipPath = Join-Path $artifactsDirectory $zipFileName
|
|
|
|
if (Test-Path $zipPath) {
|
|
Remove-Item -Path $zipPath -Force
|
|
}
|
|
|
|
Write-Log -Level "STEP" -Message "Creating release archive..."
|
|
Compress-Archive -Path $archiveInputs -DestinationPath $zipPath -CompressionLevel Optimal -Force
|
|
|
|
if (-not (Test-Path $zipPath -PathType Leaf)) {
|
|
throw "Failed to create release archive at: $zipPath"
|
|
}
|
|
|
|
Write-Log -Level "OK" -Message " Release archive ready: $zipPath"
|
|
|
|
$newAssets = [System.Collections.Generic.List[string]]::new()
|
|
$newAssets.Add($zipPath)
|
|
$packageFile = Get-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'packageFile' -LegacyProperty @('packageFile')
|
|
if ($null -ne $packageFile) {
|
|
$newAssets.Add($packageFile.FullName)
|
|
}
|
|
$symbolsPackageFile = Get-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'symbolsPackageFile' -LegacyProperty @('symbolsPackageFile')
|
|
if ($null -ne $symbolsPackageFile) {
|
|
$newAssets.Add($symbolsPackageFile.FullName)
|
|
}
|
|
|
|
Set-EngineState -Context $sharedSettings -Name 'releaseDir' -Value $artifactsDirectory
|
|
Set-EngineFact -Context $sharedSettings -Namespace 'release' -Name 'archivePath' -Value $zipPath -Overwrite Replace -LegacyProperty 'releaseArchivePath'
|
|
Add-ReleaseAssetPaths -Context $sharedSettings -Path @($newAssets)
|
|
}
|
|
|
|
Export-ModuleMember -Function Invoke-Plugin
|