Public/Update-AtwsManifest.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
<#
.COPYRIGHT Copyright (c) Office Center Hønefoss AS. All rights reserved. Licensed under the MIT license. See https://github.com/officecenter/Autotask/blob/master/LICENSE.md for license information. #> Function Update-AtwsManifest { [CmdLetBinding( SupportsShouldProcess = $True, ConfirmImpact = 'High' )] Param( [Switch] $UpdateVersion, [Switch] $Beta ) Begin { # Enable modern -Debug behavior If ($PSCmdlet.MyInvocation.BoundParameters['Debug'].IsPresent) { $DebugPreference = 'Continue' } Write-Debug ('{0}: Begin of function' -F $MyInvocation.MyCommand.Name) If (-not($Script:Atws.Url)) { Throw [ApplicationException] 'Not connected to Autotask WebAPI. Re-import module with valid credentials.' } # Get info from current module $ModuleInfo = $MyInvocation.MyCommand.Module If ($Beta.IsPresent) { $ModuleName = '{0}Beta' -F $ModuleInfo.Name $GUID = 'ff62b403-3520-4b98-a12b-343bb6b79255' # Path to RootModule $PSMName = '{0}\{1}.psm1' -F $ModuleInfo.ModuleBase, $ModuleInfo.Name $PSMDest = '{0}\{1}.psm1' -F $ModuleInfo.ModuleBase, $ModuleName # Update Beta rootmodule $Null = Copy-Item -Path $PSMName -Destination $PSMDest -Force } Else { $ModuleName = $ModuleInfo.Name $GUID = 'abd8b426-797b-4702-b66d-5f871d0701dc' } # Create the parameter hashtable $ManifestParams = @{ } # Get valid parameters $Command = Get-Command -Name New-ModuleManifest # Pre-populate with previous values Foreach ($Parameter in $Command.Parameters.GetEnumerator()) { $Name = $Parameter.Key If ($ModuleInfo.$Name) { $ManifestParams[$Name] = $ModuleInfo.$Name } } # Read the nuspec $Nuspec = New-Object -TypeName XML $NuspecSourcePath = '{0}\{1}.nuspec' -F $ModuleInfo.ModuleBase, $ModuleInfo.Name $NuspecPath = '{0}\{1}.nuspec' -F $ModuleInfo.ModuleBase, $ModuleName $Nuspec.Load($NuspecSourcePath) } Process { # Overwrite parameters that need new values $ManifestParams['Path'] = '{0}\{1}.psd1' -F $ModuleInfo.ModuleBase, $ModuleName If ($UpdateVersion.IsPresent) { # Figure out the new module version number [Version]$ApiVersion = '{0}.{1}' -F $Script:Atws.GetWsdlVersion(), $ModuleInfo.Version.Revision If ($ApiVersion -eq $ModuleInfo.Version) { # It is the same API version. Increase the revision number $Revision = $ModuleInfo.Version.Revision $Revision++ } Else { # New API version. Then this is the first revision of the new API version $Revision = 1 } # Save the new version number to the parameter set [Version]$Moduleversion = '{0}.{1}' -F $Script:Atws.GetWsdlVersion(), $Revision } Else { # Use existing version if no update has been requested $Moduleversion = $ModuleInfo.Version } # Explicitly set important parameters $ManifestParams['RootModule'] = '{0}.psm1' -F $ModuleName $ManifestParams['Moduleversion'] = $Moduleversion # Make sure the GUID matches module manifest (Beta or Release) $ManifestParams['GUID'] = $GUID # Information to export <# $Functions = @() $Moduleinfo.ExportedFunctions.Keys | ForEach-Object { $Functions += $_ }#-replace $ModuleInfo.Prefix, '')} If ($Beta.IsPresent) { # Make sure the beta version does not clobber the release version through # automatic module import $ManifestParams['FunctionsToExport'] = '*' } Else { $ManifestParams['FunctionsToExport'] = $Functions } #> $ManifestParams['FunctionsToExport'] = '*' $ManifestParams['CmdletsToExport'] = @() $ManifestParams['VariablesToExport'] = @() $ManifestParams['AliasesToExport'] = @() # Custom $ManifestParams['LicenseUri'] = $ModuleInfo.PrivateData.PSData.LicenseUri $ManifestParams['ProjectUri'] = $ModuleInfo.PrivateData.PSData.ProjectUri $ManifestParams['ReleaseNotes'] = $ModuleInfo.PrivateData.PSData.ReleaseNotes $ManifestParams['Tags'] = $ModuleInfo.PrivateData.PSData.Tags # Recreate PrivateData $ManifestParams['PrivateData'] = @{ } # There shoult not be any default prefix anymore If ($ManifestParams.Keys -contains 'DefaultCommandPrefix') { $ManifestParams.Remove('DefaultCommandPrefix') } # Update nuspec $Nuspec.DocumentElement.metadata.id = $ModuleName $Nuspec.DocumentElement.metadata.version = $ManifestParams['Moduleversion'].ToString() $Nuspec.DocumentElement.metadata.description = $ManifestParams['Description'] $Nuspec.DocumentElement.metadata.authors = $ManifestParams['Author'] $Nuspec.DocumentElement.metadata.tags = $ManifestParams['Tags'] -join ', ' $Nuspec.DocumentElement.metadata.releasenotes = $ManifestParams['ReleaseNotes'] } End { $Caption = $MyInvocation.MyCommand.Name $VerboseDescrition = '{0}: Overwriting existing module manifest and nuspec information file in {1}' -F $Caption, $ModuleInfo.ModuleBase $VerboseWarning = '{0}: About to overwrite existing module manifest and nuspec information file in {1}. Do you want to continue?' -F $Caption, $ModuleInfo.ModuleBase If ($PSCmdlet.ShouldProcess($VerboseDescrition, $VerboseWarning, $Caption)) { # Create the new manifest New-ModuleManifest @ManifestParams # Save the nuspec $Nuspec.Save($NuspecPath) } Write-Debug ('{0}: End of function' -F $MyInvocation.MyCommand.Name) } } |