Functions/Update-ModuleVersion.ps1
Function Update-ModuleVersion{ [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$ModulePath, [Switch]$Ask, [Switch]$Patch ) BEGIN{ Write-Verbose "#################################################################" Write-Verbose "Beginning $($MyInvocation.MyCommand.Name) on $($ENV:ComputerName) @ $(Get-Date -Format "yyyy.MM.dd HH:mm:ss")" Write-Verbose "#################################################################" } PROCESS{ IF ((Get-Item $ModulePath).PSIsContainer -ne $True){ $ModulePath = (Get-Item $ModulePath).DirectoryName } $ModuleName = $ModulePath.Trimend('\').Split('\')[-1] $ManifestPath = Get-ChildItem $Path "$ModuleName.psd1" -Recurse | Select -ExpandProperty FullName #IF(Test-Path "$ModulePath\$ModuleName.psd1"){$ManifestPath = "$ModulePath\$ModuleName.psd1"} #ELSEIF(Test-Path "$ModulePath\$ModuleName\$ModuleName.psd1"){$ManifestPath = "$ModulePath\$ModuleName\$ModuleName.psd1"} #ELSE{THROW "No manifest was found"} Write-Verbose ("Importing {0}" -f $ModuleName) Import-Module $ManifestPath -Force $CommandList = Get-Command -Module $ModuleName Write-Verbose ("Removing {0}" -f $ModuleName) Remove-Module $ModuleName -Force Write-Output 'Calculating fingerprint' $Fingerprint = ForEach ( $Command in $CommandList ){ ForEach ( $Parameter in $Command.parameters.keys ){ '{0}:{1}' -f $Command.name, $Command.parameters[$Parameter].Name $Command.parameters[$Parameter].aliases | ForEach-Object { Write-Verbose ('{0}:{1}' -f $Command.name, $_)} } } $MinorFeature = 0 $MajorFeature = 0 $VersionType = $Null IF($Patch){$VersionType = 'Patch'} IF([string]::IsNullOrEmpty($fingerprint)){$VersionType = 'Patch'} IF(!([string]::IsNullOrEmpty($fingerprint))){ IF(Test-Path $(Join-Path $ModulePath fingerprint) ){ $OldFingerprint = Get-Content $(Join-Path $ModulePath fingerprint) } ELSE{ Write-Verbose "No Fingerprint found, saving current fingerprint" $OldFingerprint = $Fingerprint } IF(Compare-Object -ReferenceObject $OldFingerprint -DifferenceObject $Fingerprint){ Write-Output 'Detecting new features' $Fingerprint | Where {$_ -notin $OldFingerprint } | ForEach-Object {$MinorFeature++} #ForEach-Object {$VersionType = 'Minor'; " $_"} IF ($MinorFeature -ge 1){$VersionType = 'Minor'} Write-Output 'Detecting breaking changes' $OldFingerprint | Where {$_ -notin $Fingerprint } | ForEach-Object {$MajorFeature++} IF ($MajorFeature -ge 1){$VersionType = 'Major'} #ForEach-Object {$VersionType = 'Major'; " $_"} } IF($PSCmdlet.ShouldProcess( "Fingerprint will be saved" )){ Set-Content -Path $(Join-Path $ModulePath fingerprint) -Value $Fingerprint } } IF($Ask){ Write-output "$ModulePath\$ModuleName.psd1 would have been updated by $VersionType" } ELSE{ IF(!([string]::IsNullOrEmpty($VersionType))){ IF($PSCmdlet.ShouldProcess( "$ModulePath\$ModuleName.psd1 will be updated by $VersionType" )){ Step-ModuleVersion -Path $ManifestPath -By $VersionType } } } } } |