From 91b3438381185e3771a719ef907d4f4ea7fa40d4 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Thu, 21 Jan 2021 16:48:14 -0800 Subject: [PATCH] Sync eng/common directory with azure-sdk-tools for PR 1251 (#16290) * Add PrepareRelease Script * Generalize Prepare-Release Script * Update Update-ChangeLog.ps1 * Update Package-Properties.ps1 * Update Collect-ChangeLog Script * Update Collect-ChangeLog.ps1 and Collect-Unreleased.ps1 * Update GeneralReleaseNotesParser.ps1 script * Update Prepare-Release Script to use recent DevOps Scripts * Move Get-LanguageName to eng\common\scripts\Helpers\DevOps-WorkItem-Helpers.ps1, improve error message, add logic to detect changes made by prepare-release script * Use LanguageDisplayName, move Get-CSVMetadata to Package-Properties.ps1 Co-authored-by: Chidozie Ononiwu --- .../docgeneration/Generate-DocIndex.ps1 | 7 -- eng/common/scripts/Package-Properties.ps1 | 31 ++++- eng/common/scripts/Prepare-Release.ps1 | 109 ++++++++++++++++++ eng/common/scripts/common.ps1 | 6 + 4 files changed, 141 insertions(+), 12 deletions(-) create mode 100644 eng/common/scripts/Prepare-Release.ps1 diff --git a/eng/common/docgeneration/Generate-DocIndex.ps1 b/eng/common/docgeneration/Generate-DocIndex.ps1 index e01fe4fc057b..bfdae912e6b2 100644 --- a/eng/common/docgeneration/Generate-DocIndex.ps1 +++ b/eng/common/docgeneration/Generate-DocIndex.ps1 @@ -10,13 +10,6 @@ Param ( ) . "${PSScriptRoot}\..\scripts\common.ps1" -# Given the metadata url under https://github.com/Azure/azure-sdk/tree/master/_data/releases/latest, -# the function will return the csv metadata back as part of response. -function Get-CSVMetadata ([string]$MetadataUri) { - $metadataResponse = Invoke-RestMethod -Uri $MetadataUri -method "GET" -MaximumRetryCount 3 -RetryIntervalSec 10 | ConvertFrom-Csv - return $metadataResponse -} - # Given the github io blob storage url and language regex, # the helper function will return a list of artifact names. function Get-BlobStorage-Artifacts($blobStorageUrl, $blobDirectoryRegex, $blobArtifactsReplacement) { diff --git a/eng/common/scripts/Package-Properties.ps1 b/eng/common/scripts/Package-Properties.ps1 index be1d3f5288dc..c1daf77b3b36 100644 --- a/eng/common/scripts/Package-Properties.ps1 +++ b/eng/common/scripts/Package-Properties.ps1 @@ -84,7 +84,7 @@ function Get-PkgProperties if (!(Test-Path $serviceDirectoryPath)) { LogError "Service Directory $ServiceDirectory does not exist" - exit 1 + return $null } $directoriesPresent = Get-ChildItem $serviceDirectoryPath -Directory @@ -109,7 +109,8 @@ function Get-PkgProperties return $pkgProps } } - LogError "Failed to retrive Properties for $PackageName" + LogWarning "Failed to retrive Properties for $PackageName" + return $null } # Takes ServiceName and Repo Root Directory @@ -152,12 +153,24 @@ function Get-AllPkgProperties ([string]$ServiceDirectory = $null) return $pkgPropsResult } +# Given the metadata url under https://github.com/Azure/azure-sdk/tree/master/_data/releases/latest, +# the function will return the csv metadata back as part of response. +function Get-CSVMetadata ([string]$MetadataUri=$MetadataUri) +{ + $metadataResponse = Invoke-RestMethod -Uri $MetadataUri -method "GET" -MaximumRetryCount 3 -RetryIntervalSec 10 | ConvertFrom-Csv + return $metadataResponse +} + function Operate-OnPackages ($activePkgList, $ServiceDirectory, [Array]$pkgPropsResult) { foreach ($pkg in $activePkgList) { + LogDebug "Operating on $($pkg["name"])" $pkgProps = Get-PkgProperties -PackageName $pkg["name"] -ServiceDirectory $ServiceDirectory - $pkgPropsResult += $pkgProps + if ($null -ne $pkgProps) + { + $pkgPropsResult += $pkgProps + } } return $pkgPropsResult } @@ -165,8 +178,16 @@ function Operate-OnPackages ($activePkgList, $ServiceDirectory, [Array]$pkgProps function Get-PkgListFromYml ($ciYmlPath) { $ProgressPreference = "SilentlyContinue" - Register-PSRepository -Default -ErrorAction:SilentlyContinue - Install-Module -Name powershell-yaml -RequiredVersion 0.4.1 -Force -Scope CurrentUser + if ((Get-PSRepository | ?{$_.Name -eq "PSGallery"}).Count -eq 0) + { + Register-PSRepository -Default -ErrorAction:SilentlyContinue + } + + if ((Get-Module -ListAvailable -Name powershell-yaml | ?{$_.Version -eq "0.4.2"}).Count -eq 0) + { + Install-Module -Name powershell-yaml -RequiredVersion 0.4.2 -Force -Scope CurrentUser + } + $ciYmlContent = Get-Content $ciYmlPath -Raw $ciYmlObj = ConvertFrom-Yaml $ciYmlContent -Ordered if ($ciYmlObj.Contains("stages")) diff --git a/eng/common/scripts/Prepare-Release.ps1 b/eng/common/scripts/Prepare-Release.ps1 new file mode 100644 index 000000000000..dbe6438c28a7 --- /dev/null +++ b/eng/common/scripts/Prepare-Release.ps1 @@ -0,0 +1,109 @@ +#Requires -Version 6.0 + +[CmdletBinding()] +param( + [Parameter(Mandatory=$true)] + [string]$PackageName, + [string]$ServiceDirectory, + [string]$ReleaseDate, # Pass Date in the form MM/dd/yyyy" + [string]$BuildType # For Java +) + +. ${PSScriptRoot}\common.ps1 + +function Get-ReleaseDay($baseDate) +{ + # Find first friday + while ($baseDate.DayOfWeek -ne 5) + { + $baseDate = $baseDate.AddDays(1) + } + + # Go to Tuesday + $baseDate = $baseDate.AddDays(4) + + return $baseDate; +} + +$ErrorPreference = 'Stop' + +$packageProperties = Get-PkgProperties -PackageName $PackageName -ServiceDirectory $serviceDirectory + +Write-Host "Source directory [ $serviceDirectory ]" + +if (!$ReleaseDate) +{ + $currentDate = Get-Date + $thisMonthReleaseDate = Get-ReleaseDay((Get-Date -Day 1)); + $nextMonthReleaseDate = Get-ReleaseDay((Get-Date -Day 1).AddMonths(1)); + + if ($thisMonthReleaseDate -ge $currentDate) + { + # On track for this month release + $ParsedReleaseDate = $thisMonthReleaseDate + } + elseif ($currentDate.Day -lt 15) + { + # Catching up to this month release + $ParsedReleaseDate = $currentDate + } + else + { + # Next month release + $ParsedReleaseDate = $nextMonthReleaseDate + } +} +else +{ + $ParsedReleaseDate = ([datetime]$ReleaseDate, 'MM/dd/yyyy', [Globalization.CultureInfo]::InvariantCulture) +} + +$releaseDateString = $ParsedReleaseDate.ToString("MM/dd/yyyy") +$month = $ParsedReleaseDate.ToString("MMMM") + +Write-Host +Write-Host "Assuming release is in $month with release date $releaseDateString" -ForegroundColor Green + +$currentProjectVersion = $packageProperties.Version + +$newVersion = Read-Host -Prompt "Input the new version, or press Enter to use use current project version '$currentProjectVersion'" + +if (!$newVersion) +{ + $newVersion = $currentProjectVersion; +} + +$newVersionParsed = [AzureEngSemanticVersion]::ParseVersionString($newVersion) +if ($null -eq $newVersionParsed) +{ + Write-Error "Invalid version $newVersion. Version must follow standard SemVer rules, see https://aka.ms/azsdk/engsys/packageversioning" + exit 1 +} + +if (Test-Path "Function:SetPackageVersion") +{ + SetPackageVersion -PackageName $packageProperties.Name -Version $newVersion -ServiceDirectory $serviceDirectory -ReleaseDate $releaseDateString ` + -BuildType $BuildType -GroupId $packageProperties.Group +} +else +{ + LogError "The function 'SetPackageVersion' was not found.` + Make sure it is present in eng/scripts/Language-Settings.ps1.` + See https://github.com/Azure/azure-sdk-tools/blob/master/doc/common/common_engsys.md#code-structure" + exit 1 +} + +&$EngCommonScriptsDir/Update-DevOps-Release-WorkItem.ps1 ` +-language $LanguageDisplayName ` +-packageName $packageProperties.Name ` +-version $newVersion ` +-plannedDate $releaseDateString ` +-packageRepoPath $packageProperties.serviceDirectory + +git diff -s --exit-code $packageProperties.DirectoryPath +if ($LASTEXITCODE -ne 0) +{ + git status + Write-Host "Some changes were made to the repo source" -ForegroundColor Green + Write-Host "Submit a pull request with the necessary changes to the repo" -ForegroundColor Green +} \ No newline at end of file diff --git a/eng/common/scripts/common.ps1 b/eng/common/scripts/common.ps1 index e83b9a32e4fe..8ccf27b0ba4f 100644 --- a/eng/common/scripts/common.ps1 +++ b/eng/common/scripts/common.ps1 @@ -24,11 +24,17 @@ $EngScriptsLanguageSettings = Join-path $EngScriptsDir "Language-Settings.ps1" if (Test-Path $EngScriptsLanguageSettings) { . $EngScriptsLanguageSettings } + if (-not $LanguageShort) { $LangaugeShort = $Language } +if (-not $LanguageDisplayName) +{ + $LanguageDisplayName = $Language +} + # Transformed Functions $GetPackageInfoFromRepoFn = "Get-${Language}-PackageInfoFromRepo" $GetPackageInfoFromPackageFileFn = "Get-${Language}-PackageInfoFromPackageFile"