From 89c70cc958e09024d5d1c4bc3be495905c5a9665 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 7 Apr 2020 13:47:22 -0700 Subject: [PATCH 1/2] Fix sync build --- .../AzArtifactFeed/PSGalleryToAzArtifacts.yml | 6 +- .../SyncGalleryToAzArtifacts.psm1 | 87 +++++++------------ 2 files changed, 38 insertions(+), 55 deletions(-) diff --git a/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml b/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml index 1faffc3d247..a85d20f42e0 100644 --- a/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml +++ b/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml @@ -8,7 +8,11 @@ queue: name: Hosted VS2017 steps: - pwsh: | - Install-Module -Name PowerShellGet -MinimumVersion 2.0.1 -Force + $minVer = [version]::new("2.2.3") + $curVer = Get-Module PowerShellGet -ListAvailable | Select-Object -First 1 | ForEach-Object Version + if (-not $curVer -or $curVer -lt $minVer) { + Install-Module -Name PowerShellGet -MinimumVersion 2.2.3 -Force + } displayName: Update PSGet and PackageManagement condition: succeededOrFailed() diff --git a/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 b/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 index 54acd4a427f..af4c2fe9044 100644 --- a/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 +++ b/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 @@ -66,17 +66,20 @@ function SyncGalleryToAzArtifacts { } # Check if Az package version is less that gallery version - if (CompareVersions -lt -ReferencePackage $foundPackageOnAz -DifferencePackage $foundPackageOnGallery) { + $pkgOnAzVersion = [System.Management.Automation.SemanticVersion]::new($foundPackageOnAz.Version) + $pkgOnGalleryVersion = [System.Management.Automation.SemanticVersion]::new($foundPackageOnGallery.Version) + + if ($pkgOnAzVersion -lt $pkgOnGalleryVersion) { Write-Verbose -Verbose "Module needs to be updated $($package.Name) - $($foundPackageOnGallery.Version)" $modulesToUpdate += $foundPackageOnGallery - } elseif (CompareVersions -lt -ReferencePackage $foundPackageOnGallery -DifferencePackage $foundPackageOnAz) { + } elseif ($pkgOnGalleryVersion -lt $pkgOnAzVersion) { Write-Warning "Newer version found on Az Artifacts - $($foundPackageOnAz.Name) - $($foundPackageOnAz.Version)" } else { Write-Verbose -Verbose "Module is in sync - $($package.Name)" } } - "Gallery Packages:`n" + "`nGallery Packages:" $galleryPackages "`nAz Artifacts Packages:`n" @@ -90,66 +93,42 @@ function SyncGalleryToAzArtifacts { Save-Package -Provider NuGet -Source $galleryUrl -Name $package.Name -RequiredVersion $package.Version -Path $Destination } - # Remove dependent packages downloaded by Save-Module if there are already present in AzArtifacts feed. - try { - $null = Register-PackageSource -Name local -Location $Destination -ProviderName NuGet -Force - $packageNamesToKeep = @() - $savedPackages = Find-Package -Source local -AllVersions -AllowPreReleaseVersion + if ($modulesToUpdate.Length -gt 0) + { + # Remove dependent packages downloaded by Save-Package if there are already present in AzArtifacts feed. + try { + $null = Register-PackageSource -Name local -Location $Destination -ProviderName NuGet -Force + $packageNamesToKeep = @() + $savedPackages = Find-Package -Source local -AllVersions -AllowPreReleaseVersion - Write-Verbose -Verbose "Saved packages:" - $savedPackages | Out-String | Write-Verbose -Verbose + Write-Verbose -Verbose "Saved packages:" + $savedPackages | Out-String | Write-Verbose -Verbose - foreach($package in $savedPackages) { - $pkgVersion = NormalizeVersion -version $package.Version - $foundMatch = $azArtifactsPackages | Where-Object { $_.Name -eq $package.Name -and (NormalizeVersion -version $_.Version) -eq $pkgVersion } + foreach($package in $savedPackages) { + $pkgVersion = NormalizeVersion -version $package.Version + $foundMatch = $azArtifactsPackages | Where-Object { $_.Name -eq $package.Name -and (NormalizeVersion -version $_.Version) -eq $pkgVersion } - if(-not $foundMatch) { - Write-Verbose "Keeping package $($package.PackageFileName)" -Verbose - $packageNamesToKeep += "{0}*.nupkg" -f $package.Name + if(-not $foundMatch) { + Write-Verbose "Keeping package $($package.PackageFileName)" -Verbose + $packageNamesToKeep += "{0}*.nupkg" -f $package.Name + } } - } - - Remove-Item -Path $Destination -Exclude $packageNamesToKeep -Recurse -Force -Verbose - - Write-Verbose -Verbose "Packages kept for upload" - Get-ChildItem $Destination | Out-String | Write-Verbose -Verbose - } - finally { - Unregister-PackageSource -Name local -Force -ErrorAction SilentlyContinue - } - -} -Function CompareVersions { - param ( - [Microsoft.PackageManagement.Packaging.SoftwareIdentity] - $ReferencePackage, - [Microsoft.PackageManagement.Packaging.SoftwareIdentity] - $DifferencePackage, - [Parameter(Mandatory = $true, ParameterSetName='lt')] - [switch] - $lt, - [Parameter(Mandatory = $true, ParameterSetName='gt')] - [switch] - $gt - ) - - if ($ReferencePackage.Version -eq $DifferencePackage.Version) { - return $false - } - - $latest = SortPackage -p @($ReferencePackage,$DifferencePackage) | Select-Object -First 1 + if ($packageNamesToKeep.Length -gt 0) { + ## Removing only if we do have some packages to keep, + ## otherwise the '$Destination' folder will be removed. + Remove-Item -Path $Destination -Exclude $packageNamesToKeep -Recurse -Force -Verbose + } - if ($gt.IsPresent) { - return $ReferencePackage -eq $latest - } elseif ($lt.IsPresent) { - return $DifferencePackage -eq $latest - } else { - throw "Unknown parameter set" + Write-Verbose -Verbose "Packages kept for upload" + Get-ChildItem $Destination | Out-String | Write-Verbose -Verbose + } + finally { + Unregister-PackageSource -Name local -Force -ErrorAction SilentlyContinue + } } } - Function SortPackage { param( [Parameter(ValueFromPipeline = $true)] From 3d3a894ac13ce76ee2b464ea58b952c93f5965a2 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 7 Apr 2020 15:00:30 -0700 Subject: [PATCH 2/2] Address comments --- .../azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml | 2 +- .../azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml b/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml index a85d20f42e0..fab28643168 100644 --- a/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml +++ b/tools/releaseBuild/azureDevOps/AzArtifactFeed/PSGalleryToAzArtifacts.yml @@ -8,7 +8,7 @@ queue: name: Hosted VS2017 steps: - pwsh: | - $minVer = [version]::new("2.2.3") + $minVer = [version]"2.2.3" $curVer = Get-Module PowerShellGet -ListAvailable | Select-Object -First 1 | ForEach-Object Version if (-not $curVer -or $curVer -lt $minVer) { Install-Module -Name PowerShellGet -MinimumVersion 2.2.3 -Force diff --git a/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 b/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 index af4c2fe9044..043e6b65174 100644 --- a/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 +++ b/tools/releaseBuild/azureDevOps/AzArtifactFeed/SyncGalleryToAzArtifacts.psm1 @@ -66,8 +66,8 @@ function SyncGalleryToAzArtifacts { } # Check if Az package version is less that gallery version - $pkgOnAzVersion = [System.Management.Automation.SemanticVersion]::new($foundPackageOnAz.Version) - $pkgOnGalleryVersion = [System.Management.Automation.SemanticVersion]::new($foundPackageOnGallery.Version) + $pkgOnAzVersion = [semver]::new($foundPackageOnAz.Version) + $pkgOnGalleryVersion = [semver]::new($foundPackageOnGallery.Version) if ($pkgOnAzVersion -lt $pkgOnGalleryVersion) { Write-Verbose -Verbose "Module needs to be updated $($package.Name) - $($foundPackageOnGallery.Version)"