Public/Invoke-CpmfUipsAnalyze.ps1
|
function Invoke-CpmfUipsAnalyze { <# .SYNOPSIS Runs the UiPath workflow analyzer on a project using either uipcli or uipathcli. .DESCRIPTION Invokes the workflow analyzer for one or more CLI targets and returns the analyzer output as [string[]]. No version bump or feed staging is performed. .PARAMETER ProjectJson Path to the UiPath project.json. .PARAMETER Backend CLI backend to use. 'uipcli' (default) or 'uipathcli'. .PARAMETER Targets Which CLI versions to analyze with. Valid values: 'net6', 'net8'. Defaults to @('net6'). Only relevant when -Backend is 'uipcli'. .PARAMETER CliVersionNet6 uipcli version for the net6 target. Default: 23.10.2.6. .PARAMETER CliVersionNet8 uipcli version for the net8 target. Default: 25.10.11. .PARAMETER SkipInstall Skip tool auto-install. Use when tools are already in place. .PARAMETER ToolBase Tool root directory. Defaults to %LOCALAPPDATA%\cpmf\tools. .PARAMETER ConfigFile Path to a .psd1 config file for default values. Explicit parameters always win. .PARAMETER UipcliArgs Additional arguments passed verbatim to the CLI backend. .OUTPUTS [string[]] Analyzer output lines. #> [CmdletBinding(SupportsShouldProcess)] [OutputType([string[]])] param( [string] $ProjectJson = (Join-Path $PSScriptRoot '..\project.json'), [ValidateSet('uipcli', 'uipathcli')] [string] $Backend = 'uipcli', [string[]]$Targets = @('net6'), [string] $CliVersionNet6 = '23.10.2.6', [string] $CliVersionNet8 = '25.10.11', [switch] $SkipInstall, [string] $ToolBase = (Join-Path $env:LOCALAPPDATA 'cpmf\tools'), [string] $ConfigFile = '', [string[]]$UipcliArgs = @() ) Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' # Apply layered config defaults $cfg = Get-CpmfUipsPackEffectiveConfig -ConfigFile $ConfigFile foreach ($key in @('CliVersionNet6', 'CliVersionNet8', 'ToolBase')) { if (-not $PSBoundParameters.ContainsKey($key) -and $cfg.ContainsKey($key)) { Set-Variable -Name $key -Value $cfg[$key] } } foreach ($key in @('UipcliArgs', 'Targets')) { if (-not $PSBoundParameters.ContainsKey($key) -and $cfg.ContainsKey($key)) { Set-Variable -Name $key -Value ([string[]]$cfg[$key]) } } foreach ($key in @('SkipInstall')) { if (-not $PSBoundParameters.ContainsKey($key) -and $cfg.ContainsKey($key) -and $cfg[$key]) { Set-Variable -Name $key -Value ([switch]$true) } } $validTargets = @('net6', 'net8') foreach ($t in $Targets) { if ($t -notin $validTargets) { throw "-Targets contains invalid value '$t'. Valid values: net6, net8" } } $ProjectJson = (Resolve-Path $ProjectJson).Path if (-not $SkipInstall) { if ($Backend -eq 'uipathcli') { Install-UipathcliTool -ToolBase $ToolBase } else { foreach ($target in $Targets) { $cliVer = if ($target -eq 'net6') { $CliVersionNet6 } else { $CliVersionNet8 } Install-CpmfUipsPackCommandLineTool -CliVersion $cliVer -ToolBase $ToolBase } } } $results = [System.Collections.Generic.List[string]]::new() $analyzeTargets = if ($Backend -eq 'uipathcli') { @('uipathcli') } else { $Targets } foreach ($target in $analyzeTargets) { if ($Backend -eq 'uipcli') { $cliVer = if ($target -eq 'net6') { $CliVersionNet6 } else { $CliVersionNet8 } } else { $cliVer = $CliVersionNet6 # placeholder; uipathcli exe path is backend-independent } $p = Get-CpmfUipsToolPaths -CliVersion $cliVer -ToolBase $ToolBase if (-not $PSCmdlet.ShouldProcess($ProjectJson, "Analyze with $Backend")) { continue } $label = if ($analyzeTargets.Count -gt 1) { " [$target]" } else { '' } Write-Progress -Activity "CpmfUipsAnalyze$label" -Status 'Analyzing …' -PercentComplete 10 $exitCode = Invoke-CliBackend ` -Op analyze ` -Backend $Backend ` -UipcliExe $p.UipcliExe ` -UipathcliExe $p.UipathcliExe ` -ProjectJson $ProjectJson ` -ExtraArgs $UipcliArgs Write-Progress -Activity "CpmfUipsAnalyze$label" -Completed if ($exitCode -ne 0) { throw "analyze failed (exit $exitCode)" } } Write-Output ($results.ToArray()) } |