From 38b508dd4e656c9da1ec333b41c25aca3cc7350c Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 00:27:46 -0400 Subject: [PATCH 01/13] Send python automatic APi review request using pregenerated api review file --- eng/scripts/Create-ApiReview.ps1 | 163 +++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 eng/scripts/Create-ApiReview.ps1 diff --git a/eng/scripts/Create-ApiReview.ps1 b/eng/scripts/Create-ApiReview.ps1 new file mode 100644 index 000000000000..cca519ba905a --- /dev/null +++ b/eng/scripts/Create-ApiReview.ps1 @@ -0,0 +1,163 @@ +[CmdletBinding()] +Param ( + [Parameter(Mandatory=$True)] + [string] $ArtifactPath, + [Parameter(Mandatory=$True)] + [string] $APIViewUri, + [Parameter(Mandatory=$True)] + [string] $APIKey, + [Parameter(Mandatory=$True)] + [string] $PackageName, + [Parameter(Mandatory=$True)] + [string] $reviewFileName, + [Parameter(Mandatory=$True)] + [string] $SourceBranch, + [Parameter(Mandatory=$True)] + [string] $DefaultBranch, + [Parameter(Mandatory=$True)] + [string] $buildId, + [Parameter(Mandatory=$True)] + [string] $repoName, + [string] $ConfigFileDir = "" +) + +# Submit API review request and return status whether current revision is approved or pending or failed to create review +function Submit-APIReview($packageArtifactname, $apiLabel, $releaseStatus) +{ + $params = "buildId=$buildId&artifactName=packages&originalFilePath=$packageArtifactname&reviewFilePath=$reviewFileName" + $params += "&label=$apiLabel&repoName=$repoName&packageName=$PackageName" + $uri = "$($APIViewUri)?$params" + + Write-Host $uri + if ($releaseStatus -and ($releaseStatus -ne "Unreleased")) + { + $uri += "&compareAllRevisions=true" + } + + $headers = @{ + "ApiKey" = $APIKey; + } + + try + { + $Response = Invoke-WebRequest -Method 'GET' -Uri $uri -Headers $headers + Write-Host "API Review URL: $($Response.Content)" + $StatusCode = $Response.StatusCode + } + catch + { + Write-Host "Exception details: $($_.Exception)" + $StatusCode = $_.Exception.Response.StatusCode + } + + return $StatusCode +} + + +. (Join-Path $PSScriptRoot ".." common scripts common.ps1) + +Write-Host "Artifact path: $($ArtifactPath)" +Write-Host "Package Name: $($PackageName)" +Write-Host "Source branch: $($SourceBranch)" +Write-Host "Config File directory: $($ConfigFileDir)" + +$packages = @{} +if ($FindArtifactForApiReviewFn -and (Test-Path "Function:$FindArtifactForApiReviewFn")) +{ + $packages = &$FindArtifactForApiReviewFn $ArtifactPath $PackageName +} +else +{ + Write-Host "The function for 'FindArtifactForApiReviewFn' was not found.` + Make sure it is present in eng/scripts/Language-Settings.ps1 and referenced in eng/common/scripts/common.ps1.` + See https://github.com/Azure/azure-sdk-tools/blob/main/doc/common/common_engsys.md#code-structure" + exit(1) +} + +# Check if package config file is present. This file has package version, SDK type etc info. +if (-not $ConfigFileDir) +{ + $ConfigFileDir = Join-Path -Path $ArtifactPath "PackageInfo" +} + +if ($packages) +{ + foreach($pkgPath in $packages.Values) + { + $pkg = Split-Path -Leaf $pkgPath + $pkgPropPath = Join-Path -Path $ConfigFileDir "$PackageName.json" + if (-Not (Test-Path $pkgPropPath)) + { + Write-Host " Package property file path $($pkgPropPath) is invalid." + continue + } + # Get package info from json file created before updating version to daily dev + $pkgInfo = Get-Content $pkgPropPath | ConvertFrom-Json + $version = [AzureEngSemanticVersion]::ParseVersionString($pkgInfo.Version) + if ($version -eq $null) + { + Write-Host "Version info is not available for package $PackageName, because version '$(pkgInfo.Version)' is invalid. Please check if the version follows Azure SDK package versioning guidelines." + exit 1 + } + + Write-Host "Version: $($version)" + Write-Host "SDK Type: $($pkgInfo.SdkType)" + Write-Host "Release Status: $($pkgInfo.ReleaseStatus)" + + # Run create review step only if build is triggered from main branch or if version is GA. + # This is to avoid invalidating review status by a build triggered from feature branch + if ( ($SourceBranch -eq $DefaultBranch) -or (-not $version.IsPrerelease)) + { + Write-Host "Submitting API Review for package $($pkg)" + $respCode = Submit-APIReview -packageArtifactname $pkg -apiLabel $($pkgInfo.Version) -releaseStatus $pkgInfo.ReleaseStatus + Write-Host "HTTP Response code: $($respCode)" + # HTTP status 200 means API is in approved status + if ($respCode -eq '200') + { + Write-Host "API review is in approved status." + } + elseif ($version.IsPrerelease) + { + # Ignore API review status for prerelease version + Write-Host "Package version is not GA. Ignoring API view approval status" + } + elseif (!$pkgInfo.ReleaseStatus -or $pkgInfo.ReleaseStatus -eq "Unreleased") + { + Write-Host "Release date is not set for current version in change log file for package. Ignoring API review approval status since package is not yet ready for release." + } + else + { + # Return error code if status code is 201 for new data plane package + # Temporarily enable API review for spring SDK types. Ideally this should be done be using 'IsReviewRequired' method in language side + # to override default check of SDK type client + if (($pkgInfo.SdkType -eq "client" -or $pkgInfo.SdkType -eq "spring") -and $pkgInfo.IsNewSdk) + { + if ($respCode -eq '201') + { + Write-Host "Package version $($version) is GA and automatic API Review is not yet approved for package $($PackageName)." + Write-Host "Build and release is not allowed for GA package without API review approval." + Write-Host "You will need to queue another build to proceed further after API review is approved" + Write-Host "You can check http://aka.ms/azsdk/engsys/apireview/faq for more details on API Approval." + } + else + { + Write-Host "Failed to create API Review for package $($PackageName). Please reach out to Azure SDK engineering systems on teams channel and share this build details." + } + exit 1 + } + else + { + Write-Host "API review is not approved for package $($PackageName), however it is not required for this package type so it can still be released without API review approval." + } + } + } + else + { + Write-Host "Build is triggered from $($SourceBranch) with prerelease version. Skipping API review status check." + } + } +} +else +{ + Write-Host "No package is found in artifact path to submit review request" +} From 52147be158ffba245fd0d6f3061ccfcd595c4a70 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 13:31:47 -0400 Subject: [PATCH 02/13] Pipeline changes to call new api create script --- eng/pipelines/templates/steps/analyze.yml | 2 +- .../templates/steps/create-apireview.yml | 35 +++ eng/scripts/Create-ApiReview.ps1 | 204 ++++++++++-------- 3 files changed, 149 insertions(+), 92 deletions(-) create mode 100644 eng/pipelines/templates/steps/create-apireview.yml diff --git a/eng/pipelines/templates/steps/analyze.yml b/eng/pipelines/templates/steps/analyze.yml index 4ecc8c94c6a7..8959b8738135 100644 --- a/eng/pipelines/templates/steps/analyze.yml +++ b/eng/pipelines/templates/steps/analyze.yml @@ -122,7 +122,7 @@ steps: TestMarkArgument: ${{ parameters.TestMarkArgument }} AdditionalTestArgs: ${{parameters.AdditionalTestArgs}} - - template: /eng/common/pipelines/templates/steps/create-apireview.yml + - template: /eng/pipelines/templates/steps/create-apireview.yml parameters: Artifacts: ${{ parameters.Artifacts }} diff --git a/eng/pipelines/templates/steps/create-apireview.yml b/eng/pipelines/templates/steps/create-apireview.yml new file mode 100644 index 000000000000..42e416af3a96 --- /dev/null +++ b/eng/pipelines/templates/steps/create-apireview.yml @@ -0,0 +1,35 @@ +parameters: + ArtifactPath: $(Build.ArtifactStagingDirectory) + Artifacts: [] + ConfigFileDir: $(Build.ArtifactStagingDirectory)/PackageInfo + Language: 'Python' + +steps: + # ideally this should be done as initial step of a job in caller template + # We can remove this step later once it is added in caller + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + + - task: Powershell@2 + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/scripts/Create-APIReview.ps1 + arguments: > + -ArtifactList ('${{ convertToJson(parameters.Artifacts) }}' | ConvertFrom-Json | Select-Object Name) + -ArtifactPath ${{ parameters.ArtifactPath }} + -APIViewUri $(azuresdk-apiview-uri) + -APIKey $(azuresdk-apiview-apikey) + -SourceBranch 'main' + -DefaultBranch $(DefaultBranch) + -ConfigFileDir '${{ parameters.ConfigFileDir }}' + -BuildId $(Build.BuildId) + -RepoName $(Build.Repository.Name) + -Language ${{ parameters.Language }} + pwsh: true + workingDirectory: $(Pipeline.Workspace) + displayName: Create API Review for ${{ artifact.name}} + condition: >- + and( + succeededOrFailed(), + ne(variables['Skip.CreateApiReview'], 'true'), + eq(variables['System.TeamProject'], 'internal'), + not(endsWith(variables['Build.Repository.Name'], '-pr')) + ) diff --git a/eng/scripts/Create-ApiReview.ps1 b/eng/scripts/Create-ApiReview.ps1 index cca519ba905a..2ccd55b52822 100644 --- a/eng/scripts/Create-ApiReview.ps1 +++ b/eng/scripts/Create-ApiReview.ps1 @@ -1,5 +1,7 @@ [CmdletBinding()] Param ( + [Parameter(Mandatory=$True)] + [array] $ArtifactList, [Parameter(Mandatory=$True)] [string] $ArtifactPath, [Parameter(Mandatory=$True)] @@ -7,22 +9,21 @@ Param ( [Parameter(Mandatory=$True)] [string] $APIKey, [Parameter(Mandatory=$True)] - [string] $PackageName, - [Parameter(Mandatory=$True)] - [string] $reviewFileName, - [Parameter(Mandatory=$True)] [string] $SourceBranch, [Parameter(Mandatory=$True)] [string] $DefaultBranch, [Parameter(Mandatory=$True)] + [string] $ConfigFileDir, + [Parameter(Mandatory=$True)] [string] $buildId, [Parameter(Mandatory=$True)] [string] $repoName, - [string] $ConfigFileDir = "" + [Parameter(Mandatory=$True)] + [string] $Language ) # Submit API review request and return status whether current revision is approved or pending or failed to create review -function Submit-APIReview($packageArtifactname, $apiLabel, $releaseStatus) +function Submit-APIReview($packageArtifactname, $apiLabel, $releaseStatus, $reviewFileName) { $params = "buildId=$buildId&artifactName=packages&originalFilePath=$packageArtifactname&reviewFilePath=$reviewFileName" $params += "&label=$apiLabel&repoName=$repoName&packageName=$PackageName" @@ -53,111 +54,132 @@ function Submit-APIReview($packageArtifactname, $apiLabel, $releaseStatus) return $StatusCode } - -. (Join-Path $PSScriptRoot ".." common scripts common.ps1) - -Write-Host "Artifact path: $($ArtifactPath)" -Write-Host "Package Name: $($PackageName)" -Write-Host "Source branch: $($SourceBranch)" -Write-Host "Config File directory: $($ConfigFileDir)" - -$packages = @{} -if ($FindArtifactForApiReviewFn -and (Test-Path "Function:$FindArtifactForApiReviewFn")) -{ - $packages = &$FindArtifactForApiReviewFn $ArtifactPath $PackageName -} -else +function ProcessPackage($PackageName) { - Write-Host "The function for 'FindArtifactForApiReviewFn' was not found.` - Make sure it is present in eng/scripts/Language-Settings.ps1 and referenced in eng/common/scripts/common.ps1.` - See https://github.com/Azure/azure-sdk-tools/blob/main/doc/common/common_engsys.md#code-structure" - exit(1) -} + Write-Host "Artifact path: $($ArtifactPath)" + Write-Host "Package Name: $($PackageName)" + Write-Host "Source branch: $($SourceBranch)" + Write-Host "Config File directory: $($ConfigFileDir)" -# Check if package config file is present. This file has package version, SDK type etc info. -if (-not $ConfigFileDir) -{ - $ConfigFileDir = Join-Path -Path $ArtifactPath "PackageInfo" -} + $reviewFileName = "$PackageName_$Language.json" -if ($packages) -{ - foreach($pkgPath in $packages.Values) + $packages = @{} + if ($FindArtifactForApiReviewFn -and (Test-Path "Function:$FindArtifactForApiReviewFn")) { - $pkg = Split-Path -Leaf $pkgPath - $pkgPropPath = Join-Path -Path $ConfigFileDir "$PackageName.json" - if (-Not (Test-Path $pkgPropPath)) - { - Write-Host " Package property file path $($pkgPropPath) is invalid." - continue - } - # Get package info from json file created before updating version to daily dev - $pkgInfo = Get-Content $pkgPropPath | ConvertFrom-Json - $version = [AzureEngSemanticVersion]::ParseVersionString($pkgInfo.Version) - if ($version -eq $null) - { - Write-Host "Version info is not available for package $PackageName, because version '$(pkgInfo.Version)' is invalid. Please check if the version follows Azure SDK package versioning guidelines." - exit 1 - } + $packages = &$FindArtifactForApiReviewFn $ArtifactPath $PackageName + } + else + { + Write-Host "The function for 'FindArtifactForApiReviewFn' was not found.` + Make sure it is present in eng/scripts/Language-Settings.ps1 and referenced in eng/common/scripts/common.ps1.` + See https://github.com/Azure/azure-sdk-tools/blob/main/doc/common/common_engsys.md#code-structure" + return 1 + } - Write-Host "Version: $($version)" - Write-Host "SDK Type: $($pkgInfo.SdkType)" - Write-Host "Release Status: $($pkgInfo.ReleaseStatus)" + # Check if package config file is present. This file has package version, SDK type etc info. + if (-not $ConfigFileDir) + { + $ConfigFileDir = Join-Path -Path $ArtifactPath "PackageInfo" + } - # Run create review step only if build is triggered from main branch or if version is GA. - # This is to avoid invalidating review status by a build triggered from feature branch - if ( ($SourceBranch -eq $DefaultBranch) -or (-not $version.IsPrerelease)) + if ($packages) + { + foreach($pkgPath in $packages.Values) { - Write-Host "Submitting API Review for package $($pkg)" - $respCode = Submit-APIReview -packageArtifactname $pkg -apiLabel $($pkgInfo.Version) -releaseStatus $pkgInfo.ReleaseStatus - Write-Host "HTTP Response code: $($respCode)" - # HTTP status 200 means API is in approved status - if ($respCode -eq '200') + $pkg = Split-Path -Leaf $pkgPath + $pkgPropPath = Join-Path -Path $ConfigFileDir "$PackageName.json" + if (-Not (Test-Path $pkgPropPath)) { - Write-Host "API review is in approved status." + Write-Host " Package property file path $($pkgPropPath) is invalid." + continue } - elseif ($version.IsPrerelease) + # Get package info from json file created before updating version to daily dev + $pkgInfo = Get-Content $pkgPropPath | ConvertFrom-Json + $version = [AzureEngSemanticVersion]::ParseVersionString($pkgInfo.Version) + if ($version -eq $null) { - # Ignore API review status for prerelease version - Write-Host "Package version is not GA. Ignoring API view approval status" + Write-Host "Version info is not available for package $PackageName, because version '$(pkgInfo.Version)' is invalid. Please check if the version follows Azure SDK package versioning guidelines." + return 1 } - elseif (!$pkgInfo.ReleaseStatus -or $pkgInfo.ReleaseStatus -eq "Unreleased") - { - Write-Host "Release date is not set for current version in change log file for package. Ignoring API review approval status since package is not yet ready for release." - } - else + + Write-Host "Version: $($version)" + Write-Host "SDK Type: $($pkgInfo.SdkType)" + Write-Host "Release Status: $($pkgInfo.ReleaseStatus)" + + # Run create review step only if build is triggered from main branch or if version is GA. + # This is to avoid invalidating review status by a build triggered from feature branch + if ( ($SourceBranch -eq $DefaultBranch) -or (-not $version.IsPrerelease)) { - # Return error code if status code is 201 for new data plane package - # Temporarily enable API review for spring SDK types. Ideally this should be done be using 'IsReviewRequired' method in language side - # to override default check of SDK type client - if (($pkgInfo.SdkType -eq "client" -or $pkgInfo.SdkType -eq "spring") -and $pkgInfo.IsNewSdk) + Write-Host "Submitting API Review for package $($pkg)" + $respCode = Submit-APIReview -reviewFileName $reviewFileName -packageArtifactname $pkg -apiLabel $($pkgInfo.Version) -releaseStatus $pkgInfo.ReleaseStatus + Write-Host "HTTP Response code: $($respCode)" + # HTTP status 200 means API is in approved status + if ($respCode -eq '200') { - if ($respCode -eq '201') - { - Write-Host "Package version $($version) is GA and automatic API Review is not yet approved for package $($PackageName)." - Write-Host "Build and release is not allowed for GA package without API review approval." - Write-Host "You will need to queue another build to proceed further after API review is approved" - Write-Host "You can check http://aka.ms/azsdk/engsys/apireview/faq for more details on API Approval." - } - else - { - Write-Host "Failed to create API Review for package $($PackageName). Please reach out to Azure SDK engineering systems on teams channel and share this build details." - } - exit 1 + Write-Host "API review is in approved status." + } + elseif ($version.IsPrerelease) + { + # Ignore API review status for prerelease version + Write-Host "Package version is not GA. Ignoring API view approval status" + } + elseif (!$pkgInfo.ReleaseStatus -or $pkgInfo.ReleaseStatus -eq "Unreleased") + { + Write-Host "Release date is not set for current version in change log file for package. Ignoring API review approval status since package is not yet ready for release." } else { - Write-Host "API review is not approved for package $($PackageName), however it is not required for this package type so it can still be released without API review approval." + # Return error code if status code is 201 for new data plane package + # Temporarily enable API review for spring SDK types. Ideally this should be done be using 'IsReviewRequired' method in language side + # to override default check of SDK type client + if (($pkgInfo.SdkType -eq "client" -or $pkgInfo.SdkType -eq "spring") -and $pkgInfo.IsNewSdk) + { + if ($respCode -eq '201') + { + Write-Host "Package version $($version) is GA and automatic API Review is not yet approved for package $($PackageName)." + Write-Host "Build and release is not allowed for GA package without API review approval." + Write-Host "You will need to queue another build to proceed further after API review is approved" + Write-Host "You can check http://aka.ms/azsdk/engsys/apireview/faq for more details on API Approval." + } + else + { + Write-Host "Failed to create API Review for package $($PackageName). Please reach out to Azure SDK engineering systems on teams channel and share this build details." + } + return 1 + } + else { + Write-Host "API review is not approved for package $($PackageName), however it is not required for this package type so it can still be released without API review approval." + } } } + else { + Write-Host "Build is triggered from $($SourceBranch) with prerelease version. Skipping API review status check." + } } - else - { - Write-Host "Build is triggered from $($SourceBranch) with prerelease version. Skipping API review status check." - } } + else { + Write-Host "No package is found in artifact path to submit review request" + } + return 0 } -else + +. (Join-Path $PSScriptRoot ".." common scripts common.ps1) + +$responses = @{} +foreach ($artifact in $ArtifactList) { - Write-Host "No package is found in artifact path to submit review request" + Write-Host "Processing $($artifact.name)" + $result = ProcessPackage -PackageName $artifact.name + $responses[$artifact.name] = $result } + +foreach($pkg in $responses.keys) +{ + $exitCode = 0 + if ($responses[$pkg] -eq 1) + { + Write-Host "API changes are not approved for $($pkg)" + $exitCode = 1 + } + exit $exitCode +} \ No newline at end of file From 23af3849395ad7ee5c24a6b45b96a98d37bd6487 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 13:32:07 -0400 Subject: [PATCH 03/13] Dummy test template change --- sdk/template/azure-template/azure/template/template_code.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/template/azure-template/azure/template/template_code.py b/sdk/template/azure-template/azure/template/template_code.py index f97c2985fde4..37e4d6558303 100644 --- a/sdk/template/azure-template/azure/template/template_code.py +++ b/sdk/template/azure-template/azure/template/template_code.py @@ -1,3 +1,7 @@ def template_main(): print("Package code.") return True + +def template_main2(): + print("Package code.") + return True \ No newline at end of file From 2b758ab619889a85a767a5b233001132f0e5f764 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 14:02:01 -0400 Subject: [PATCH 04/13] Fix issue in YAML --- eng/pipelines/templates/steps/create-apireview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/create-apireview.yml b/eng/pipelines/templates/steps/create-apireview.yml index 42e416af3a96..7024907a2d34 100644 --- a/eng/pipelines/templates/steps/create-apireview.yml +++ b/eng/pipelines/templates/steps/create-apireview.yml @@ -25,7 +25,7 @@ steps: -Language ${{ parameters.Language }} pwsh: true workingDirectory: $(Pipeline.Workspace) - displayName: Create API Review for ${{ artifact.name}} + displayName: Create Automatic API Review condition: >- and( succeededOrFailed(), From c2e0461f7f246213eba2761fc54883f54f3ace80 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 14:26:09 -0400 Subject: [PATCH 05/13] Update script path --- eng/pipelines/templates/steps/create-apireview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/create-apireview.yml b/eng/pipelines/templates/steps/create-apireview.yml index 7024907a2d34..8ecbd2087356 100644 --- a/eng/pipelines/templates/steps/create-apireview.yml +++ b/eng/pipelines/templates/steps/create-apireview.yml @@ -11,7 +11,7 @@ steps: - task: Powershell@2 inputs: - filePath: $(Build.SourcesDirectory)/eng/common/scripts/Create-APIReview.ps1 + filePath: $(Build.SourcesDirectory)/eng/scripts/Create-ApiReview.ps1 arguments: > -ArtifactList ('${{ convertToJson(parameters.Artifacts) }}' | ConvertFrom-Json | Select-Object Name) -ArtifactPath ${{ parameters.ArtifactPath }} From d444273ad883c31c63a3515209e6e54ec957efc8 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 16:20:58 -0400 Subject: [PATCH 06/13] Set API view url --- eng/pipelines/templates/steps/create-apireview.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/create-apireview.yml b/eng/pipelines/templates/steps/create-apireview.yml index 8ecbd2087356..9e7be562e0e3 100644 --- a/eng/pipelines/templates/steps/create-apireview.yml +++ b/eng/pipelines/templates/steps/create-apireview.yml @@ -3,6 +3,7 @@ parameters: Artifacts: [] ConfigFileDir: $(Build.ArtifactStagingDirectory)/PackageInfo Language: 'Python' + APIViewUri: 'https://apiview.dev/AutoReview/CreateApiReview' steps: # ideally this should be done as initial step of a job in caller template @@ -15,7 +16,7 @@ steps: arguments: > -ArtifactList ('${{ convertToJson(parameters.Artifacts) }}' | ConvertFrom-Json | Select-Object Name) -ArtifactPath ${{ parameters.ArtifactPath }} - -APIViewUri $(azuresdk-apiview-uri) + -APIViewUri ${{ parameters.APIViewUri }} -APIKey $(azuresdk-apiview-apikey) -SourceBranch 'main' -DefaultBranch $(DefaultBranch) From 6ad732c01cb3742d2be8260eaf0f84bb6c00491a Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 16:45:04 -0400 Subject: [PATCH 07/13] Fix review file name --- eng/scripts/Create-ApiReview.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/scripts/Create-ApiReview.ps1 b/eng/scripts/Create-ApiReview.ps1 index 2ccd55b52822..fc010ecc7cb3 100644 --- a/eng/scripts/Create-ApiReview.ps1 +++ b/eng/scripts/Create-ApiReview.ps1 @@ -61,7 +61,7 @@ function ProcessPackage($PackageName) Write-Host "Source branch: $($SourceBranch)" Write-Host "Config File directory: $($ConfigFileDir)" - $reviewFileName = "$PackageName_$Language.json" + $reviewFileName = "$($PackageName)_$($Language).json" $packages = @{} if ($FindArtifactForApiReviewFn -and (Test-Path "Function:$FindArtifactForApiReviewFn")) From dc437255adb27317278d168c4ca6276a93cc64b7 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 19 Jul 2022 18:05:21 -0400 Subject: [PATCH 08/13] Update to test using staging instance --- eng/pipelines/templates/steps/create-apireview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/create-apireview.yml b/eng/pipelines/templates/steps/create-apireview.yml index 9e7be562e0e3..162604ddd3ef 100644 --- a/eng/pipelines/templates/steps/create-apireview.yml +++ b/eng/pipelines/templates/steps/create-apireview.yml @@ -3,7 +3,7 @@ parameters: Artifacts: [] ConfigFileDir: $(Build.ArtifactStagingDirectory)/PackageInfo Language: 'Python' - APIViewUri: 'https://apiview.dev/AutoReview/CreateApiReview' + APIViewUri: 'https://apiviewstaging.azurewebsites.net/AutoReview/CreateApiReview' steps: # ideally this should be done as initial step of a job in caller template From 1848ce95afdb519188c8364ab5c5eb44afc3a3fe Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Wed, 20 Jul 2022 10:41:18 -0400 Subject: [PATCH 09/13] Add project field as request param --- eng/scripts/Create-ApiReview.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/scripts/Create-ApiReview.ps1 b/eng/scripts/Create-ApiReview.ps1 index fc010ecc7cb3..eab207e230c7 100644 --- a/eng/scripts/Create-ApiReview.ps1 +++ b/eng/scripts/Create-ApiReview.ps1 @@ -26,7 +26,7 @@ Param ( function Submit-APIReview($packageArtifactname, $apiLabel, $releaseStatus, $reviewFileName) { $params = "buildId=$buildId&artifactName=packages&originalFilePath=$packageArtifactname&reviewFilePath=$reviewFileName" - $params += "&label=$apiLabel&repoName=$repoName&packageName=$PackageName" + $params += "&label=$apiLabel&repoName=$repoName&packageName=$PackageName&project=internal" $uri = "$($APIViewUri)?$params" Write-Host $uri From a55d36c51946c70efffff22d183cecf342a2edeb Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Wed, 20 Jul 2022 14:53:11 -0400 Subject: [PATCH 10/13] Send request to production URL --- eng/pipelines/templates/steps/create-apireview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/create-apireview.yml b/eng/pipelines/templates/steps/create-apireview.yml index 162604ddd3ef..9e7be562e0e3 100644 --- a/eng/pipelines/templates/steps/create-apireview.yml +++ b/eng/pipelines/templates/steps/create-apireview.yml @@ -3,7 +3,7 @@ parameters: Artifacts: [] ConfigFileDir: $(Build.ArtifactStagingDirectory)/PackageInfo Language: 'Python' - APIViewUri: 'https://apiviewstaging.azurewebsites.net/AutoReview/CreateApiReview' + APIViewUri: 'https://apiview.dev/AutoReview/CreateApiReview' steps: # ideally this should be done as initial step of a job in caller template From 0dd02f1f85fa5e5cf0e57ff1cd4677b51e658245 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Wed, 20 Jul 2022 15:45:39 -0400 Subject: [PATCH 11/13] Revert test changes --- eng/pipelines/templates/steps/create-apireview.yml | 3 ++- sdk/template/azure-template/azure/template/template_code.py | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/eng/pipelines/templates/steps/create-apireview.yml b/eng/pipelines/templates/steps/create-apireview.yml index 9e7be562e0e3..22a18bcc47c7 100644 --- a/eng/pipelines/templates/steps/create-apireview.yml +++ b/eng/pipelines/templates/steps/create-apireview.yml @@ -18,7 +18,7 @@ steps: -ArtifactPath ${{ parameters.ArtifactPath }} -APIViewUri ${{ parameters.APIViewUri }} -APIKey $(azuresdk-apiview-apikey) - -SourceBranch 'main' + -SourceBranch $(Build.SourceBranchName) -DefaultBranch $(DefaultBranch) -ConfigFileDir '${{ parameters.ConfigFileDir }}' -BuildId $(Build.BuildId) @@ -31,6 +31,7 @@ steps: and( succeededOrFailed(), ne(variables['Skip.CreateApiReview'], 'true'), + ne(variables['Build.Reason'],'PullRequest'), eq(variables['System.TeamProject'], 'internal'), not(endsWith(variables['Build.Repository.Name'], '-pr')) ) diff --git a/sdk/template/azure-template/azure/template/template_code.py b/sdk/template/azure-template/azure/template/template_code.py index 37e4d6558303..f31c10a73a57 100644 --- a/sdk/template/azure-template/azure/template/template_code.py +++ b/sdk/template/azure-template/azure/template/template_code.py @@ -1,7 +1,3 @@ def template_main(): - print("Package code.") - return True - -def template_main2(): print("Package code.") return True \ No newline at end of file From 7f793b90d7a90614c1597b38ada18077d59cef07 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Thu, 21 Jul 2022 15:06:51 -0400 Subject: [PATCH 12/13] Changes as per review comments --- eng/scripts/Create-ApiReview.ps1 | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/eng/scripts/Create-ApiReview.ps1 b/eng/scripts/Create-ApiReview.ps1 index eab207e230c7..9465990a5789 100644 --- a/eng/scripts/Create-ApiReview.ps1 +++ b/eng/scripts/Create-ApiReview.ps1 @@ -22,6 +22,9 @@ Param ( [string] $Language ) +Set-StrictMode -Version 3 +. (Join-Path $PSScriptRoot ".." common scripts common.ps1) + # Submit API review request and return status whether current revision is approved or pending or failed to create review function Submit-APIReview($packageArtifactname, $apiLabel, $releaseStatus, $reviewFileName) { @@ -76,12 +79,6 @@ function ProcessPackage($PackageName) return 1 } - # Check if package config file is present. This file has package version, SDK type etc info. - if (-not $ConfigFileDir) - { - $ConfigFileDir = Join-Path -Path $ArtifactPath "PackageInfo" - } - if ($packages) { foreach($pkgPath in $packages.Values) @@ -163,9 +160,12 @@ function ProcessPackage($PackageName) return 0 } -. (Join-Path $PSScriptRoot ".." common scripts common.ps1) - $responses = @{} +# Check if package config file is present. This file has package version, SDK type etc info. +if (-not $ConfigFileDir) +{ + $ConfigFileDir = Join-Path -Path $ArtifactPath "PackageInfo" +} foreach ($artifact in $ArtifactList) { Write-Host "Processing $($artifact.name)" @@ -173,13 +173,13 @@ foreach ($artifact in $ArtifactList) $responses[$artifact.name] = $result } +$exitCode = 0 foreach($pkg in $responses.keys) -{ - $exitCode = 0 +{ if ($responses[$pkg] -eq 1) { Write-Host "API changes are not approved for $($pkg)" $exitCode = 1 } - exit $exitCode -} \ No newline at end of file +} +exit $exitCode \ No newline at end of file From 9e6ebfa9fa8729b505ff565ec4d084c4cef93d7d Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Thu, 21 Jul 2022 17:59:12 -0400 Subject: [PATCH 13/13] Fix wheel search script to set array correctly --- eng/scripts/Language-Settings.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/scripts/Language-Settings.ps1 b/eng/scripts/Language-Settings.ps1 index d16c98f40753..1deafe10f7f5 100644 --- a/eng/scripts/Language-Settings.ps1 +++ b/eng/scripts/Language-Settings.ps1 @@ -498,7 +498,7 @@ function Find-python-Artifacts-For-Apireview($artifactDir, $artifactName) $whlDirectory = (Join-Path -Path $artifactDir -ChildPath $artifactName.Replace("_","-")) Write-Host "Searching for $($artifactName) wheel in artifact path $($whlDirectory)" - $files = Get-ChildItem $whlDirectory | ? {$_.Name.EndsWith(".whl")} + $files = @(Get-ChildItem $whlDirectory | ? {$_.Name.EndsWith(".whl")}) if (!$files) { Write-Host "$whlDirectory does not have wheel package for $($artifactName)"