Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions eng/common/scripts/Get-PackageApprovalStatus.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Invokes the centralized Azure SDK CLI API review release gate and fails unless i

.PARAMETER PackageInfoFiles
Package-info JSON files containing the package name, version, and optional API hash.
Missing or blank hashes are sent as "dummy" so API Review Hub can decide whether review is required.

.PARAMETER RepoOwner
The optional GitHub repository owner to query in API Review Hub.
Expand Down Expand Up @@ -83,25 +84,22 @@ function Write-ApprovalSummary([object] $Response) {
}

function Test-PackageApproval([string] $PackageName, [string] $PackageVersion, [string] $ApiHash) {
$ApiHash = if ([string]::IsNullOrWhiteSpace($ApiHash)) { "dummy" } else { $ApiHash }
$arguments = @(
"package",
"get-approval-status",
"--language", $LanguageShort,
"--package-name", $PackageName,
"--package-version", $PackageVersion,
"--output", "json"
"--output", "json",
"--api-hash", $ApiHash
)

if (-not [string]::IsNullOrWhiteSpace($ApiHash)) {
$arguments += @("--api-hash", $ApiHash)
}

if (-not [string]::IsNullOrWhiteSpace($RepoOwner)) {
$arguments += @("--repo-owner", $RepoOwner)
}

$hashDescription = if ([string]::IsNullOrWhiteSpace($ApiHash)) { "not provided" } else { $ApiHash }
Write-Host "Checking package approval: language=$LanguageShort, package=$PackageName, version=$PackageVersion, apiHash=$hashDescription"
Write-Host "Checking package approval: language=$LanguageShort, package=$PackageName, version=$PackageVersion, apiHash=$ApiHash"
$formattedArguments = @($arguments | ForEach-Object { Format-CommandArgument $_ })
Write-Host "Command: azsdk $($formattedArguments -join ' ')"

Expand Down
29 changes: 27 additions & 2 deletions eng/common/scripts/tests/Get-PackageApprovalStatus.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,38 @@ Describe "Get-PackageApprovalStatus.ps1" {
) -join "|")
}

It "omits the API hash when it is unavailable" {
It "uses dummy when the API hash is unavailable" {
& $scriptPath -PackageInfoFiles $packageInfoPath

($global:CapturedAzSdkArguments -join "|") | Should Not Match "--api-hash"
($global:CapturedAzSdkArguments -join "|") | Should Match "--api-hash\|dummy"
($global:CapturedAzSdkArguments -join "|") | Should Not Match "--repo-owner"
}

It "uses dummy for null, empty, and whitespace API hashes" {
foreach ($hash in @($null, "", " ")) {
$packageInfo = Get-Content $packageInfoPath -Raw | ConvertFrom-Json
$packageInfo | Add-Member -NotePropertyName ApiHash -NotePropertyValue $hash -Force
$packageInfo | ConvertTo-Json | Set-Content $packageInfoPath

& $scriptPath -PackageInfoFiles $packageInfoPath

($global:CapturedAzSdkArguments -join "|") | Should Match "--api-hash\|dummy"
}
}

It "checks management packages without a hash and accepts reviewNotRequired" {
$packageInfo = Get-Content $packageInfoPath -Raw | ConvertFrom-Json
$packageInfo.Name = "azure-mgmt-test"
$packageInfo | Add-Member -NotePropertyName SdkType -NotePropertyValue mgmt
$packageInfo | ConvertTo-Json | Set-Content $packageInfoPath
$global:AzSdkOutput = '{"operation_status":"Succeeded","result":{"isApproved":true,"finalSource":"reviewHub","reason":"reviewNotRequired"}}'

& $scriptPath -PackageInfoFiles $packageInfoPath

($global:CapturedAzSdkArguments -join "|") | Should Match "--package-name\|azure-mgmt-test"
($global:CapturedAzSdkArguments -join "|") | Should Match "--api-hash\|dummy"
}

It "fails without prompting when the azsdk executable is unavailable" {
$missingExecutable = Join-Path $TestDrive "missing-azsdk.exe"
$caughtError = $null
Expand Down
40 changes: 4 additions & 36 deletions eng/pipelines/templates/stages/archetype-sdk-client.yml
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,8 @@ extends:
GenerateApiReviewForManualOnly: ${{ parameters.GenerateApiReviewForManualOnly }}

- ${{ if and(eq(variables['System.TeamProject'], 'internal'), or(in(variables['Build.Reason'], 'Manual', ''), and(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.SourceBranch'], 'refs/heads/main')))) }}:
- job: FilterPackageInfo
displayName: Filter PackageInfo files for package approval
- job: CheckPackageApproval
displayName: Check Package Approval Status
dependsOn:
- Build_Extended
- Analyze
Expand All @@ -184,39 +184,6 @@ extends:
name: $(LINUXPOOL)
image: $(LINUXVMIMAGE)
os: linux
steps:
- checkout: self
fetchDepth: 1
fetchTags: false
sparseCheckoutDirectories: eng/scripts

- download: current
artifact: packages_extended

- pwsh: |
& '$(Build.SourcesDirectory)/eng/scripts/Filter-PackageInfoForPackageApproval.ps1' `
-PackageInfoDirectory '$(Pipeline.Workspace)/packages_extended/PackageInfo' `
-ArtifactsJson $env:ARTIFACTS_JSON `
-PackageInfoPathPrefix 'packages_extended/PackageInfo'
name: filterPackageInfo
displayName: Filter management plane packages from package approval
env:
ARTIFACTS_JSON: ${{ convertToJson(parameters.Artifacts) }}

- job: CheckPackageApproval
displayName: Check Package Approval Status
dependsOn: FilterPackageInfo
condition: >-
and(
in(dependencies.FilterPackageInfo.result, 'Succeeded', 'SucceededWithIssues'),
eq(dependencies.FilterPackageInfo.outputs['filterPackageInfo.HasPackageApprovalPackages'], 'True')
)
variables:
PackageApprovalInfoFiles: $[ dependencies.FilterPackageInfo.outputs['filterPackageInfo.PackageApprovalInfoFiles'] ]
pool:
name: $(LINUXPOOL)
image: $(LINUXVMIMAGE)
os: linux
steps:
- checkout: self
fetchDepth: 1
Expand All @@ -233,7 +200,8 @@ extends:
- template: /eng/common/pipelines/templates/steps/get-package-approval-status.yml
parameters:
PackageInfoFiles:
- $(PackageApprovalInfoFiles)
- ${{ each artifact in parameters.Artifacts }}:
- packages_extended/PackageInfo/${{ artifact.name }}.json
Comment on lines +203 to +204
RepoOwner: Azure

variables:
Expand Down
34 changes: 0 additions & 34 deletions eng/scripts/Filter-PackageInfoForPackageApproval.ps1

This file was deleted.

Loading