diff --git a/eng/common/scripts/Delete-RemoteBranches.ps1 b/eng/common/scripts/Delete-RemoteBranches.ps1 index 49cc85cbe90..c79ff03bd98 100644 --- a/eng/common/scripts/Delete-RemoteBranches.ps1 +++ b/eng/common/scripts/Delete-RemoteBranches.ps1 @@ -1,11 +1,9 @@ [CmdletBinding(SupportsShouldProcess)] param( - # The repo owner: e.g. Azure - $RepoOwner, - # The repo name. E.g. azure-sdk-for-java - $RepoName, # Please use the RepoOwner/RepoName format: e.g. Azure/azure-sdk-for-java - $RepoId="$RepoOwner/$RepoName", + $RepoId = "$RepoOwner/$RepoName", + # Upstream repo to check and see if there are existing open PRs from before deleting branch + $UpstreamRepoId, # CentralRepoId the original PR to generate sync PR. E.g Azure/azure-sdk-tools for eng/common $CentralRepoId, # We start from the sync PRs, use the branch name to get the PR number of central repo. E.g. sync-eng/common-()-(). Have group name on PR number. @@ -15,9 +13,11 @@ param( # Date format: e.g. Tuesday, April 12, 2022 1:36:02 PM. Allow to use other date format. [AllowNull()] [DateTime]$LastCommitOlderThan, + [Switch]$DeleteBranchesEvenIfThereIsOpenPR = $false, [Parameter(Mandatory = $true)] $AuthToken ) +Set-StrictMode -version 3 . (Join-Path $PSScriptRoot common.ps1) @@ -44,26 +44,9 @@ foreach ($res in $responses) continue } - # Get all open sync PRs associate with branch. - try { - $head = "${RepoId}:${branchName}" - LogDebug "Operating on branch [ $branchName ]" - $pullRequests = Get-GitHubPullRequests -RepoId $RepoId -State "all" -Head $head -AuthToken $AuthToken - } - catch + # If we have a central PR that created this branch still open still don't delete the branch + if ($CentralRepoId) { - LogError "Get-GitHubPullRequests failed with exception:`n$_" - exit 1 - } - $openPullRequests = $pullRequests | ? { $_.State -eq "open" } - - if (!$CentralRepoId -and $openPullRequests.Count -gt 0) { - LogDebug "CentralRepoId is not configured and found open PRs associate with branch [ $branchName ]. Skipping..." - continue - } - - # check central PR - if ($CentralRepoId) { $pullRequestNumber = $Matches["PrNumber"] # If central PR number found, then skip if (!$pullRequestNumber) { @@ -88,12 +71,33 @@ foreach ($res in $responses) } } - foreach ($openPullRequest in $openPullRequests) { - Write-Host "Open pull Request [ $($openPullRequest.html_url) ] will be closed after branch deletion." + # If this branch has an open PR in the repo or the upstream repo then don't delete + try + { + $head = "${RepoId}:${branchName}" + LogDebug "Operating on branch [ $branchName ]" + $pullRequests = Get-GitHubPullRequests -RepoId $RepoId -State "all" -Head $head -AuthToken $AuthToken + + # check to see if there are any PR's open in the main central repo as well. + if ($UpstreamRepoId) { + $pullRequests += Get-GitHubPullRequests -RepoId $UpstreamRepoId -State "all" -Head $head -AuthToken $AuthToken + } + } + catch + { + LogError "Get-GitHubPullRequests failed with exception:`n$_" + exit 1 + } + $openPullRequests = @($pullRequests | Where-Object { $_.State -eq "open" }) + + if ($openPullRequests.Count -gt 0 -and !$DeleteBranchesEvenIfThereIsOpenPR) { + LogDebug "CentralRepoId is not configured and found open PRs associate with branch [ $branchName ]. Skipping..." + continue } # If there is date filter, then check if branch last commit older than the date. - if ($LastCommitOlderThan) { + if ($LastCommitOlderThan) + { if (!$res.object -or !$res.object.url) { LogWarning "No commit url returned from response. Skipping... " continue @@ -117,10 +121,15 @@ foreach ($res in $responses) } } - try { + foreach ($openPullRequest in $openPullRequests) { + Write-Host "Open pull Request [ $($openPullRequest.html_url) ] will be closed after branch deletion." + } + + try + { if ($PSCmdlet.ShouldProcess("[ $branchName ] in [ $RepoId ]", "Deleting branches on cleanup script")) { Remove-GitHubSourceReferences -RepoId $RepoId -Ref $branch -AuthToken $AuthToken - Write-Host "The branch [ $branchName ] with sha [$($res.object.sha)] in [ $RepoId ] has been deleted." + Write-Host "The branch [ $branchName ] with sha [ $($res.object.sha) ] in [ $RepoId ] has been deleted." } } catch { diff --git a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 index ba299856b2d..fc0d3497c06 100644 --- a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 +++ b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 @@ -836,6 +836,15 @@ function UpdatePackageVersions($pkgWorkItem, $plannedVersions, $shippedVersions) $shippedVersionSet[$version.Version] = $version $updateShipped = $true } + else + { + # Check for any date update, general case would from be previous Unknown to date + if ($shippedVersionSet[$version.Version].Date -ne $version.Date) + { + $shippedVersionSet[$version.Version] = $version + $updateShipped = $true + } + } } $versionSet = @{} @@ -889,11 +898,11 @@ function UpdatePackageVersions($pkgWorkItem, $plannedVersions, $shippedVersions) # If we shipped a version after we set "In Release" state then reset the state to "Next Release Unknown" if ($pkgWorkItem.fields["System.State"] -eq "In Release") { - $lastShippedDate = [DateTime]$newShippedVersions[0].Date + $lastShippedDate = $newShippedVersions[0].Date -as [DateTime] $markedInReleaseDate = ([DateTime]$pkgWorkItem.fields["Microsoft.VSTS.Common.StateChangeDate"]) # We just shipped so lets set the state to "Next Release Unknown" - if ($markedInReleaseDate -le $lastShippedDate) + if ($lastShippedDate -and $markedInReleaseDate -le $lastShippedDate) { $fieldUpdates += @' {