mirror of
https://github.com/MAKS-IT-COM/maksit-certs-ui.git
synced 2026-06-13 09:46:41 +02:00
123 lines
3.9 KiB
PowerShell
123 lines
3.9 KiB
PowerShell
#requires -Version 7.0
|
|
#requires -PSEdition Core
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
.NET artifact cleanup plugin — remove NuGet build outputs after release.
|
|
|
|
.DESCRIPTION
|
|
Removes files from the configured artifacts directory using glob patterns.
|
|
Defaults target NuGet outputs (*.nupkg, *.snupkg). Typically placed at the
|
|
end of the Release stage after DotNetCreateArchive or publish plugins.
|
|
#>
|
|
|
|
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 Get-CleanupPatternsInternal {
|
|
param(
|
|
[Parameter(Mandatory = $false)]
|
|
$ConfiguredPatterns
|
|
)
|
|
|
|
if ($null -eq $ConfiguredPatterns) {
|
|
return @('*.nupkg', '*.snupkg')
|
|
}
|
|
|
|
if ($ConfiguredPatterns -is [System.Collections.IEnumerable] -and -not ($ConfiguredPatterns -is [string])) {
|
|
return @($ConfiguredPatterns | Where-Object { -not [string]::IsNullOrWhiteSpace([string]$_) })
|
|
}
|
|
|
|
if ([string]::IsNullOrWhiteSpace([string]$ConfiguredPatterns)) {
|
|
return @('*.nupkg', '*.snupkg')
|
|
}
|
|
|
|
return @([string]$ConfiguredPatterns)
|
|
}
|
|
|
|
function Get-ExcludePatternsInternal {
|
|
param(
|
|
[Parameter(Mandatory = $false)]
|
|
$ConfiguredPatterns
|
|
)
|
|
|
|
if ($null -eq $ConfiguredPatterns) {
|
|
return @()
|
|
}
|
|
|
|
if ($ConfiguredPatterns -is [System.Collections.IEnumerable] -and -not ($ConfiguredPatterns -is [string])) {
|
|
return @($ConfiguredPatterns | Where-Object { -not [string]::IsNullOrWhiteSpace([string]$_) })
|
|
}
|
|
|
|
if ([string]::IsNullOrWhiteSpace([string]$ConfiguredPatterns)) {
|
|
return @()
|
|
}
|
|
|
|
return @([string]$ConfiguredPatterns)
|
|
}
|
|
|
|
function Invoke-Plugin {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
$Settings
|
|
)
|
|
|
|
Import-PluginDependency -ModuleName "Logging" -RequiredCommand "Write-Log"
|
|
|
|
$pluginSettings = $Settings
|
|
$sharedSettings = $Settings.context
|
|
$artifactsDirectory = $sharedSettings.artifactsDirectory
|
|
$patterns = Get-CleanupPatternsInternal -ConfiguredPatterns $pluginSettings.includePatterns
|
|
$excludePatterns = Get-ExcludePatternsInternal -ConfiguredPatterns $pluginSettings.excludePatterns
|
|
|
|
if ([string]::IsNullOrWhiteSpace($artifactsDirectory)) {
|
|
throw "DotNetCleanupArtifacts plugin requires an artifacts directory in the shared context."
|
|
}
|
|
|
|
if (-not (Test-Path $artifactsDirectory -PathType Container)) {
|
|
Write-Log -Level "WARN" -Message " Artifacts directory not found: $artifactsDirectory"
|
|
return
|
|
}
|
|
|
|
Write-Log -Level "STEP" -Message "Cleaning generated artifacts..."
|
|
|
|
$itemsToRemove = @()
|
|
foreach ($pattern in $patterns) {
|
|
$matchedItems = @(
|
|
Get-ChildItem -Path $artifactsDirectory -Force -ErrorAction SilentlyContinue |
|
|
Where-Object { $_.Name -like $pattern }
|
|
)
|
|
|
|
if ($excludePatterns.Count -gt 0) {
|
|
$matchedItems = @(
|
|
$matchedItems |
|
|
Where-Object {
|
|
$item = $_
|
|
-not ($excludePatterns | Where-Object { $item.Name -like $_ } | Select-Object -First 1)
|
|
}
|
|
)
|
|
}
|
|
|
|
$itemsToRemove += @($matchedItems)
|
|
}
|
|
|
|
$itemsToRemove = @($itemsToRemove | Sort-Object FullName -Unique)
|
|
|
|
if ($itemsToRemove.Count -eq 0) {
|
|
Write-Log -Level "INFO" -Message " No artifacts matched cleanup rules."
|
|
return
|
|
}
|
|
|
|
foreach ($item in $itemsToRemove) {
|
|
Remove-Item -Path $item.FullName -Recurse -Force -ErrorAction SilentlyContinue
|
|
Write-Log -Level "OK" -Message " Removed: $($item.Name)"
|
|
}
|
|
}
|
|
|
|
Export-ModuleMember -Function Invoke-Plugin
|