qbo4.Nuget.ps1
<# Manage iterative updating of Nuget packages. These functions must be called from Visual Studio's Package Manager Console, because they interact with Visual Studio. Usage: install-module qbo4.Infrastructure import-module qbo4.Infrastructure cd c:\source\devops\quandis\qbo3\ update-qbonugetpackages "3.0.7-CI-" qbo.Application.sln -prerelease #> function Update-qboNugetPackages { <# .SYNOPSIS Updates qbo-related Nuget packages in a solution .INPUTS #> [CmdletBinding()] Param( [Parameter(Position=0, Mandatory=$true)] [string]$Version, [Parameter(Position=1)] [string]$Solution=$dte.Solution.FullName, [Parameter(Position=2)] [string]$Filter="qbo", [Parameter(Position=3)] [string]$Source=$null, [Parameter(Position=4)] [string]$Include="*", [Parameter(Position=5)] [string]$Exclude="", [Parameter(Mandatory=$false)] [Switch] $Prerelease, [Switch] $WhatIf ) if ($Version -match "-$") { $Version = $Version + (get-date -format 'yyyyMMdd-HHms') } $folder = split-path -path $Solution # open solution if not already open if ($Solution -ne $dte.Solution.FullName) { Write-Host "Opening $Solution" $dte.Solution.Open($Solution) } # move to solution root folder $item = get-item $dte.Solution.FullName cd $item.Directory.FullName Write-Host " Restoring nuget packages for $Solution" nuget restore $Solution # $packages = get-package -filter $filter | select-object id | get-unique -asstring $packages = get-package -filter $filter | % {$_.id } | sort | get-unique $projects = get-package -filter $filter | where-object {$_.ProjectName -notlike $Exclude } | where-object {$_.ProjectName -like $Include} | % {$_.ProjectName} | sort | get-unique # Filter packages based on package source # Filter projects based on a project filter foreach ($package in $packages) { if ($Source -ne $null) { Write-Host " Updating $($package) from ${$Source)" update-package -id $package -source $source -IncludePrerelease:$Prerelease -whatif:$WhatIf -ErrorAction SilentlyContinue } else { Write-Host " Updating $($package) from any feed" update-package -id $package -IncludePrerelease:$Prerelease -whatif:$WhatIf -ErrorAction SilentlyContinue } } if ($WhatIf) { return } foreach ($project in $projects) { $csproj = $project + ".csproj" $path = (get-childitem -recurse -include $csproj).FullName Write-Host " Packing $project using version $Version" nuget pack $path -build -version $Version } # push instead of copy Write-Host " Push nuget packages to $source" $nugets = get-childitem -recurse -include "*$version.nupkg" foreach ($nuget in $nugets) { Write-Host " Pushing $nuget" # copy $nuget $Repo nuget push -source $Source $nuget } } <# Todo: create a wrapper function to execute in the proper build order for qbo3: $solutions = @( "C:\source\devops\quandis\qbo3\qbo.Application.sln", "C:\source\devops\quandis\qbo3\qbo.Attachment.sln", "C:\source\devops\quandis\qbo3\qbo.Contact.sln", ) $version = "3.0.7-CI-" foreach ($solution in $solutions) { update-qbonugetpackages $solution $version -prerelease } #> Export-ModuleMember -Function @('Update-qboNugetPackages') |