mirror of
https://github.com/MAKS-IT-COM/maksit-webui.git
synced 2026-08-15 18:08:09 +02:00
76 lines
3.1 KiB
PowerShell
76 lines
3.1 KiB
PowerShell
#requires -Version 7.0
|
|
#requires -PSEdition Core
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
.NET publish plugin for producing application release artifacts.
|
|
|
|
.DESCRIPTION
|
|
This plugin publishes the configured .NET project into a release output
|
|
directory and exposes that published directory to the shared release
|
|
context so later release-stage plugins can archive and publish it.
|
|
#>
|
|
|
|
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 "ScriptConfig" -RequiredCommand "Assert-Command"
|
|
Import-PluginDependency -ModuleName "EngineContext" -RequiredCommand "Set-EngineFact"
|
|
|
|
$sharedSettings = $Settings.context
|
|
$projectFiles = Get-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'projectFiles' -LegacyProperty @('projectFiles')
|
|
$artifactsDirectory = $sharedSettings.artifactsDirectory
|
|
$publishProjectPath = $null
|
|
|
|
Assert-Command dotnet
|
|
|
|
if ($null -eq $projectFiles -or @($projectFiles).Count -eq 0) {
|
|
throw "DotNetPublish plugin requires project files in the shared context."
|
|
}
|
|
|
|
$projectFiles = @($projectFiles)
|
|
|
|
if (!(Test-Path $artifactsDirectory)) {
|
|
New-Item -ItemType Directory -Path $artifactsDirectory | Out-Null
|
|
}
|
|
|
|
# The first configured project remains the canonical release artifact source.
|
|
$publishProjectPath = $projectFiles[0]
|
|
$publishDir = Join-Path $artifactsDirectory ([System.IO.Path]::GetFileNameWithoutExtension($publishProjectPath))
|
|
|
|
if (Test-Path $publishDir) {
|
|
Remove-Item -Path $publishDir -Recurse -Force
|
|
}
|
|
|
|
Write-Log -Level "STEP" -Message "Publishing release artifact..."
|
|
dotnet publish $publishProjectPath -c Release -o $publishDir --nologo
|
|
if ($LASTEXITCODE -ne 0) {
|
|
throw "dotnet publish failed for $publishProjectPath."
|
|
}
|
|
|
|
$publishedItems = @(Get-ChildItem -Path $publishDir -Force -ErrorAction SilentlyContinue)
|
|
if ($publishedItems.Count -eq 0) {
|
|
throw "dotnet publish completed, but no files were produced in: $publishDir"
|
|
}
|
|
|
|
Write-Log -Level "OK" -Message " Published artifact ready: $publishDir"
|
|
|
|
Set-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'packageFile' -Value $null -Overwrite Replace -LegacyProperty 'packageFile'
|
|
Set-EngineFact -Context $sharedSettings -Namespace 'dotnet' -Name 'symbolsPackageFile' -Value $null -Overwrite Replace -LegacyProperty 'symbolsPackageFile'
|
|
Set-EngineFact -Context $sharedSettings -Namespace 'release' -Name 'archiveInputs' -Value @($publishDir) -Overwrite Replace -LegacyProperty 'releaseArchiveInputs'
|
|
}
|
|
|
|
Export-ModuleMember -Function Invoke-Plugin
|