Publish-Packages.psm1
<#
.Synopsis Automatic Publish Tool (APT) .DESCRIPTION Publish or rewrite nugets (feed/local nuget storage) .EXAMPLE Publish-Packages -Path D:\Projects\ActiveOffice.NET\ActiveOffice.NET\devops\output\ -Feed Lomtec.ActiveOffice .EXAMPLE Publish-Packages -Path D:\Projects\ActiveOffice.NET\ActiveOffice.NET\devops\output\ -ProjectPackages D:\Projects\CISSS\src\packages\ -EnableDebug .EXAMPLE Publish-Packages -Path D:\Projects\ActiveOffice.NET\ActiveOffice.NET\devops\output\ -ProjectPackages D:\Projects\CISSS\src\packages\ -EnableDebug -ResetFeed .NOTES Author: Imrich Szolik #> function Publish-Packages { [CmdletBinding()] param ( #Packages path [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$false, HelpMessage="Packages path")] [string] $Path, #Package feed name [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Packages feed name.")] [string] $Feed, #Disable deploy to nuget server, rewrite local packages for debug [switch] [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Disable deploy to nuget server, rewrite local packages for debug!")] $EnableDebug, #Delete global and locel feed [switch] [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Delete global and locel feed")] $ResetFeed, #Project packages path [string[]] [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Project packages path.")] $ProjectPackages, #Publish verbosity [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$false, HelpMessage="Verbosity")] $Verbosity = "quiet" ) begin { if(-not $EnableDebug.IsPresent){ if([string]::IsInterned($Feed)){ throw "Feed is required!" } } } process { $files = Get-ChildItem -Path $Path -Filter *.nupkg #to local files if($EnableDebug.IsPresent){ # $match = [regex] '(?<name>.+)\.(?<major>\d+)\.(?<minor>\d+)\.(?<revison>\d+)\.nupkg' $globalNuget = Join-Path -Path (Join-Path -Path $env:USERPROFILE -ChildPath ".nuget") -ChildPath "packages" # foreach($file in $files){ $result = $match.Match($file) if($result.Success){ #rename .nuget to zip (Expand-Archive powershell 5.0) $zipFile = "$file.FullName.zip" Copy-Item $file.FullName $zipFile # $name = Split-Path -Path $result.Groups['name'] -Leaf $version = "$($result.Groups['major']).$($result.Groups['minor']).$($result.Groups['revison'])" $globalPackages = Join-Path $globalNuget -ChildPath $name # Write-Host "#### APT NUGET rewrite: $name.$version ####" if( Test-Path -Type Container $globalPackages){ $packageDirectory = Join-Path $globalPackages -ChildPath $version # Remove-Item -Force -Recurse $packageDirectory -ErrorAction SilentlyContinue # if(-not $ResetFeed.IsPresent){ Write-Verbose "Rewrite user-global package: $name.$version" Expand-Archive -Force -Path $zipFile -DestinationPath $packageDirectory } else{ Write-Verbose "Reset user-global package: $name.$version" } } # if($null -ne $ProjectPackages -and $ProjectPackages.Length -gt 0){ # foreach($p in $ProjectPackages){ # $localPackage = Join-Path $p -ChildPath "$name.$version" # if( Test-Path -Type Container $localPackage){ # Remove-Item -Force -Recurse $localPackage -ErrorAction SilentlyContinue # if(-not $ResetFeed.IsPresent){ Write-Verbose "Rewrite project package: $name.$version" Expand-Archive -Force -Path $zipFile -DestinationPath $localPackage } else{ Write-Verbose "Reset project package: $name.$version" } } } } # Remove-Item $zipFile -Force -ErrorAction SilentlyContinue } } } #to nuget server else{ $exists = nuget.exe list -Source $Feed | Select-Object @{name='Item';expression={$_.Replace(" ",".")}} -Skip 1 | Select-Object -ExpandProperty Item # foreach($file in $files){ $filename = $file.Name $name = $filename.SubString(0,$filename.Length-6) # if($exists -notcontains $name){ Write-Host "#### APT NUGET deploy: $name ####" nuget.exe push -Source $Feed -ApiKey az $file.FullName -Verbosity $Verbosity } else{ Write-Verbose "Found $name, not deployed." } } } } end { } } Export-ModuleMember -Function Publish-Packages # SIG # Begin signature block # MIIH7gYJKoZIhvcNAQcCoIIH3zCCB9sCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU/3Rg/gusLHNBJx+Aa9QgSJ6a # GSegggUPMIIFCzCCAvOgAwIBAgICAKUwDQYJKoZIhvcNAQELBQAwgaAxCzAJBgNV # BAYTAlNLMREwDwYDVQQIEwhTbG92YWtpYTETMBEGA1UEBxMKQnJhdGlzbGF2YTET # MBEGA1UEChMKTG9tdGVjLmNvbTErMCkGA1UEAxMiTG9tdGVjLmNvbSBDZXJ0aWZp # Y2F0aW9uIEF1dGhvcml0eTEnMCUGCSqGSIb3DQEJARYYSW1yaWNoLlN6b2xpa0Bs # b210ZWMuY29tMB4XDTE5MDMyNjE1MDQ0M1oXDTMwMDEwMTAwMDAwMFowgZMxCzAJ # BgNVBAYTAlNLMREwDwYDVQQIEwhTbG92YWtpYTETMBEGA1UEBxMKQnJhdGlzbGF2 # YTETMBEGA1UEChMKTG9tdGVjLmNvbTEeMBwGA1UEAxMVTG9tdGVjLmNvbSBQb3dl # cnNoZWxsMScwJQYJKoZIhvcNAQkBFhhJbXJpY2guU3pvbGlrQGxvbXRlYy5jb20w # ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+J+Jwh25Ha39PSBzRUNj/ # 8+iONxiknLBSTkB1DJEQ9wC6FBS/1EQvbFtn2K6huVZBQCoZzNFcXoiAked3ALIT # UoYxX+fD4Wkve947QqCXGroCFQVaBSLkPoJzWCadlXQWyDyjFuCY42TsQRJB6TFp # n4rVylhinlOvEHJ96COjzvmEs7X1y3tTVPtRiDt3wOxNLx1T1H/6lmVzGFORJS0F # ZvQF231+/Zk4Je+gOe/jguo/gHoZHdjj31JeMLJ6Md3zslAFAPIqI3lofez6V3f7 # PkZLsVnYLAuGElg1I4WUswZJpfbnq2KqPWvlwG9/Xb5KSvUz5d6uRzQUDJAn6fG5 # AgMBAAGjWjBYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgeAMCsGA1UdJQQkMCIGCCsG # AQUFBwMDBgorBgEEAYI3AgEVBgorBgEEAYI3AgEWMBEGCWCGSAGG+EIBAQQEAwIE # sDANBgkqhkiG9w0BAQsFAAOCAgEACSWqb/bJGI4eR07CZ6g3baoe2Djl7gPIPgyg # Y/uYAxGROVfVYQBVafFCfUaCExhiEU1SHdJanCyYlUkx8d9OVVvWiA/L6O+5H608 # l7z1zSLE7R5z5JMB+O/gqImNyKT0C41AP0OkHasCDb78KJu/1nPjqCKpT3SR+Q2w # ayMvOXa+jPy5t0cNgaJXE0cF0wd8QIcHrYe/AT+qW3AHd9hXcppEaKSyIobjbO4O # 2Uf0P+fNNxvjokCDERsk72kPmkIyYBaZM6ezSMIc6LoHwjleO0nPPYxKVKsNeotl # BX89ssDpVlMmLbntUtT4zNZY4CX0aPntMFJxaYBUM1xhdW02FWkOHt5yZXgA376n # l6B9gGHgU28/QXKIJJH1EQAt4oqG9WzbOYxNQm6xAwsOpv9N5NKDppt8UJLF8gIQ # WLlJEcLvY3eMtxcGf7Mgxi892+nGPKNWMiDTjgNwdq/drITbdK1oSbt7/qnCFZhU # NGipYTTUaIlZUICezYDtFFfr1NpYIrHKVEsRLcSjfuOdK+PbLtOjQOs7Mp9whC1J # lZD8o8eX8os8LfSsVbmDlEhG99mO0An3xydarRekrkKym4G/9uMu3Ag1ujw1Ubzz # sklJSrvbD8pCAg4781wb42BCCzOwJrWAiARkIIpgbEL0xKFyV4sADotVzc9y8XI0 # B0P2TOMxggJJMIICRQIBATCBpzCBoDELMAkGA1UEBhMCU0sxETAPBgNVBAgTCFNs # b3Zha2lhMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpMb210ZWMuY29t # MSswKQYDVQQDEyJMb210ZWMuY29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MScw # JQYJKoZIhvcNAQkBFhhJbXJpY2guU3pvbGlrQGxvbXRlYy5jb20CAgClMAkGBSsO # AwIaBQCgeDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEM # BgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEWMCMGCSqG # SIb3DQEJBDEWBBSxW0ayqv3eTsl7dhOF+UH3WSmhyzANBgkqhkiG9w0BAQEFAASC # AQC6pl+5n8Pg41MdIml7wYgFzzlKChj6uRC20TSGJXlPyAcOYnUxJ3K1B1aUPsRi # Gv2OKq3JY6PaaoNagEjCxIGXPVNAD/f29D2pE99sNYqSig0xQcM15bR/zU0EpZZH # UbAHv6dDM+X/1a78ZPYwfBmxLM+z3VcgBiZto7Eivxx5V18rhKBuAUkD9o3RL4Vp # EOqXbD9h+A+bkDxBHpa96/HgXTZGp5Ih6kbkb5YWrdjYMN8myPhgFLa/EsUcxLfA # rlzO9zGRcOJM7B1VhKszGDZqmXWS1p0jKYKRYnUqYFCzpDorx8YuulTli/qL0uuU # Mc8M+eXHFAWlKJlL4zjLDhWj # SIG # End signature block |