azure-sdk-for-cpp/eng/common/scripts/Generate-PR-Diff.ps1
Azure SDK Bot 99d0d9faca
Sync eng/common directory with azure-sdk-tools for PR 9328 (#6174)
* ensure that ChangedServices value within the generated pr diff is always properly an array of strings
* upload the changed services as an attachment named AdditionalTags in save-package-properties.yml, to allow PipelineWitness to tag public builds during log processing

---------

Co-authored-by: Scott Beddall <scbedd@microsoft.com>
Co-authored-by: Scott Beddall <45376673+scbedd@users.noreply.github.com>
Co-authored-by: Patrick Hallisey <hallipr@gmail.com>
2024-11-12 14:55:03 -08:00

63 lines
1.7 KiB
PowerShell

<#
.SYNOPSIS
Script used to generate the diff.json file for a PR. Explicitly intended to work in a PR context.
.DESCRIPTION
Combines the result of git diff, some parsed details from the diff, and the PR number into a single JSON file. This JSON file is intended for use further along the pipeline.
.PARAMETER ArtifactPath
The folder in which the result will be written.
.PARAMETER TargetPath
The path under which changes will be detected.
#>
[CmdletBinding()]
Param (
[Parameter(Mandatory = $True)]
[string] $ArtifactPath,
[Parameter(Mandatory = $True)]
[string] $TargetPath
)
. (Join-Path $PSScriptRoot "Helpers" "git-helpers.ps1")
function Get-ChangedServices
{
Param (
[Parameter(Mandatory = $True)]
[string[]] $ChangedFiles
)
[string[]] $changedServices = $ChangedFiles | Foreach-Object { if ($_ -match "sdk/([^/]+)") { $matches[1] } } | Sort-Object -Unique
return , $changedServices
}
if (!(Test-Path $ArtifactPath))
{
New-Item -ItemType Directory -Path $ArtifactPath | Out-Null
}
$ArtifactPath = Resolve-Path $ArtifactPath
$ArtifactName = Join-Path $ArtifactPath "diff.json"
$changedFiles = @()
$changedServices = @()
$changedFiles = Get-ChangedFiles -DiffPath $TargetPath
if ($changedFiles) {
$changedServices = Get-ChangedServices -ChangedFiles $changedFiles
}
$result = [PSCustomObject]@{
"ChangedFiles" = $changedFiles
"ChangedServices" = $changedServices
"PRNumber" = if ($env:SYSTEM_PULLREQUEST_PULLREQUESTNUMBER) { $env:SYSTEM_PULLREQUEST_PULLREQUESTNUMBER } else { "-1" }
}
$json = $result | ConvertTo-Json
$json | Out-File $ArtifactName
Write-Host "`nGenerated diff.json file at $ArtifactName"
Write-Host " $($json -replace "`n", "`n ")"