diff --git a/CHANGELOG.md b/CHANGELOG.md index 57fa75f..072c31d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,23 +15,32 @@ See [upgrade notes][1] for helpful information when upgrading from previous vers What's changed since v1.5.0: - New features: - - Added support for PSRule v2. [#312](https://github.com/microsoft/PSRule-pipelines/issues/312) + - Added support for PSRule v2 by @BernieWhite. + [#312](https://github.com/microsoft/PSRule-pipelines/issues/312) - Added `ps-rule-assert@2` task for PSRule v2. - Added `ps-rule-install@2` task for PSRule v2. - - Added support for outputting analysis results as SARIF. [#315](https://github.com/microsoft/PSRule-pipelines/issues/315) + - Added support for outputting analysis results as SARIF by @BernieWhite. + [#315](https://github.com/microsoft/PSRule-pipelines/issues/315) - To use the SARIF output format set the `outputFormat` parameter to `Sarif`. - Currently a pre-release version of PSRule must be used. - - Added the ability to use a specific version of PSRule. [#314](https://github.com/microsoft/PSRule-pipelines/issues/314) + - Added the ability to use a specific version of PSRule by @BernieWhite. + [#314](https://github.com/microsoft/PSRule-pipelines/issues/314) - To install a specific version set the version parameter. - By default, the latest stable version of PSRule is used. - - Added the ability to use an alternative PowerShell repository. [#353](https://github.com/microsoft/PSRule-pipelines/issues/353) + - Added the ability to use an alternative PowerShell repository by @BernieWhite. + [#353](https://github.com/microsoft/PSRule-pipelines/issues/353) - Register and authenticate to the repository in PowerShell if required. - Configure repository to install modules from the named repository. - General improvements: - - Expose more rule error output in CI. [#308](https://github.com/microsoft/PSRule-pipelines/issues/308) + - Expose more rule error output in CI by @ArmaanMcleod. + [#308](https://github.com/microsoft/PSRule-pipelines/issues/308) - Bug fixes: - - Fixed failure loading VstsTaskSdk. [#361](https://github.com/microsoft/PSRule-pipelines/issues/361) - - Fixed handling of unset path. [#363](https://github.com/microsoft/PSRule-pipelines/issues/363) + - Fixed failure loading VstsTaskSdk by @BernieWhite. + [#361](https://github.com/microsoft/PSRule-pipelines/issues/361) + - Fixed handling of unset path by @BernieWhite. + [#363](https://github.com/microsoft/PSRule-pipelines/issues/363) + - Fixed dependency conflict with older module versions by @BernieWhite. + [#396](https://github.com/microsoft/PSRule-pipelines/issues/396) ## v1.5.0 diff --git a/tasks/ps-rule-assertV2/powershell.ps1 b/tasks/ps-rule-assertV2/powershell.ps1 index ede134b..3fd3878 100644 --- a/tasks/ps-rule-assertV2/powershell.ps1 +++ b/tasks/ps-rule-assertV2/powershell.ps1 @@ -153,6 +153,9 @@ else { # # Check and install modules # + +Write-Host "`#`#[group]Checking PSRule"; + $dependencyFile = Join-Path -Path $PSScriptRoot -ChildPath 'modules.json'; $latestVersion = (Get-Content -Path $dependencyFile -Raw | ConvertFrom-Json -AsHashtable -Depth 5).dependencies.PSRule.version; $checkParams = @{ @@ -176,8 +179,14 @@ foreach ($m in $installed) { Write-Host "[info] Using existing module $($m.Name): $($m.Version)"; } +Write-Host "`#`#[endgroup]"; + +# # Look for existing modules -Write-Host ''; +# + +Write-Host "`#`#[group]Checking modules"; + $moduleNames = @() if (![String]::IsNullOrEmpty($Modules)) { $moduleNames = $Modules.Split(',', [System.StringSplitOptions]::RemoveEmptyEntries); @@ -218,7 +227,7 @@ foreach ($m in $moduleNames) { } try { - $checkParams = @{ RequiredVersion = $checkParams.RequiredVersion.Split('-')[0] } + $checkParams = @{ MinimumVersion = $checkParams.RequiredVersion.Split('-')[0] } $Null = Import-Module PSRule @checkParams -ErrorAction Stop; $version = (Get-Module PSRule).Version; } @@ -228,10 +237,14 @@ catch { $Host.SetShouldExit(1); } +Write-Host "`#`#[endgroup]"; + # # Run assert pipeline # -Write-Host ''; + +Write-Host "`#`#[group]Checking environment"; + Write-Host "[info] Using Version: $version"; Write-Host "[info] Using Workspace: $workspacePath" Write-Host "[info] Using PWD: $PWD"; @@ -244,6 +257,8 @@ Write-Host "[info] Using InputPath: $InputPath"; Write-Host "[info] Using OutputFormat: $OutputFormat"; Write-Host "[info] Using OutputPath: $OutputPath"; +Write-Host "`#`#[endgroup]"; + try { Push-Location -Path $Path; $invokeParams = @{ @@ -289,10 +304,16 @@ try { } catch [PSRule.Pipeline.RuleException] { Write-Host "`#`#vso[task.logissue type=error]$($_.Exception.Message)"; + Write-Host "$($_.Exception.ScriptStackTrace)"; + HostExit +} +catch [PSRule.Pipeline.FailPipelineException] { + Write-Host "`#`#vso[task.logissue type=error]$(Get-VstsLocString -Key 'AssertFailed')"; HostExit } catch { - Write-Host "`#`#vso[task.logissue type=error]$(Get-VstsLocString -Key 'AssertFailed')"; + Write-Host "`#`#vso[task.logissue type=error]$($_.Exception.Message)"; + Write-Host "$($_.Exception.ScriptStackTrace)"; HostExit } finally { diff --git a/tasks/ps-rule-installV2/powershell.ps1 b/tasks/ps-rule-installV2/powershell.ps1 index 4929b79..50ed963 100644 --- a/tasks/ps-rule-installV2/powershell.ps1 +++ b/tasks/ps-rule-installV2/powershell.ps1 @@ -83,27 +83,34 @@ if ($PreRelease) { $moduleParams['AllowPrerelease'] = $True; } -# Install each module if not already installed -foreach ($m in $moduleNames) { - Write-Host "[info] Checking module: $m"; - if ($Null -eq (Get-InstalledModule -Name $m -ErrorAction Ignore)) { - Write-Host "[info] Installing module: $m"; - $Null = Install-Module -Name $m @moduleParams -Repository $Repository -AllowClobber; - } - elseif ($Latest) { - Write-Host "[info] Updating module: $m"; - $Null = Update-Module -Name $m @moduleParams; - } - else { - WriteDebug "Module '$m' already installed"; - } - # Check - if ($Null -eq (Get-InstalledModule -Name $m)) { - $exitResult = 1; - Write-Host "[error] Failed to install module: $m"; - } - else { - Write-Host "[info] Using module: $m - v$((Get-InstalledModule -Name $m).Version)"; +try { + # Install each module if not already installed + foreach ($m in $moduleNames) { + Write-Host "[info] Checking module: $m"; + if ($Null -eq (Get-InstalledModule -Name $m -ErrorAction Ignore)) { + Write-Host "[info] Installing module: $m"; + $Null = Install-Module -Name $m @moduleParams -Repository $Repository -AllowClobber; + } + elseif ($Latest) { + Write-Host "[info] Updating module: $m"; + $Null = Update-Module -Name $m @moduleParams; + } + else { + WriteDebug "Module '$m' already installed"; + } + # Check + if ($Null -eq (Get-InstalledModule -Name $m)) { + $exitResult = 1; + Write-Host "[error] Failed to install module: $m"; + } + else { + Write-Host "[info] Using module: $m - v$((Get-InstalledModule -Name $m).Version)"; + } } } -$Host.SetShouldExit($exitResult); +catch { + Write-Host "`#`#vso[task.logissue type=error]$($_.Exception.Message)"; + Write-Host "$($_.Exception.ScriptStackTrace)"; + HostExit +} +Write-Host '---';