From 91d54fce39df37e9757616a23cd667b00bfae40e Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:10:29 -0700 Subject: [PATCH 01/10] Updating README content (fixing old references to Out-Splat, thanks @AjayKMehta) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index aa24a42..2906621 100644 --- a/README.md +++ b/README.md @@ -179,14 +179,14 @@ If you don't need all of the commands, you can use -Verb ### Generating Splatting Code -You can use Out-Splatter to generate code that splats. +You can use Out-Splat to generate code that splats. - Out-Splatter -CommandName Get-Command -DefaultParameter @{Module='Splatter';CommandType='Alias'} | Invoke-Expression + Out-Splat -CommandName Get-Command -DefaultParameter @{Module='Splatter';CommandType='Alias'} | Invoke-Expression You can use also use Out-Splatter to generate whole functions, including help. $scriptBlock = - Out-Splatter -FunctionName Get-SplatterAlias -CommandName Get-Command -DefaultParameter @{ + Out-Splat -FunctionName Get-SplatterAlias -CommandName Get-Command -DefaultParameter @{ Module='Splatter';CommandType='Alias' } -ExcludeParameter * -Synopsis 'Gets Splatter Aliases' -Description 'Gets aliases from the module Splatter' . ([ScriptBlock]::Create($scriptBlock)) From cc210d89eb833eca53a855af4b4d21ce6c08dde4 Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:20:49 -0700 Subject: [PATCH 02/10] Out-Splat: Support for -Examples, -Links, -OutputTypes, -Notes (fixes #9) --- Out-Splat.ps1 | 102 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 91 insertions(+), 11 deletions(-) diff --git a/Out-Splat.ps1 b/Out-Splat.ps1 index 3255083..e82540e 100644 --- a/Out-Splat.ps1 +++ b/Out-Splat.ps1 @@ -9,6 +9,10 @@ Initialize-Splatter .Example Out-Splat -CommandName Get-Command + .Example + Out-Splat -FunctionName Get-MyProcess -Example Get-MyProcess -CommandName Get-Process -DefaultParameter @{ + Id = '$pid' + } -ExcludeParameter * #> [CmdletBinding(DefaultParameterSetName='JustTheSplatter')] [OutputType([ScriptBlock])] @@ -84,11 +88,39 @@ [string] $Description, + # One or more examples. + # This is used to make comment-based help in a generated function. + [Parameter(ValueFromPipelineByPropertyName,ParameterSetName='FunctionalSplatter')] + [Alias('Examples')] + [string[]] + $Example, + + # One or more links. + # This is used to make comment-based help in a generated function. + [Parameter(ValueFromPipelineByPropertyName,ParameterSetName='FunctionalSplatter')] + [Alias('Links')] + [string[]] + $Link, + + # Some notes. + # This is used to make comment-based help in a generated function. + [Parameter(ValueFromPipelineByPropertyName,ParameterSetName='FunctionalSplatter')] + [Alias('Notes')] + [string] + $Note, + # The CmdletBinding attribute for a new function [Parameter(ValueFromPipelineByPropertyName,ParameterSetName='FunctionalSplatter')] [string] $CmdletBinding, + # The [OutputType()] of a function. + # If the type resolves to a [type], it's value will be provided as a [type]. + # Otherwise, it will be provided as a [string] + [Parameter(ValueFromPipelineByPropertyName,ParameterSetName='FunctionalSplatter')] + [string[]] + $OutputType, + # A set of additional parameter declarations. # The keys are the names of the parameters, and the values can be a type and a string containing parameter binding and inline help. [Parameter(ValueFromPipelineByPropertyName,ParameterSetName='FunctionalSplatter')] @@ -441,13 +473,48 @@ $parameterHelp $paramBlock = $paramBlockParts -join (',' + ([Environment]::NewLine * 2)) -if (-not $Synopsis) { - $Synopsis = "Wraps $CommandName" -} + if (-not $Synopsis) { + $Synopsis = "Wraps $CommandName" + } -if (-not $Description) { - $Description = "Calls $CommandName, using splatting" -} + if (-not $Description) { + $Description = "Calls $CommandName, using splatting" + } + + $exampleText = + if ($Example) { + @(foreach ($ex in $Example) { + " .Example" + foreach ($ln in $ex -split '(?>\r\n|\n)') { + " $ln" + } + }) -join [Environment]::NewLine + } else { ''} + + $noteText = + if ($Note) { + @( + " .Notes" + foreach ($ln in $Note -split '(?>\r\n|\n)') { + " $ln" + } + ) -join [Environment]::NewLine + } else { ''} + + + + $linkText = + if ($Link) { + @(foreach ($lnk in $Link) { + " .Link" + " $lnk" + }) -join [Environment]::NewLine + } else { @" + .Link + $CommandName +"@ + } + [ScriptBlock]::Create("function $FunctionName { @@ -455,9 +522,13 @@ if (-not $Description) { .Synopsis $Synopsis .Description - $Description - .Link - $CommandName + $Description$( + if ($exampleText) { [Environment]::NewLine + $exampleText} + )$( + if ($linkText) { [Environment]::NewLine + $linkText} + )$( + if ($NoteText) { [Environment]::NewLine + $noteText} + ) #>$(if ($CmdletBinding) { if ($CmdletBinding -like "*CmdletBinding*") { [Environment]::NewLine + (' '*4) + $CmdletBinding @@ -466,9 +537,18 @@ if (-not $Description) { } } elseif ($originalCmdletBinding) { [Environment]::NewLine + (' '*4) + $originalCmdletBinding - }) + })$( + if ($OutputType) { + [Environment]::NewLine + (' '*4) + '[OutputType(' + @(foreach ($ot in $outputtype) { + if ($ot -as [type]) {"[$ot]"} else { "'$ot'"} + }) -join ',' + ')]' + } else { + [Environment]::NewLine + (' '*4) + '[OutputType([PSObject])]' + } + ) param( -$paramBlock) +$paramBlock + ) process { $(@(foreach ($line in $coreSplat -split ([Environment]::Newline)) { From c0feda16773055ad4d0b409271a5247c3598cf02 Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:21:18 -0700 Subject: [PATCH 03/10] Adding tests for Out-Splat. Changing to newer Pester test format. --- Splatter.tests.ps1 | 86 +++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 39 deletions(-) diff --git a/Splatter.tests.ps1 b/Splatter.tests.ps1 index 803cc5d..63b11b6 100644 --- a/Splatter.tests.ps1 +++ b/Splatter.tests.ps1 @@ -4,13 +4,13 @@ describe Splatter { context 'Get-Splat makes splatting more gettable' { it 'Will Find Matching Parameters for a Command' { $splatOut = @{id = $pid;Foo='bar'} | Get-Splat -Command Get-Process - $splatOut.Keys.Count | should be 1 + $splatOut.Keys.Count | should -Be 1 } it 'Will remove invalid input' { @{id = $pid;Timeout=65kb} | Get-Splat -Command Wait-Process | Select-Object -ExpandProperty Count | - should be 1 + should -Be 1 @{id="blah"} | Get-Splat -Command Get-Process } @@ -43,7 +43,7 @@ describe Splatter { } (foo -id $pid).id| - should be $pid + should -Be $pid } } @@ -65,7 +65,7 @@ describe Splatter { it '*@ merges splats' { @{a='b'}| Merge-Splat -Add @{c='d'} | - Select-Object -ExpandProperty Keys | should be a,c + Select-Object -ExpandProperty Keys | should -Be a,c } it '.@ (Use-Splat)' { @@ -80,7 +80,7 @@ describe Splatter { $splat =@{Message='hi'} $splat | Use-Splat { param([Parameter(Mandatory=$true)][string]$Message) $Message - } | should be hi + } | should -Be hi } it 'Can find matching scripts for a piece of data' { @@ -108,17 +108,17 @@ describe Splatter { Get-Splat $Fruit,$vegetable $matchedSplat | Select-Object -ExpandProperty Command | - should be $Fruit + should -Be $Fruit - $matchedSplat | Use-Splat | should be 'apricot is a fruit' + $matchedSplat | Use-Splat | should -Be 'apricot is a fruit' } it 'Can pass additional arguments' { $2Splat = @{} | Get-Splat {$args} $123 = $2Splat | Use-Splat -ArgumentList 1,2,3 $Another123 = @{} | Use-Splat {$args} 1 2 3 - $123 | should be 1,2,3 - $Another123 | should be 1,2,3 + $123 | should -Be 1,2,3 + $Another123 | should -Be 1,2,3 } } @@ -127,7 +127,7 @@ describe Splatter { @{a='b'}| Merge-Splat -Add @{c='d'} | Select-Object -ExpandProperty Keys | - should be a,c + should -Be a,c } it 'Is easy to remove keys from a Splat' { @@ -140,7 +140,7 @@ describe Splatter { @{a='b'} | Merge-Splat -Map @{a='b',@{c='d'},{@{e='f'}}} | Select-Object -ExpandProperty Keys | Sort-Object | - should be a,b,c,e + should -Be a,b,c,e } it 'Can -Map back objects,if a key was found' { @@ -153,30 +153,30 @@ describe Splatter { @{a='b';"c$(Get-Random)"='d'} | Merge-Splat -Exclude c* | Select-Object -ExpandProperty Keys | - should be a + should -Be a } it 'Can -Include Keys' { @{a='b';"c$(Get-Random)"='d'} | Merge-Splat -Include c* | Select-Object -ExpandProperty Keys | - should belike c* + should -Belike c* } it 'Will squish collisions' { $merged = @{a='b'},[Ordered]@{a='a';b='b';c='c'} | Merge-Splat - $merged.keys | should be a,b,c - $merged.a | should be b,a + $merged.keys | should -Be a,b,c + $merged.a | should -Be b,a } it 'If passed -Keep, it will Keep the first one' { $merged = @{a='b'},[Ordered]@{a='a';b='b';c='c'} | Merge-Splat -Keep - $merged.keys | should be a,b,c - $merged.a | should be b + $merged.keys | should -Be a,b,c + $merged.a | should -Be b } it 'If passed -Replace, it will Replace collisions with new items' { $merged = @{a='b'},[Ordered]@{a='a';b='b';c='c'} | Merge-Splat -Replace - $merged.keys | should be a,b,c - $merged.a | should be a + $merged.keys | should -Be a,b,c + $merged.a | should -Be a } } @@ -219,7 +219,7 @@ describe Splatter { } (foo -id $pid).id| - should be $pid + should -Be $pid } } @@ -232,21 +232,21 @@ describe Splatter { throw 'Splatter failed to embed' } $splatterModule = Get-Module Splatter - ${.@} | should not be $splatterModule.ExportedVariables['.@'] + ${.@} | should -Not -Be $splatterModule.ExportedVariables['.@'] @{id=$pid} | & ${.@} gps } it 'is pretty small' { $embeddedSplatter = Initialize-Splatter - $embeddedSplatter.Length | should belessthan 30kb + $embeddedSplatter.Length | should -Belessthan 30kb } - it 'can be minified and compressed' { + it 'can -Be minified and compressed' { $embeddedSplatter = Initialize-Splatter -Minify -Compress - $embeddedSplatter.Length | should belessthan 10kb + $embeddedSplatter.Length | should -Belessthan 10kb } - it 'Can be embedded as a functionl' { + it 'Can -Be embedded as a functionl' { $embeddedSplatter = Initialize-Splatter -Verb Get . ([ScriptBlock]::Create($embeddedSplatter)) } @@ -257,9 +257,9 @@ describe Splatter { . ([ScriptBlock]::Create($embeddedSplatter)) if (${??@} -ne $null) { - throw '${??@} should be undefined' + throw '${??@} should -Be undefined' } - $embeddedSplatter.Length | should belessthan 20kb + $embeddedSplatter.Length | should -Belessthan 20kb } } @@ -267,7 +267,7 @@ describe Splatter { it 'Can write you a splatting script' { $splatScript = Out-Splat -CommandName Get-Command -DefaultParameter @{Module='Splatter';CommandType='Alias'} - $splatScript| should belike '*Get-Command*@*' + $splatScript| should -Belike '*Get-Command*@*' } it 'Can write you a splating function' { $splatFunction = @@ -275,11 +275,19 @@ describe Splatter { Module='Splatter';CommandType='Alias' } -ExcludeParameter * -Synopsis 'Gets Splatter Aliases' -Description 'Gets aliases from the module Splatter' - $splatFunction | should belike '*function Get-SplatterAlias*{*Get-Command*@*' + $splatFunction | should -Belike '*function Get-SplatterAlias*{*Get-Command*@*' + } + + it 'Can write -Examples' { + $splatFunction = + Out-Splat -FunctionName Get-SplatterAlias -CommandName Get-Command -DefaultParameter @{ + Module='Splatter';CommandType='Alias' + } -ExcludeParameter * -Synopsis 'Gets Splatter Aliases' -Description 'Gets aliases from the module Splatter' -Example 'Get-SplatterAlias' + $splatFunction | should -Belike '*.Example*Get-SplatterAlias*' } } - context 'Splatter can be smart about pipelines' { + context 'Splatter can -Be smart about pipelines' { it 'Can determine which parameters can pipe' { $r = @{Foo='Bar';Baz='Bing'} | @@ -291,8 +299,8 @@ describe Splatter { $baz ) } - $r.PipelineParameter.Keys | should be foo - $r.NonPipelineParameter.Keys | should be baz + $r.PipelineParameter.Keys | should -Be foo + $r.NonPipelineParameter.Keys | should -Be baz } it 'Can -Stream splats' { @@ -306,29 +314,29 @@ describe Splatter { $baz ) - begin { $baz } + Begin { $baz } process { $foo } - } -Stream | should be bing,bar,foo + } -Stream | should -Be bing,bar,foo } } - context 'Splatter tries to be fault-tolerant' { + context 'Splatter tries to -Be fault-tolerant' { it 'Will complain if Use-Splat is not provided with a -Command' { $problem = $null @{aSplat='IMadeMySelf'} | Use-Splat -ErrorAction SilentlyContinue -ErrorVariable Problem - if (-not $Problem) { throw "There should hae been a problem" } + if (-not $Problem) { throw "There should hae -Been a problem" } } it 'Will output properties containing invalid parameters' { $o = @{Date='akllaksjasklj'} | Get-Splat Get-Date -Force - $o.Invalid.keys | should be Date + $o.Invalid.keys | should -Be Date } - it 'Will mark parameters that could not be turned into a ScriptBlock as invalid' { + it 'Will mark parameters that could not -Be turned into a ScriptBlock as invalid' { $o = @{Command='{"hi"'} | Get-Splat Invoke-Command -Force - $o.Invalid.keys | should be Command + $o.Invalid.keys | should -Be Command } } From 7aa3e75c7fc078da2efe2f8ad177cf516b5e1995 Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:22:16 -0700 Subject: [PATCH 04/10] Updating Module Version [0.5.3] and release notes --- Splatter.psd1 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Splatter.psd1 b/Splatter.psd1 index d4b9c94..9d641c7 100644 --- a/Splatter.psd1 +++ b/Splatter.psd1 @@ -3,7 +3,7 @@ Copyright = '2019-2021 Start-Automating' RootModule = 'Splatter.psm1' Description = 'Simple Scripts to Supercharge Splatting' - ModuleVersion = '0.5.2' + ModuleVersion = '0.5.3' AliasesToExport = '*' VariablesToExport = '*' GUID = '033f35ed-f8a7-4911-bb62-2691f505ed43' @@ -14,6 +14,10 @@ LicenseURI = 'https://github.com/StartAutomating/Splatter/blob/master/LICENSE' Tags = 'Splatting' ReleaseNotes = @' +### 0.5.3: +* Out-Splat now supports -Examples, -Links, -Notes, and -OutputTypes (Issue #9) +* Documentation updates. + ### 0.5.2: * Improved pipeline support (Fixes #6) * Out-Splat -CrossStream will now output all streams in generated commands, not just error and output. From 34fde945f8853cef2892f21a51b8466846c7f86b Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:39:56 -0700 Subject: [PATCH 05/10] Adding Logo and updating readme with status badge --- Assets/Splatter.png | Bin 0 -> 10641 bytes README.md | 8 +++++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Assets/Splatter.png diff --git a/Assets/Splatter.png b/Assets/Splatter.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b88757fe7b3571edfa54f71bcc2d4fa6f98d5e GIT binary patch literal 10641 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 2906621..11fcb28 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -## Splatter is a simple Splatting toolkit +
+ +[![Test Build And Publish](https://github.com/StartAutomating/Splatter/actions/workflows/TestBuildAndPublish.yml/badge.svg)](https://github.com/StartAutomating/Splatter/actions/workflows/TestBuildAndPublish.yml) +

Simple Scripts to Supercharge Splatting

+
+ +## Splatter is a simple Splatting toolkit Splatting is a technique of passing parameters in PowerShell. From 5fccdc633eac5c463240184fc5892f8dbaf7318d Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:41:10 -0700 Subject: [PATCH 06/10] Updating status badge and formatting --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11fcb28..657cd65 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ 
-[![Test Build And Publish](https://github.com/StartAutomating/Splatter/actions/workflows/TestBuildAndPublish.yml/badge.svg)](https://github.com/StartAutomating/Splatter/actions/workflows/TestBuildAndPublish.yml) -

Simple Scripts to Supercharge Splatting

+ + + +

Simple Scripts to Supercharge Splatting

## Splatter is a simple Splatting toolkit From 80a3eec09b39c74838edf8585c9d85dbfea1d124 Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:41:59 -0700 Subject: [PATCH 07/10] Updating status badge and formatting --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 657cd65..576a2a6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ 
- + - +

Simple Scripts to Supercharge Splatting

From a2112801f94fcb680e0b3260922d7924f1c86d2b Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:45:01 -0700 Subject: [PATCH 08/10] Using wider format of logo. Moving status badge below logo. --- Assets/Splatter-16x9.png | Bin 0 -> 9622 bytes README.md | 7 +++---- 2 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 Assets/Splatter-16x9.png diff --git a/Assets/Splatter-16x9.png b/Assets/Splatter-16x9.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad03a6409be8c924f40771a26072926f0ea2f1b GIT binary patch literal 9622 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 K=Z)%)Z~hN - - - - +

Simple Scripts to Supercharge Splatting

+[![Test Build And Publish](https://github.com/StartAutomating/Splatter/actions/workflows/TestBuildAndPublish.yml/badge.svg)](https://github.com/StartAutomating/Splatter/actions/workflows/TestBuildAndPublish.yml) + ## Splatter is a simple Splatting toolkit Splatting is a technique of passing parameters in PowerShell. From 4c755cfc4802a95360482afc0e90a7599ba09883 Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:50:36 -0700 Subject: [PATCH 09/10] Removing Azure DevOps Pipeline (using GitHub Workflows) --- azure-pipelines.yml | 343 -------------------------------------------- 1 file changed, 343 deletions(-) delete mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index aa08607..0000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,343 +0,0 @@ - -parameters: - - name: ModulePath - type: string - default: - - name: PesterMaxVersion - type: string - default: '4.99.99' -stages: - - stage: PowerShellStaticAnalysis - displayName: Static Analysis - condition: succeeded() - jobs: - - job: PSScriptAnalyzer - displayName: PSScriptAnalyzer - pool: - vmImage: windows-latest - steps: - - powershell: | - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - Install-Module -Name PSDevOps -Repository PSGallery -Force -Scope CurrentUser - Import-Module PSDevOps -Force -PassThru - displayName: InstallPSDevOps - - powershell: | - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - Install-Module -Name PSScriptAnalyzer -Repository PSGallery -Force -Scope CurrentUser - Import-Module PSScriptAnalyzer -Force -PassThru - displayName: InstallPSScriptAnalyzer - - powershell: | - Import-Module PSScriptAnalyzer, PSDevOps - $invokeScriptAnalyzerSplat = @{Path='.\'} - if ($ENV:PSScriptAnalyzer_Recurse) { - $invokeScriptAnalyzerSplat.Recurse = $true - } - $result = Invoke-ScriptAnalyzer @invokeScriptAnalyzerSplat - - foreach ($r in $result) { - if ('information', 'warning' -contains $r.Severity) { - Write-ADOWarning -Message $r.Message -SourcePath $r.ScriptPath -LineNumber $r.Line -ColumnNumber $r.Column - } - elseif ($r.Severity -eq 'Error') { - Write-ADOError -Message $r.Message -SourcePath $r.ScriptPath -LineNumber $r.Line -ColumnNumber $r.Column - } - } - displayName: RunPSScriptAnalyzer - - - stage: TestPowerShellCrossPlatform - displayName: Test - jobs: - - job: Windows - displayName: Windows - pool: - vmImage: windows-latest - steps: - - powershell: | - $Parameters = @{} - $Parameters.PesterMaxVersion = ${{coalesce(format('"{0}"',parameters.PesterMaxVersion), '$null')}}; - foreach ($k in @($parameters.Keys)) { - if ([String]::IsNullOrEmpty($parameters[$k])) { - $parameters.Remove($k) - } - } - & {param( - [string] - $PesterMaxVersion = '4.99.99' - ) - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser -MaximumVersion $PesterMaxVersion -SkipPublisherCheck -AllowClobber - Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion} @Parameters - displayName: InstallPester - - powershell: | - $Parameters = @{} - $Parameters.ModulePath = ${{coalesce(format('"{0}"',parameters.ModulePath), '$null')}}; - $Parameters.PesterMaxVersion = ${{coalesce(format('"{0}"',parameters.PesterMaxVersion), '$null')}}; - foreach ($k in @($parameters.Keys)) { - if ([String]::IsNullOrEmpty($parameters[$k])) { - $parameters.Remove($k) - } - } - & {param( - [string] - $ModulePath, - [string] - $PesterMaxVersion = '4.99.99' - ) - - $orgName, $moduleName = $env:BUILD_REPOSITORY_ID -split "/" - if (-not $ModulePath) { - $orgName, $moduleName = $env:BUILD_REPOSITORY_ID -split "/" - $ModulePath = ".\$moduleName.psd1" - } - Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion | Out-Host - Import-Module $ModulePath -Force -PassThru | Out-Host - $result = - Invoke-Pester -PassThru -Verbose -OutputFile ".\$moduleName.TestResults.xml" -OutputFormat NUnitXml ` - -CodeCoverage "$(Build.SourcesDirectory)\*-*.ps1" -CodeCoverageOutputFile ".\$moduleName.Coverage.xml" - - $psDevOpsImported = Import-Module PSDevOps -Force -PassThru -ErrorAction SilentlyContinue - - if ($psDevOpsImported) { - foreach ($pesterTestResult in $pesterResults.TestResult) { - if ($pesterTestResult.Result -eq 'Failed') { - $foundLineNumber = [Regex]::Match($pesterTestResult.StackTrace, ':\s{0,}(?\d+)\s{0,}\w{1,}\s{0,}(?.+)$', 'Multiline') - $errSplat = @{ - Message = $pesterTestResult.ErrorRecord.Exception.Message - Line = $foundLineNumber.Groups["Line"].Value - SourcePath = $foundLineNumber.Groups["File"].Value - } - - Write-ADOError @errSplat - } - } - } else { - if ($result.FailedCount -gt 0) { - throw "$($result.FailedCount) tests failed." - } - }} @Parameters - displayName: RunPester - - task: PublishTestResults@2 - inputs: - testResultsFormat: NUnit - testResultsFiles: '**/*.TestResults.xml' - mergeTestResults: true - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: JaCoCo - summaryFileLocation: '**/*.Coverage.xml' - reportDirectory: $(System.DefaultWorkingDirectory) - - job: Linux - displayName: Linux - pool: - vmImage: ubuntu-latest - steps: - - script: | - - curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - - curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list - sudo apt-get update - sudo apt-get install -y powershell - - displayName: Install PowerShell Core - - pwsh: | - $Parameters = @{} - $Parameters.PesterMaxVersion = ${{coalesce(format('"{0}"',parameters.PesterMaxVersion), '$null')}}; - foreach ($k in @($parameters.Keys)) { - if ([String]::IsNullOrEmpty($parameters[$k])) { - $parameters.Remove($k) - } - } - & {param( - [string] - $PesterMaxVersion = '4.99.99' - ) - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser -MaximumVersion $PesterMaxVersion -SkipPublisherCheck -AllowClobber - Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion} @Parameters - displayName: InstallPester - - pwsh: | - $Parameters = @{} - $Parameters.ModulePath = ${{coalesce(format('"{0}"',parameters.ModulePath), '$null')}}; - $Parameters.PesterMaxVersion = ${{coalesce(format('"{0}"',parameters.PesterMaxVersion), '$null')}}; - foreach ($k in @($parameters.Keys)) { - if ([String]::IsNullOrEmpty($parameters[$k])) { - $parameters.Remove($k) - } - } - & {param( - [string] - $ModulePath, - [string] - $PesterMaxVersion = '4.99.99' - ) - - $orgName, $moduleName = $env:BUILD_REPOSITORY_ID -split "/" - if (-not $ModulePath) { - $orgName, $moduleName = $env:BUILD_REPOSITORY_ID -split "/" - $ModulePath = ".\$moduleName.psd1" - } - Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion | Out-Host - Import-Module $ModulePath -Force -PassThru | Out-Host - $result = - Invoke-Pester -PassThru -Verbose -OutputFile ".\$moduleName.TestResults.xml" -OutputFormat NUnitXml ` - -CodeCoverage "$(Build.SourcesDirectory)\*-*.ps1" -CodeCoverageOutputFile ".\$moduleName.Coverage.xml" - - $psDevOpsImported = Import-Module PSDevOps -Force -PassThru -ErrorAction SilentlyContinue - - if ($psDevOpsImported) { - foreach ($pesterTestResult in $pesterResults.TestResult) { - if ($pesterTestResult.Result -eq 'Failed') { - $foundLineNumber = [Regex]::Match($pesterTestResult.StackTrace, ':\s{0,}(?\d+)\s{0,}\w{1,}\s{0,}(?.+)$', 'Multiline') - $errSplat = @{ - Message = $pesterTestResult.ErrorRecord.Exception.Message - Line = $foundLineNumber.Groups["Line"].Value - SourcePath = $foundLineNumber.Groups["File"].Value - } - - Write-ADOError @errSplat - } - } - } else { - if ($result.FailedCount -gt 0) { - throw "$($result.FailedCount) tests failed." - } - }} @Parameters - displayName: RunPester - - task: PublishTestResults@2 - inputs: - testResultsFormat: NUnit - testResultsFiles: '**/*.TestResults.xml' - mergeTestResults: true - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: JaCoCo - summaryFileLocation: '**/*.Coverage.xml' - reportDirectory: $(System.DefaultWorkingDirectory) - - job: MacOS - displayName: MacOS - pool: - vmImage: macos-latest - steps: - - script: | - brew update - brew tap caskroom/cask - brew cask install powershell - displayName: Install PowerShell Core - - pwsh: | - $Parameters = @{} - $Parameters.PesterMaxVersion = ${{coalesce(format('"{0}"',parameters.PesterMaxVersion), '$null')}}; - foreach ($k in @($parameters.Keys)) { - if ([String]::IsNullOrEmpty($parameters[$k])) { - $parameters.Remove($k) - } - } - & {param( - [string] - $PesterMaxVersion = '4.99.99' - ) - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser -MaximumVersion $PesterMaxVersion -SkipPublisherCheck -AllowClobber - Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion} @Parameters - displayName: InstallPester - - pwsh: | - $Parameters = @{} - $Parameters.ModulePath = ${{coalesce(format('"{0}"',parameters.ModulePath), '$null')}}; - $Parameters.PesterMaxVersion = ${{coalesce(format('"{0}"',parameters.PesterMaxVersion), '$null')}}; - foreach ($k in @($parameters.Keys)) { - if ([String]::IsNullOrEmpty($parameters[$k])) { - $parameters.Remove($k) - } - } - & {param( - [string] - $ModulePath, - [string] - $PesterMaxVersion = '4.99.99' - ) - - $orgName, $moduleName = $env:BUILD_REPOSITORY_ID -split "/" - if (-not $ModulePath) { - $orgName, $moduleName = $env:BUILD_REPOSITORY_ID -split "/" - $ModulePath = ".\$moduleName.psd1" - } - Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion | Out-Host - Import-Module $ModulePath -Force -PassThru | Out-Host - $result = - Invoke-Pester -PassThru -Verbose -OutputFile ".\$moduleName.TestResults.xml" -OutputFormat NUnitXml ` - -CodeCoverage "$(Build.SourcesDirectory)\*-*.ps1" -CodeCoverageOutputFile ".\$moduleName.Coverage.xml" - - $psDevOpsImported = Import-Module PSDevOps -Force -PassThru -ErrorAction SilentlyContinue - - if ($psDevOpsImported) { - foreach ($pesterTestResult in $pesterResults.TestResult) { - if ($pesterTestResult.Result -eq 'Failed') { - $foundLineNumber = [Regex]::Match($pesterTestResult.StackTrace, ':\s{0,}(?\d+)\s{0,}\w{1,}\s{0,}(?.+)$', 'Multiline') - $errSplat = @{ - Message = $pesterTestResult.ErrorRecord.Exception.Message - Line = $foundLineNumber.Groups["Line"].Value - SourcePath = $foundLineNumber.Groups["File"].Value - } - - Write-ADOError @errSplat - } - } - } else { - if ($result.FailedCount -gt 0) { - throw "$($result.FailedCount) tests failed." - } - }} @Parameters - displayName: RunPester - - task: PublishTestResults@2 - inputs: - testResultsFormat: NUnit - testResultsFiles: '**/*.TestResults.xml' - mergeTestResults: true - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: JaCoCo - summaryFileLocation: '**/*.Coverage.xml' - reportDirectory: $(System.DefaultWorkingDirectory) - - condition: succeeded() - - stage: UpdatePowerShellGallery - displayName: Update - condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) - variables: - - group: Gallery - jobs: - - job: Publish - displayName: PowerShell Gallery - pool: - vmImage: windows-latest - steps: - - powershell: | - $orgName, $moduleName = $env:BUILD_REPOSITORY_ID -split "/" - $imported = Import-Module ".\$moduleName.psd1" -Force -PassThru - $foundModule = Find-Module -Name $ModuleName - if ($foundModule.Version -ge $imported.Version) { - Write-Warning "##vso[task.logissue type=warning]Gallery Version of $moduleName is more recent ($($foundModule.Version) >= $($imported.Version))" - } else { - $gk = '$(GalleryKey)' - $stagingDir = '$(Build.ArtifactStagingDirectory)' - $moduleTempPath = Join-Path $stagingDir $moduleName - - Write-Host "Staging Directory: $ModuleTempPath" - - $imported | Split-Path | Copy-Item -Destination $moduleTempPath -Recurse - $moduleGitPath = Join-Path $moduleTempPath '.git' - Write-Host "Removing .git directory" - Remove-Item -Recurse -Force $moduleGitPath - Write-Host "Module Files:" - Get-ChildItem $moduleTempPath -Recurse - Write-Host "Publishing $moduleName [$($imported.Version)] to Gallery" - Publish-Module -Path $moduleTempPath -NuGetApiKey $gk - if ($?) { - Write-Host "Published to Gallery" - } else { - Write-Host "Gallery Publish Failed" - exit 1 - } - } - displayName: PublishPowerShellGallery - - From 551ed057baef78766974237c71b6ad748327e66a Mon Sep 17 00:00:00 2001 From: James Brundage Date: Sat, 16 Oct 2021 18:53:33 -0700 Subject: [PATCH 10/10] Updating Module Version [0.5.3] and release notes. Adding logo. --- Splatter.psd1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Splatter.psd1 b/Splatter.psd1 index 9d641c7..a5cca26 100644 --- a/Splatter.psd1 +++ b/Splatter.psd1 @@ -12,10 +12,12 @@ PSData = @{ ProjectURI = 'https://github.com/StartAutomating/Splatter' LicenseURI = 'https://github.com/StartAutomating/Splatter/blob/master/LICENSE' + IconURI = 'https://raw.githubusercontent.com/StartAutomating/Splatter/master/Assets/Splatter.png' Tags = 'Splatting' ReleaseNotes = @' ### 0.5.3: * Out-Splat now supports -Examples, -Links, -Notes, and -OutputTypes (Issue #9) +* Adding logo * Documentation updates. ### 0.5.2: