From c22eb4c6aa24857b499d4f11cf40e8c96477ada0 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Mon, 10 Apr 2023 13:21:27 +0800 Subject: [PATCH 01/68] Update config.yml --- .github/azure-client-tools-bot/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/azure-client-tools-bot/config.yml b/.github/azure-client-tools-bot/config.yml index 7fba190d5bd..d9451723e65 100644 --- a/.github/azure-client-tools-bot/config.yml +++ b/.github/azure-client-tools-bot/config.yml @@ -9,6 +9,7 @@ pull_request: - "Azure.azure-cli Full Test" result_path: "/test_results/" group_by_keys: + - "TestName" - "Module" - "Profile" - "PythonVersion" From 8b7235c23aaec691723592a095f6197e3fcbdb74 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Mon, 10 Apr 2023 13:51:14 +0800 Subject: [PATCH 02/68] Update config.yml --- .github/azure-client-tools-bot/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/azure-client-tools-bot/config.yml b/.github/azure-client-tools-bot/config.yml index d9451723e65..d9aeda054d1 100644 --- a/.github/azure-client-tools-bot/config.yml +++ b/.github/azure-client-tools-bot/config.yml @@ -6,7 +6,7 @@ pull_request: comment: - azure_pipeline: allow_list: - - "Azure.azure-cli Full Test" + - "wangzelin007.azure-cli Full Test" result_path: "/test_results/" group_by_keys: - "TestName" From 6497bc5eb4cd59551d57bba4582dfb0bcd177ef2 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Mon, 10 Apr 2023 18:27:04 +0800 Subject: [PATCH 03/68] Update PRComment.handlebars --- .../templates/PRComment.handlebars | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/azure-client-tools-bot/templates/PRComment.handlebars b/.github/azure-client-tools-bot/templates/PRComment.handlebars index 241061f9370..a78684fcf8f 100644 --- a/.github/azure-client-tools-bot/templates/PRComment.handlebars +++ b/.github/azure-client-tools-bot/templates/PRComment.handlebars @@ -1,19 +1,25 @@ {{#each this}}
-{{renderStatus Status}}{{Module}} +{{renderStatus Status}}{{TestName}} {{#each Items}} >
-> {{renderStatus Status}}{{Profile}} +> {{renderStatus Status}}{{Module}} > {{#each Items}} >>
->> {{renderStatus Status}}{{PythonVersion}} +>> {{renderStatus Status}}{{Profile}} >> +{{#each Items}} +>>>
+>>> {{renderStatus Status}}{{PythonVersion}} +>>> {{renderContent Content 2}} +>>>
+{{/each}} >>
{{/each}} >
{{/each}}
-{{/each}} \ No newline at end of file +{{/each}} From e2803160cc91a8f813cb41fb7b9432f50482a6f3 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 12 Apr 2023 16:59:44 +0800 Subject: [PATCH 04/68] Update PRComment.handlebars --- .github/azure-client-tools-bot/templates/PRComment.handlebars | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/azure-client-tools-bot/templates/PRComment.handlebars b/.github/azure-client-tools-bot/templates/PRComment.handlebars index a78684fcf8f..82ab597b25c 100644 --- a/.github/azure-client-tools-bot/templates/PRComment.handlebars +++ b/.github/azure-client-tools-bot/templates/PRComment.handlebars @@ -14,7 +14,7 @@ >>>
>>> {{renderStatus Status}}{{PythonVersion}} >>> -{{renderContent Content 2}} +{{renderContent Content 3}} >>>
{{/each}} >> From 2f854fe23d78ddb224e39a56c47caf4131180adf Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 16:44:58 +0800 Subject: [PATCH 05/68] update --- .github/azure-client-tools-bot/config.yml | 11 +++++++++++ .../templates/BreakingChangeTest.handlebars | 6 ++++++ 2 files changed, 17 insertions(+) create mode 100644 .github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars diff --git a/.github/azure-client-tools-bot/config.yml b/.github/azure-client-tools-bot/config.yml index b45bb22d593..465973e3902 100644 --- a/.github/azure-client-tools-bot/config.yml +++ b/.github/azure-client-tools-bot/config.yml @@ -19,6 +19,17 @@ pull_request: init_comment: | Validation for Azure CLI Full Test Starting... Thanks for your contribution! + - azure_pipeline: + allow_list: + - "Azure.azure-cli Breaking Change Test" + result_path: "/breaking_change_test/" + group_by_keys: + - "Module" + template_path: "templates/BreakingChangeTest.handlebars" + comment_title: "AzureCLI-BreakingChangeTest" + init_comment: | + Validation for Breaking Change Starting... + Thanks for your contribution! cli_common_issues: issues: - tag: unofficial_cli diff --git a/.github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars b/.github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars new file mode 100644 index 00000000000..e80dfdb3bff --- /dev/null +++ b/.github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars @@ -0,0 +1,6 @@ +{{#each this}} +
+{{renderStatus Status}}{{Module}} +{{renderContent Content 0}} +
+{{/each}} From 62683163f5986e750015efa63c2b1832ee30d962 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 17:00:42 +0800 Subject: [PATCH 06/68] Set up CI with Azure Pipelines [skip ci] --- .azure-pipelines/breaking-change-tests.yml | 1151 ++++++++++++++++++++ 1 file changed, 1151 insertions(+) create mode 100644 .azure-pipelines/breaking-change-tests.yml diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml new file mode 100644 index 00000000000..0df1e528ecf --- /dev/null +++ b/.azure-pipelines/breaking-change-tests.yml @@ -0,0 +1,1151 @@ +resources: +- repo: self + +trigger: + batch: true + branches: + include: + - '*' + +pr: + branches: + include: + - '*' + +variables: +- template: ${{ variables.Pipeline.Workspace }}/.azure-pipelines/templates/variables.yml + +parameters: +- name: architectures + type: object + default: + - name: AMD64 + value: amd64 + pool: pool-ubuntu-2004 + - name: ARM64 + value: arm64 + pool: ubuntu-arm64-2004-pool + +jobs: +- job: CheckPullRequest + displayName: "Check the Format of Pull Request Title and Content" + condition: and(succeeded(), in(variables['System.PullRequest.TargetBranch'], 'dev', 'release')) + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - bash: | + echo "Check Title of Pull Request: #$(System.PullRequest.PullRequestNumber)" + title=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.title') + echo $title + body=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.body') + echo $body + if [ "$(System.PullRequest.TargetBranch)" != "release" ] && echo $title | grep -iqF hotfix:; then + echo "Hotfix PR should target release branch." + exit 1 + fi + python scripts/ci/check_pull_request.py "$title" "$body" + +- job: RejectPullRequestToMasterBranch + displayName: "Reject Pull Request To Master Branch" + condition: and(succeeded(), eq(variables['System.PullRequest.TargetBranch'], 'master')) + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - bash: | + echo "Reject pull request directly to master branch" + exit 1 + +- job: CredentialScanner + displayName: "Credential Scanner" + pool: + name: ${{ variables.windows_pool }} + steps: + - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-credscan.CredScan@2 + displayName: 'Run Credential Scanner' + inputs: + toolMajorVersion: V2 + suppressionsFile: './scripts/ci/credscan/CredScanSuppressions.json' + toolVersionV2: '2.1.17' + + - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-postanalysis.PostAnalysis@1 + displayName: 'Post Analysis' + inputs: + AllTools: false + BinSkim: false + CredScan: true + PoliCheck: false + RoslynAnalyzers: false + TSLint: false + ToolLogsNotFoundAction: 'Standard' + +- job: PolicyCheck + displayName: "Policy Check" + pool: + name: ${{ variables.windows_pool }} + steps: + - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@2 + displayName: 'Run Policy Check' + inputs: + targetType: F + result: PoliCheckResult.xml + + - task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@2 + displayName: 'Post Analysis' + inputs: + GdnBreakAllTools: false + GdnBreakGdnToolPoliCheck: true + GdnBreakGdnToolPoliCheckSeverity: Error + +- job: ExtractMetadata + displayName: Extract Metadata + + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: Bash@3 + displayName: 'Extract Version' + inputs: + targetType: 'filePath' + filePath: scripts/release/get_version.sh + + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: metadata' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: metadata + +- job: VerifyLinuxRequirements + displayName: 'Verify src/azure-cli/requirements.*.Linux.txt' + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + - bash: ./scripts/ci/dependency_check.sh + displayName: 'Verify src/azure-cli/requirements.py3.Linux.txt' + +- job: VerifyDarwinRequirements + displayName: 'Verify src/azure-cli/requirements.*.Darwin.txt' + condition: succeeded() + pool: + vmImage: 'macOS-12' + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + - bash: ./scripts/ci/dependency_check.sh + displayName: 'Verify src/azure-cli/requirements.py3.Darwin.txt' + +- job: VerifyWindowsRequirements + displayName: 'Verify src/azure-cli/requirements.*.Windows.txt' + condition: succeeded() + pool: + name: ${{ variables.windows_pool }} + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + - task: BatchScript@1 + inputs: + filename: ./scripts/ci/dependency_check.bat + displayName: 'Verify src/azure-cli/requirements.py3.Windows.txt' + +- job: VerifyVersions + displayName: Verify Command Module Versions + condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/release'), eq(variables['System.PullRequest.TargetBranch'], 'release'))) + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + azdev verify history + + displayName: 'Verify History' + +- job: BuildWindowsMSI + displayName: Build Windows MSI + + dependsOn: ExtractMetadata + condition: succeeded() + pool: + name: ${{ variables.windows_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - script: | + set /p CLI_VERSION=<$(System.ArtifactsDirectory)/metadata/version + set + + build_scripts/windows/scripts/build.cmd + displayName: 'Build Windows MSI' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: 'build_scripts/windows/out/' + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: MSI' + inputs: + TargetPath: 'build_scripts/windows/out/' + ArtifactName: msi + +- job: TestWindowsMSI + displayName: Test Windows MSI + + dependsOn: BuildWindowsMSI + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: ${{ variables.windows_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/msi' + artifactName: msi + + - task: PowerShell@2 + displayName: Install and Load CLI + inputs: + targetType: inline + script: | + if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { + # Start another Powershell process as Admin and execute this script again + $arguments = "& '" +$myinvocation.mycommand.definition + "'" + Start-Process powershell -Verb runAs -ArgumentList $arguments + # Stop if the PowerShell is not run as Admin + Break + } + # The following are executed by elevated PowerShell + az --version + + $InstallArgs = @( + "/i" + "`"$env:SYSTEM_ARTIFACTSDIRECTORY\msi\Microsoft Azure CLI.msi`"" + "/q" + "/norestart" + "/l*v" + ".\install_logs.txt" + ) + $pre_installed_version=az version --query '\"azure-cli\"' -o tsv + $to_be_installed_version=Get-Content $(System.ArtifactsDirectory)/metadata/version + if ($pre_installed_version -eq $to_be_installed_version){ + # See https://docs.microsoft.com/windows/win32/msi/reinstallmode about options of REINSTALLMODE + $reinstall_option="REINSTALL=ALL REINSTALLMODE=emus" + $InstallArgs += $reinstall_option + } + Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow + $install_time=Measure-Command {Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow} | select -expand TotalSeconds + $installed_version=az version --query '\"azure-cli\"' -o tsv + if ($installed_version -ne $to_be_installed_version){ + echo "The MSI failed to install." + Exit 1 + } + echo 'Install time(seconds):' $install_time + az --version + # Test bundled pip with extension installation + az extension add -n rdbms-connect + az self-test + + Get-Content .\install_logs.txt + +- job: BuildDockerImage + displayName: Build Docker Image + + dependsOn: ExtractMetadata + condition: succeeded() + strategy: + matrix: + AMD64: + pool: ${{ variables.ubuntu_pool }} + artifactName: docker-amd64 + ARM64: + pool: ${{ variables.ubuntu_arm64_pool }} + artifactName: docker-arm64 + pool: + name: $(pool) + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: Bash@3 + displayName: 'Bash Script' + inputs: + targetType: 'filePath' + filePath: scripts/release/docker/pipeline.sh + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + DockerImagesToScan: 'clibuild$BUILD_BUILDNUMBER:latest' + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: docker image' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(artifactName) + +- job: TestDockerImage + displayName: Test Docker Image + + dependsOn: BuildDockerImage + condition: succeeded() + strategy: + matrix: + AMD64: + pool: ${{ variables.ubuntu_pool }} + artifactName: docker-amd64 + ARM64: + pool: ${{ variables.ubuntu_arm64_pool }} + artifactName: docker-arm64 + pool: + name: $(pool) + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Docker Image' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/docker' + artifactName: $(artifactName) + + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - bash: | + set -exv + + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + IMAGE_NAME=clibuild$BUILD_BUILDNUMBER:latest + TAR_FILE=$SYSTEM_ARTIFACTSDIRECTORY/docker/docker-azure-cli-$CLI_VERSION.tar + + echo "== Test docker image ==" + + docker load < $TAR_FILE + docker run $IMAGE_NAME /bin/bash -c "time az self-test && time az --version && sleep 5" + displayName: 'Bash Script' + +- job: BuildPythonWheel + displayName: Build Python Wheels + + dependsOn: ExtractMetadata + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + + - script: | + if [[ "$(Build.Reason)" == "PullRequest" ]]; then + branch=$(System.PullRequest.TargetBranch) + else + branch=$(Build.SourceBranchName) + fi + scripts/release/pypi/build.sh $branch + displayName: 'Run Wheel Build Script' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: pypi' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: pypi + +- job: TestPythonWheel + displayName: Test Python Wheels + + dependsOn: BuildPythonWheel + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download PyPI Packages' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/pypi' + artifactName: pypi + + + - bash: | + #!/usr/bin/env bash + + # Verify the pip wheels + + set -ex + + CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` + PYPI_FILES=$(cd $BUILD_ARTIFACTSTAGINGDIRECTORY/pypi; pwd) + + echo "== Testing pip install on Python 3.7 ==" + docker run \ + --rm -v $PYPI_FILES:/mnt/pypi python:3.7 \ + /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" + + echo "== Testing pip install on Python 3.9 ==" + docker run \ + --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ + /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" + + echo "== Testing pip install on Python 3.10 ==" + docker run \ + --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ + /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" + + displayName: 'Test pip Install' + +- job: TestCore + displayName: Unit Test for Core + timeoutInMinutes: 10 + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + steps: + - template: .azure-pipelines/templates/automation_test.yml + parameters: + pythonVersion: '$(python.version)' + module: 'azure-cli-core' + +- job: TestTelemetry + displayName: Unit Test for Telemetry + timeoutInMinutes: 10 + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + steps: + - template: .azure-pipelines/templates/automation_test.yml + parameters: + pythonVersion: '$(python.version)' + module: 'azure-cli-telemetry' + +- job: IntegrationTestAgainstProfiles + displayName: Integration Test against Profiles + dependsOn: BuildPythonWheel + condition: succeeded() + timeoutInMinutes: 20 + + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '$(python.version)' + - bash: pip install --upgrade pip wheel + displayName: 'Install pip and wheel' + - bash: ./scripts/ci/test_profile_integration.sh + displayName: 'Run Integration Test against Profiles' + +- job: TestExtensionsLoading + displayName: Test Extensions Loading + condition: succeeded() + timeoutInMinutes: 40 + + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python310: + python.version: '3.10' + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '$(python.version)' + - bash: pip install --upgrade pip wheel + displayName: 'Install pip and wheel' + - bash: ./scripts/ci/test_extensions.sh + displayName: 'Load extensions' + +- job: BuildHomebrewFormula + displayName: Build Homebrew Formula + + dependsOn: BuildPythonWheel + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - bash: | + #!/bin/bash + + root=$(cd $(dirname $0); pwd) + + set -evx + + CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` + HOMEBREW_UPSTREAM_URL=`curl -Ls -o /dev/null -w %{url_effective} https://api.github.com/repos/Azure/azure-cli/tarball/$BUILD_SOURCEVERSION` + + docker_files=$(cd $BUILD_SOURCESDIRECTORY/scripts/release/homebrew/docker; pwd) + src_files=$(cd $BUILD_SOURCESDIRECTORY/src; pwd) + + echo "Generating formula in docker container ... " + docker run -v $docker_files:/mnt/scripts \ + -v $src_files:/mnt/src \ + -e CLI_VERSION=$CLI_VERSION \ + -e HOMEBREW_UPSTREAM_URL=$HOMEBREW_UPSTREAM_URL \ + --name azurecli \ + python:3.10 \ + /mnt/scripts/run.sh + + # clean up + rm -rf $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata + + docker cp azurecli:azure-cli.rb $BUILD_ARTIFACTSTAGINGDIRECTORY/azure-cli.rb + docker rm --force azurecli + displayName: 'Build homebrew formula' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: homebrew' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: homebrew + +- job: TestHomebrewFormula + displayName: Test Homebrew Formula + + dependsOn: BuildHomebrewFormula + condition: succeeded() + pool: + vmImage: 'macOS-12' + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Homebrew' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' + artifactName: homebrew + + + - bash: | + set -ev + + echo == Remove pre-installed azure-cli == + brew uninstall azure-cli + + echo == Install azure-cli.rb formula == + brew install --build-from-source $SYSTEM_ARTIFACTSDIRECTORY/homebrew/azure-cli.rb + + echo == Az Version == + az --version + + echo == Run Self-Test == + az self-test + + displayName: 'Bash Script' + +- job: TestHomebrewPackage + displayName: Test Homebrew Package + timeoutInMinutes: 180 + dependsOn: BuildHomebrewFormula + # condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + condition: false + pool: + vmImage: 'macOS-12' + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' + artifactName: homebrew + + + - bash: ./scripts/release/homebrew/test_homebrew_package.sh + + + displayName: 'Test Homebrew Package' + + +- job: BuildRpmPackageMariner + displayName: Build Rpm Package Mariner + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + strategy: + matrix: + 2.0 AMD64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-amd64 + pool: ${{ variables.ubuntu_pool }} + 2.0 ARM64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-arm64 + pool: ${{ variables.ubuntu_arm64_pool }} + pool: + name: $(pool) + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - task: Bash@3 + displayName: 'Build Rpm Package: Mariner' + inputs: + targetType: 'filePath' + filePath: scripts/release/rpm/pipeline_mariner.sh + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: rpm-mariner' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(artifact) + +- job: TestRpmPackageMariner + displayName: Test Rpm Package Mariner + timeoutInMinutes: 120 + dependsOn: + - BuildRpmPackageMariner + - ExtractMetadata + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + 2.0 AMD64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-amd64 + pool: ${{ variables.ubuntu_pool }} + 2.0 ARM64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-arm64 + pool: ${{ variables.ubuntu_arm64_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' + artifactName: $(artifact) + + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - bash: | + set -ex + + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.cm2.*.rpm" -printf '%f\n') + + echo "== Test rpm package on ${IMAGE} ==" + docker pull $IMAGE + docker run --rm -e RPM_NAME=$RPM_NAME -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_mariner_in_docker.sh" + + displayName: 'Test Rpm Package Mariner' + +# TODO: rpmbuild on Red Hat UBI 8 is slow for unknown reason. Still working with Red Hat to investigate. +- job: BuildRpmPackages + displayName: Build Rpm Packages + # Do not run this job for Pull Requests due to the slowness + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + Red Hat Universal Base Image 8 ${{ arch.name }}: + dockerfile: ubi + image: registry.access.redhat.com/ubi8/ubi:8.4 + artifact: rpm-ubi8-${{ arch.value }} + python_package: python39 + pool: ${{ arch.pool }} + Red Hat Universal Base Image 9 ${{ arch.name }}: + dockerfile: ubi + image: registry.access.redhat.com/ubi9/ubi:9.0.0 + artifact: rpm-ubi9-${{ arch.value }} + python_package: python3.9 + pool: ${{ arch.pool }} + Fedora 36 ${{ arch.name }}: + dockerfile: fedora + image: fedora:36 + artifact: rpm-fedora36-${{ arch.value }} + python_package: python3 + pool: ${{ arch.pool }} + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: Bash@3 + displayName: 'Build Rpm Package' + inputs: + targetType: 'filePath' + filePath: scripts/release/rpm/pipeline.sh + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: rpm' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(artifact) + + +- job: TestRpmPackage + displayName: Test Rpm Package + timeoutInMinutes: 120 + dependsOn: + - BuildRpmPackages + - ExtractMetadata + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + Red Hat Universal Base Image 8 ${{ arch.name }}: + artifact: rpm-ubi8-${{ arch.value }} + distro: el8 + image: registry.access.redhat.com/ubi8/ubi:8.4 + python_package: python39 + python_cmd: python3.9 + pip_cmd: pip3.9 + pool: ${{ arch.pool }} + Red Hat Universal Base Image 9 ${{ arch.name }}: + artifact: rpm-ubi9-${{ arch.value }} + distro: el9 + image: registry.access.redhat.com/ubi9/ubi:9.0.0 + python_package: python3.9 + python_cmd: python3.9 + pip_cmd: pip3.9 + pool: ${{ arch.pool }} + Fedora 36 ${{ arch.name }}: + artifact: rpm-fedora36-${{ arch.value }} + distro: fc36 + image: fedora:36 + python_package: python3 + python_cmd: python3 + pip_cmd: pip3 + pool: ${{ arch.pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' + artifactName: $(artifact) + + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - bash: | + set -ex + + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.${DISTRO}.*.rpm" -printf '%f\n') + + echo "== Test rpm package on ${IMAGE} ==" + docker pull $IMAGE + docker run --rm -e RPM_NAME=$RPM_NAME -e PYTHON_PACKAGE=${PYTHON_PACKAGE} -e PYTHON_CMD=${PYTHON_CMD} -e PIP_CMD=${PIP_CMD} -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh" + + displayName: 'Test Rpm Package' + +- job: BuildDebPackages + displayName: Build Deb Packages + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + # https://wiki.ubuntu.com/Releases + Bionic ${{ arch.name }}: + # 18.04 + deb_system: ubuntu + distro: bionic + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Focal ${{ arch.name }}: + # 20.04 + deb_system: ubuntu + distro: focal + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Jammy ${{ arch.name }}: + # 22.04 + deb_system: ubuntu + distro: jammy + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + + # https://wiki.debian.org/DebianReleases + Buster ${{ arch.name }}: + # 10 + deb_system: debian + distro: buster + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Bullseye ${{ arch.name }}: + # 11 + deb_system: debian + distro: bullseye + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: Bash@3 + displayName: 'Build $(deb_system) $(distro) $(arch) Package' + inputs: + targetType: 'filePath' + filePath: scripts/release/debian/pipeline.sh + env: + DISTRO_BASE_IMAGE: $(deb_system):$(distro) + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: $(deb_system) $(distro) $(arch)' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(deb_system)-$(distro)-$(arch) + +- job: TestDebPackages + timeoutInMinutes: 120 + displayName: Test Deb Packages + dependsOn: + - BuildDebPackages + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + Focal ${{ arch.name }}: + deb_system: ubuntu + distro: focal + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Jammy ${{ arch.name }}: + deb_system: ubuntu + distro: jammy + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Buster ${{ arch.name }}: + deb_system: debian + distro: buster + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Bullseye ${{ arch.name }}: + deb_system: debian + distro: bullseye + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + pool: + name: $(pool) + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download $(deb_system):$(distro) $(arch) Build' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/debian' + artifactName: $(deb_system)-$(distro)-$(arch) + + - task: Bash@3 + displayName: 'Test $(deb_system) $(distro) $(arch) Package' + env: + DISTRO_BASE_IMAGE: $(deb_system):$(distro) + inputs: + targetType: 'inline' + script: | + set -exv + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + + echo "== Test debian package on ${DISTRO} ==" + docker pull ${DISTRO_BASE_IMAGE} + docker run --rm -e DISTRO=${DISTRO} -e CLI_VERSION=$CLI_VERSION -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts -v $(pwd):/azure-cli ${DISTRO_BASE_IMAGE} /bin/bash "/azure-cli/scripts/release/debian/test_deb_in_docker.sh" + +- job: CheckStyle + displayName: "Check CLI Style" + timeoutInMinutes: 120 + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + azdev style + +- job: CheckHeaders + displayName: "Check License, History, and DocMap" + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + azdev verify license + azdev verify history + azdev verify document-map + +- job: PerformanceCheck + displayName: "PerformanceCheck" + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '$(python.version)' + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + azdev perf load-times + displayName: "Load Performance" + # - bash: | + # set -ev + # . env/bin/activate + + # azdev perf benchmark "version" "network vnet -h" "rest -h" "storage account" + # displayName: "Execution Performance" + +- job: CheckLinter + displayName: "Check CLI Linter" + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + python scripts/ci/service_name.py + if [[ "$(System.PullRequest.TargetBranch)" != "" ]]; then + # If CI is set to shallow fetch, target branch should be expilictly fetched. + git fetch origin --depth=1 $(System.PullRequest.TargetBranch) + azdev linter --ci-exclusions --min-severity medium --repo=./ --src=HEAD --tgt=origin/$(System.PullRequest.TargetBranch) + else + azdev linter --ci-exclusions --min-severity medium + fi + +- job: CodegenCoverage + displayName: "Codegen Coverage" + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + # clone azure-cli-extensions + cd .. + git clone --depth 1 -b main https://github.com/Azure/azure-cli-extensions.git ./azure-cli-extensions + azdev extension repo add ./azure-cli-extensions + azdev extension add "*" + # Some extension will change the dependence, so run `azdev setup` again after all extensions installed. + azdev setup -c $CLI_REPO_PATH -r ./azure-cli-extensions + # CLI repo only + azdev statistics list-command-table CLI --statistics-only + # CLI + EXT repos + azdev statistics list-command-table --statistics-only + +- job: VerifySphinxDocumentGenerator + displayName: "Verify Sphinx Document Generator" + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - bash: pip install --upgrade pip wheel + displayName: "Install pip and wheel" + - bash: ./scripts/ci/test_ref_doc.sh + displayName: "Verify Sphinx Document Generator" + +- job: NotifyCIErrors + dependsOn: + - CheckPullRequest + - RejectPullRequestToMasterBranch + - CredentialScanner + - PolicyCheck + - ExtractMetadata + - VerifyLinuxRequirements + - VerifyDarwinRequirements + - VerifyWindowsRequirements + - VerifyVersions + - BuildWindowsMSI + - TestWindowsMSI + - BuildDockerImage + - TestDockerImage + - BuildPythonWheel + - TestPythonWheel + - TestCore + - TestTelemetry + - IntegrationTestAgainstProfiles + - TestExtensionsLoading + - BuildHomebrewFormula + - TestHomebrewFormula + - TestHomebrewPackage + - BuildRpmPackageMariner + - BuildRpmPackages + - TestRpmPackage + - BuildDebPackages + - TestDebPackages + - CheckStyle + - CheckHeaders + - PerformanceCheck + - CheckLinter + - CodegenCoverage + - VerifySphinxDocumentGenerator + condition: and(failed(), in(variables['Build.Reason'], 'BatchedCI')) + displayName: Notify CI Errors + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - task: AzureCLI@2 + inputs: + azureSubscription: 'Azure CLI' + scriptType: 'bash' + scriptLocation: 'inlineScript' + inlineScript: | + pip install requests + teams_api_url=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_URL_SECRET_NAME) --query value -otsv) + teams_api_key=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_KEY_SECRET_NAME) --query value -otsv) + echo "If any task fails, notify to teams channel" + python scripts/ci/notify_ci_errors.py $teams_api_url $teams_api_key $(TEAMS_CHANNEL_ID) + displayName: 'Notify To Teams Channel' + env: + BASE_URI: $(System.CollectionUri) + PROJECT_TYPE: $(System.TeamProject) + BUILD_ID: $(Build.BuildId) + JOB_ID: $(System.JobId) From d35cb4cead941a05bf95ce0c6cbbc98738dedc8a Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 18:43:13 +0800 Subject: [PATCH 07/68] update --- .github/azure-client-tools-bot/config.yml | 1 + .../templates/BreakingChangeTest.handlebars | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/azure-client-tools-bot/config.yml b/.github/azure-client-tools-bot/config.yml index 465973e3902..fe407f802a9 100644 --- a/.github/azure-client-tools-bot/config.yml +++ b/.github/azure-client-tools-bot/config.yml @@ -24,6 +24,7 @@ pull_request: - "Azure.azure-cli Breaking Change Test" result_path: "/breaking_change_test/" group_by_keys: + - "TestName" - "Module" template_path: "templates/BreakingChangeTest.handlebars" comment_title: "AzureCLI-BreakingChangeTest" diff --git a/.github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars b/.github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars index e80dfdb3bff..6698cbaca6d 100644 --- a/.github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars +++ b/.github/azure-client-tools-bot/templates/BreakingChangeTest.handlebars @@ -1,6 +1,13 @@ {{#each this}}
-{{renderStatus Status}}{{Module}} -{{renderContent Content 0}} +{{renderStatus Status}}{{TestName}} + +{{#each Items}} +>
+> {{renderStatus Status}}{{Module}} +> +{{renderContent Content 1}} +>
+{{/each}}
{{/each}} From 51bf196c4b104643f552b14e270bf926edb64b46 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 10 May 2023 17:09:17 +0800 Subject: [PATCH 08/68] init --- azure-pipelines.yml | 2238 ++++++++++++++------------- scripts/ci/breaking_change_check.py | 95 ++ 2 files changed, 1223 insertions(+), 1110 deletions(-) create mode 100644 scripts/ci/breaking_change_check.py diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0df1e528ecf..933f3b2bffe 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -27,946 +27,1069 @@ parameters: pool: ubuntu-arm64-2004-pool jobs: -- job: CheckPullRequest - displayName: "Check the Format of Pull Request Title and Content" - condition: and(succeeded(), in(variables['System.PullRequest.TargetBranch'], 'dev', 'release')) - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - bash: | - echo "Check Title of Pull Request: #$(System.PullRequest.PullRequestNumber)" - title=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.title') - echo $title - body=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.body') - echo $body - if [ "$(System.PullRequest.TargetBranch)" != "release" ] && echo $title | grep -iqF hotfix:; then - echo "Hotfix PR should target release branch." - exit 1 - fi - python scripts/ci/check_pull_request.py "$title" "$body" - -- job: RejectPullRequestToMasterBranch - displayName: "Reject Pull Request To Master Branch" - condition: and(succeeded(), eq(variables['System.PullRequest.TargetBranch'], 'master')) - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - bash: | - echo "Reject pull request directly to master branch" - exit 1 - -- job: CredentialScanner - displayName: "Credential Scanner" - pool: - name: ${{ variables.windows_pool }} - steps: - - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-credscan.CredScan@2 - displayName: 'Run Credential Scanner' - inputs: - toolMajorVersion: V2 - suppressionsFile: './scripts/ci/credscan/CredScanSuppressions.json' - toolVersionV2: '2.1.17' - - - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-postanalysis.PostAnalysis@1 - displayName: 'Post Analysis' - inputs: - AllTools: false - BinSkim: false - CredScan: true - PoliCheck: false - RoslynAnalyzers: false - TSLint: false - ToolLogsNotFoundAction: 'Standard' - -- job: PolicyCheck - displayName: "Policy Check" - pool: - name: ${{ variables.windows_pool }} - steps: - - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@2 - displayName: 'Run Policy Check' - inputs: - targetType: F - result: PoliCheckResult.xml - - - task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@2 - displayName: 'Post Analysis' - inputs: - GdnBreakAllTools: false - GdnBreakGdnToolPoliCheck: true - GdnBreakGdnToolPoliCheckSeverity: Error - -- job: ExtractMetadata - displayName: Extract Metadata - - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: Bash@3 - displayName: 'Extract Version' - inputs: - targetType: 'filePath' - filePath: scripts/release/get_version.sh - - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: metadata' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: metadata - -- job: VerifyLinuxRequirements - displayName: 'Verify src/azure-cli/requirements.*.Linux.txt' - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - bash: ./scripts/ci/dependency_check.sh - displayName: 'Verify src/azure-cli/requirements.py3.Linux.txt' - -- job: VerifyDarwinRequirements - displayName: 'Verify src/azure-cli/requirements.*.Darwin.txt' - condition: succeeded() - pool: - vmImage: 'macOS-12' - - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - bash: ./scripts/ci/dependency_check.sh - displayName: 'Verify src/azure-cli/requirements.py3.Darwin.txt' - -- job: VerifyWindowsRequirements - displayName: 'Verify src/azure-cli/requirements.*.Windows.txt' - condition: succeeded() - pool: - name: ${{ variables.windows_pool }} - - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - task: BatchScript@1 - inputs: - filename: ./scripts/ci/dependency_check.bat - displayName: 'Verify src/azure-cli/requirements.py3.Windows.txt' - -- job: VerifyVersions - displayName: Verify Command Module Versions - condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/release'), eq(variables['System.PullRequest.TargetBranch'], 'release'))) - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - azdev verify history - - displayName: 'Verify History' - -- job: BuildWindowsMSI - displayName: Build Windows MSI - - dependsOn: ExtractMetadata - condition: succeeded() - pool: - name: ${{ variables.windows_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - script: | - set /p CLI_VERSION=<$(System.ArtifactsDirectory)/metadata/version - set - - build_scripts/windows/scripts/build.cmd - displayName: 'Build Windows MSI' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: 'build_scripts/windows/out/' - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: MSI' - inputs: - TargetPath: 'build_scripts/windows/out/' - ArtifactName: msi - -- job: TestWindowsMSI - displayName: Test Windows MSI - - dependsOn: BuildWindowsMSI - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: ${{ variables.windows_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/msi' - artifactName: msi - - - task: PowerShell@2 - displayName: Install and Load CLI - inputs: - targetType: inline - script: | - if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { - # Start another Powershell process as Admin and execute this script again - $arguments = "& '" +$myinvocation.mycommand.definition + "'" - Start-Process powershell -Verb runAs -ArgumentList $arguments - # Stop if the PowerShell is not run as Admin - Break - } - # The following are executed by elevated PowerShell - az --version - - $InstallArgs = @( - "/i" - "`"$env:SYSTEM_ARTIFACTSDIRECTORY\msi\Microsoft Azure CLI.msi`"" - "/q" - "/norestart" - "/l*v" - ".\install_logs.txt" - ) - $pre_installed_version=az version --query '\"azure-cli\"' -o tsv - $to_be_installed_version=Get-Content $(System.ArtifactsDirectory)/metadata/version - if ($pre_installed_version -eq $to_be_installed_version){ - # See https://docs.microsoft.com/windows/win32/msi/reinstallmode about options of REINSTALLMODE - $reinstall_option="REINSTALL=ALL REINSTALLMODE=emus" - $InstallArgs += $reinstall_option - } - Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow - $install_time=Measure-Command {Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow} | select -expand TotalSeconds - $installed_version=az version --query '\"azure-cli\"' -o tsv - if ($installed_version -ne $to_be_installed_version){ - echo "The MSI failed to install." - Exit 1 - } - echo 'Install time(seconds):' $install_time - az --version - # Test bundled pip with extension installation - az extension add -n rdbms-connect - az self-test - - Get-Content .\install_logs.txt - -- job: BuildDockerImage - displayName: Build Docker Image - - dependsOn: ExtractMetadata - condition: succeeded() - strategy: - matrix: - AMD64: - pool: ${{ variables.ubuntu_pool }} - artifactName: docker-amd64 - ARM64: - pool: ${{ variables.ubuntu_arm64_pool }} - artifactName: docker-arm64 - pool: - name: $(pool) - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: Bash@3 - displayName: 'Bash Script' - inputs: - targetType: 'filePath' - filePath: scripts/release/docker/pipeline.sh - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - DockerImagesToScan: 'clibuild$BUILD_BUILDNUMBER:latest' - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: docker image' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(artifactName) - -- job: TestDockerImage - displayName: Test Docker Image - - dependsOn: BuildDockerImage - condition: succeeded() - strategy: - matrix: - AMD64: - pool: ${{ variables.ubuntu_pool }} - artifactName: docker-amd64 - ARM64: - pool: ${{ variables.ubuntu_arm64_pool }} - artifactName: docker-arm64 - pool: - name: $(pool) - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Docker Image' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/docker' - artifactName: $(artifactName) - - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - bash: | - set -exv - - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - IMAGE_NAME=clibuild$BUILD_BUILDNUMBER:latest - TAR_FILE=$SYSTEM_ARTIFACTSDIRECTORY/docker/docker-azure-cli-$CLI_VERSION.tar - - echo "== Test docker image ==" - - docker load < $TAR_FILE - docker run $IMAGE_NAME /bin/bash -c "time az self-test && time az --version && sleep 5" - displayName: 'Bash Script' - -- job: BuildPythonWheel - displayName: Build Python Wheels - - dependsOn: ExtractMetadata - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - - script: | - if [[ "$(Build.Reason)" == "PullRequest" ]]; then - branch=$(System.PullRequest.TargetBranch) - else - branch=$(Build.SourceBranchName) - fi - scripts/release/pypi/build.sh $branch - displayName: 'Run Wheel Build Script' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: pypi' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: pypi - -- job: TestPythonWheel - displayName: Test Python Wheels - - dependsOn: BuildPythonWheel - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download PyPI Packages' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/pypi' - artifactName: pypi - - - - bash: | - #!/usr/bin/env bash - - # Verify the pip wheels - - set -ex - - CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` - PYPI_FILES=$(cd $BUILD_ARTIFACTSTAGINGDIRECTORY/pypi; pwd) - - echo "== Testing pip install on Python 3.7 ==" - docker run \ - --rm -v $PYPI_FILES:/mnt/pypi python:3.7 \ - /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - - echo "== Testing pip install on Python 3.9 ==" - docker run \ - --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ - /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - - echo "== Testing pip install on Python 3.10 ==" - docker run \ - --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ - /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - - displayName: 'Test pip Install' - -- job: TestCore - displayName: Unit Test for Core - timeoutInMinutes: 10 - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - steps: - - template: .azure-pipelines/templates/automation_test.yml - parameters: - pythonVersion: '$(python.version)' - module: 'azure-cli-core' - -- job: TestTelemetry - displayName: Unit Test for Telemetry - timeoutInMinutes: 10 - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - steps: - - template: .azure-pipelines/templates/automation_test.yml - parameters: - pythonVersion: '$(python.version)' - module: 'azure-cli-telemetry' - -- job: IntegrationTestAgainstProfiles - displayName: Integration Test against Profiles - dependsOn: BuildPythonWheel - condition: succeeded() - timeoutInMinutes: 20 - - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python $(python.version)' - inputs: - versionSpec: '$(python.version)' - - bash: pip install --upgrade pip wheel - displayName: 'Install pip and wheel' - - bash: ./scripts/ci/test_profile_integration.sh - displayName: 'Run Integration Test against Profiles' - -- job: TestExtensionsLoading - displayName: Test Extensions Loading - condition: succeeded() - timeoutInMinutes: 40 - - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python310: - python.version: '3.10' - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python $(python.version)' - inputs: - versionSpec: '$(python.version)' - - bash: pip install --upgrade pip wheel - displayName: 'Install pip and wheel' - - bash: ./scripts/ci/test_extensions.sh - displayName: 'Load extensions' - -- job: BuildHomebrewFormula - displayName: Build Homebrew Formula - - dependsOn: BuildPythonWheel - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - bash: | - #!/bin/bash - - root=$(cd $(dirname $0); pwd) - - set -evx - - CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` - HOMEBREW_UPSTREAM_URL=`curl -Ls -o /dev/null -w %{url_effective} https://api.github.com/repos/Azure/azure-cli/tarball/$BUILD_SOURCEVERSION` - - docker_files=$(cd $BUILD_SOURCESDIRECTORY/scripts/release/homebrew/docker; pwd) - src_files=$(cd $BUILD_SOURCESDIRECTORY/src; pwd) - - echo "Generating formula in docker container ... " - docker run -v $docker_files:/mnt/scripts \ - -v $src_files:/mnt/src \ - -e CLI_VERSION=$CLI_VERSION \ - -e HOMEBREW_UPSTREAM_URL=$HOMEBREW_UPSTREAM_URL \ - --name azurecli \ - python:3.10 \ - /mnt/scripts/run.sh - - # clean up - rm -rf $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata - - docker cp azurecli:azure-cli.rb $BUILD_ARTIFACTSTAGINGDIRECTORY/azure-cli.rb - docker rm --force azurecli - displayName: 'Build homebrew formula' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: homebrew' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: homebrew - -- job: TestHomebrewFormula - displayName: Test Homebrew Formula - - dependsOn: BuildHomebrewFormula - condition: succeeded() - pool: - vmImage: 'macOS-12' - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Homebrew' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' - artifactName: homebrew - - - - bash: | - set -ev - - echo == Remove pre-installed azure-cli == - brew uninstall azure-cli - - echo == Install azure-cli.rb formula == - brew install --build-from-source $SYSTEM_ARTIFACTSDIRECTORY/homebrew/azure-cli.rb - - echo == Az Version == - az --version - - echo == Run Self-Test == - az self-test - - displayName: 'Bash Script' - -- job: TestHomebrewPackage - displayName: Test Homebrew Package - timeoutInMinutes: 180 - dependsOn: BuildHomebrewFormula - # condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - condition: false - pool: - vmImage: 'macOS-12' - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' - artifactName: homebrew - - - - bash: ./scripts/release/homebrew/test_homebrew_package.sh - - - displayName: 'Test Homebrew Package' - - -- job: BuildRpmPackageMariner - displayName: Build Rpm Package Mariner - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - strategy: - matrix: - 2.0 AMD64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-amd64 - pool: ${{ variables.ubuntu_pool }} - 2.0 ARM64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-arm64 - pool: ${{ variables.ubuntu_arm64_pool }} - pool: - name: $(pool) - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - task: Bash@3 - displayName: 'Build Rpm Package: Mariner' - inputs: - targetType: 'filePath' - filePath: scripts/release/rpm/pipeline_mariner.sh - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: rpm-mariner' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(artifact) - -- job: TestRpmPackageMariner - displayName: Test Rpm Package Mariner - timeoutInMinutes: 120 - dependsOn: - - BuildRpmPackageMariner - - ExtractMetadata - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - 2.0 AMD64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-amd64 - pool: ${{ variables.ubuntu_pool }} - 2.0 ARM64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-arm64 - pool: ${{ variables.ubuntu_arm64_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' - artifactName: $(artifact) - - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - bash: | - set -ex - - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.cm2.*.rpm" -printf '%f\n') - - echo "== Test rpm package on ${IMAGE} ==" - docker pull $IMAGE - docker run --rm -e RPM_NAME=$RPM_NAME -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_mariner_in_docker.sh" - - displayName: 'Test Rpm Package Mariner' - -# TODO: rpmbuild on Red Hat UBI 8 is slow for unknown reason. Still working with Red Hat to investigate. -- job: BuildRpmPackages - displayName: Build Rpm Packages - # Do not run this job for Pull Requests due to the slowness - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - Red Hat Universal Base Image 8 ${{ arch.name }}: - dockerfile: ubi - image: registry.access.redhat.com/ubi8/ubi:8.4 - artifact: rpm-ubi8-${{ arch.value }} - python_package: python39 - pool: ${{ arch.pool }} - Red Hat Universal Base Image 9 ${{ arch.name }}: - dockerfile: ubi - image: registry.access.redhat.com/ubi9/ubi:9.0.0 - artifact: rpm-ubi9-${{ arch.value }} - python_package: python3.9 - pool: ${{ arch.pool }} - Fedora 36 ${{ arch.name }}: - dockerfile: fedora - image: fedora:36 - artifact: rpm-fedora36-${{ arch.value }} - python_package: python3 - pool: ${{ arch.pool }} - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: Bash@3 - displayName: 'Build Rpm Package' - inputs: - targetType: 'filePath' - filePath: scripts/release/rpm/pipeline.sh - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: rpm' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(artifact) - - -- job: TestRpmPackage - displayName: Test Rpm Package - timeoutInMinutes: 120 - dependsOn: - - BuildRpmPackages - - ExtractMetadata - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - Red Hat Universal Base Image 8 ${{ arch.name }}: - artifact: rpm-ubi8-${{ arch.value }} - distro: el8 - image: registry.access.redhat.com/ubi8/ubi:8.4 - python_package: python39 - python_cmd: python3.9 - pip_cmd: pip3.9 - pool: ${{ arch.pool }} - Red Hat Universal Base Image 9 ${{ arch.name }}: - artifact: rpm-ubi9-${{ arch.value }} - distro: el9 - image: registry.access.redhat.com/ubi9/ubi:9.0.0 - python_package: python3.9 - python_cmd: python3.9 - pip_cmd: pip3.9 - pool: ${{ arch.pool }} - Fedora 36 ${{ arch.name }}: - artifact: rpm-fedora36-${{ arch.value }} - distro: fc36 - image: fedora:36 - python_package: python3 - python_cmd: python3 - pip_cmd: pip3 - pool: ${{ arch.pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' - artifactName: $(artifact) - - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - bash: | - set -ex - - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.${DISTRO}.*.rpm" -printf '%f\n') - - echo "== Test rpm package on ${IMAGE} ==" - docker pull $IMAGE - docker run --rm -e RPM_NAME=$RPM_NAME -e PYTHON_PACKAGE=${PYTHON_PACKAGE} -e PYTHON_CMD=${PYTHON_CMD} -e PIP_CMD=${PIP_CMD} -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh" - - displayName: 'Test Rpm Package' - -- job: BuildDebPackages - displayName: Build Deb Packages - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - # https://wiki.ubuntu.com/Releases - Bionic ${{ arch.name }}: - # 18.04 - deb_system: ubuntu - distro: bionic - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Focal ${{ arch.name }}: - # 20.04 - deb_system: ubuntu - distro: focal - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Jammy ${{ arch.name }}: - # 22.04 - deb_system: ubuntu - distro: jammy - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - - # https://wiki.debian.org/DebianReleases - Buster ${{ arch.name }}: - # 10 - deb_system: debian - distro: buster - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Bullseye ${{ arch.name }}: - # 11 - deb_system: debian - distro: bullseye - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: Bash@3 - displayName: 'Build $(deb_system) $(distro) $(arch) Package' - inputs: - targetType: 'filePath' - filePath: scripts/release/debian/pipeline.sh - env: - DISTRO_BASE_IMAGE: $(deb_system):$(distro) - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: $(deb_system) $(distro) $(arch)' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(deb_system)-$(distro)-$(arch) - -- job: TestDebPackages - timeoutInMinutes: 120 - displayName: Test Deb Packages - dependsOn: - - BuildDebPackages - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - Focal ${{ arch.name }}: - deb_system: ubuntu - distro: focal - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Jammy ${{ arch.name }}: - deb_system: ubuntu - distro: jammy - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Buster ${{ arch.name }}: - deb_system: debian - distro: buster - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Bullseye ${{ arch.name }}: - deb_system: debian - distro: bullseye - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - pool: - name: $(pool) - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download $(deb_system):$(distro) $(arch) Build' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/debian' - artifactName: $(deb_system)-$(distro)-$(arch) - - - task: Bash@3 - displayName: 'Test $(deb_system) $(distro) $(arch) Package' - env: - DISTRO_BASE_IMAGE: $(deb_system):$(distro) - inputs: - targetType: 'inline' - script: | - set -exv - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - - echo "== Test debian package on ${DISTRO} ==" - docker pull ${DISTRO_BASE_IMAGE} - docker run --rm -e DISTRO=${DISTRO} -e CLI_VERSION=$CLI_VERSION -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts -v $(pwd):/azure-cli ${DISTRO_BASE_IMAGE} /bin/bash "/azure-cli/scripts/release/debian/test_deb_in_docker.sh" - -- job: CheckStyle - displayName: "Check CLI Style" - timeoutInMinutes: 120 +#- job: CheckPullRequest +# displayName: "Check the Format of Pull Request Title and Content" +# condition: and(succeeded(), in(variables['System.PullRequest.TargetBranch'], 'dev', 'release')) +# +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - bash: | +# echo "Check Title of Pull Request: #$(System.PullRequest.PullRequestNumber)" +# title=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.title') +# echo $title +# body=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.body') +# echo $body +# if [ "$(System.PullRequest.TargetBranch)" != "release" ] && echo $title | grep -iqF hotfix:; then +# echo "Hotfix PR should target release branch." +# exit 1 +# fi +# python scripts/ci/check_pull_request.py "$title" "$body" +# +#- job: RejectPullRequestToMasterBranch +# displayName: "Reject Pull Request To Master Branch" +# condition: and(succeeded(), eq(variables['System.PullRequest.TargetBranch'], 'master')) +# +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - bash: | +# echo "Reject pull request directly to master branch" +# exit 1 +# +#- job: CredentialScanner +# displayName: "Credential Scanner" +# pool: +# name: ${{ variables.windows_pool }} +# steps: +# - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-credscan.CredScan@2 +# displayName: 'Run Credential Scanner' +# inputs: +# toolMajorVersion: V2 +# suppressionsFile: './scripts/ci/credscan/CredScanSuppressions.json' +# toolVersionV2: '2.1.17' +# +# - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-postanalysis.PostAnalysis@1 +# displayName: 'Post Analysis' +# inputs: +# AllTools: false +# BinSkim: false +# CredScan: true +# PoliCheck: false +# RoslynAnalyzers: false +# TSLint: false +# ToolLogsNotFoundAction: 'Standard' +# +#- job: PolicyCheck +# displayName: "Policy Check" +# pool: +# name: ${{ variables.windows_pool }} +# steps: +# - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@2 +# displayName: 'Run Policy Check' +# inputs: +# targetType: F +# result: PoliCheckResult.xml +# +# - task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@2 +# displayName: 'Post Analysis' +# inputs: +# GdnBreakAllTools: false +# GdnBreakGdnToolPoliCheck: true +# GdnBreakGdnToolPoliCheckSeverity: Error +# +#- job: ExtractMetadata +# displayName: Extract Metadata +# +# condition: succeeded() +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: Bash@3 +# displayName: 'Extract Version' +# inputs: +# targetType: 'filePath' +# filePath: scripts/release/get_version.sh +# +# +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: metadata' +# inputs: +# TargetPath: $(Build.ArtifactStagingDirectory) +# ArtifactName: metadata +# +#- job: VerifyLinuxRequirements +# displayName: 'Verify src/azure-cli/requirements.*.Linux.txt' +# condition: succeeded() +# pool: +# name: ${{ variables.ubuntu_pool }} +# +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# +# - bash: ./scripts/ci/dependency_check.sh +# displayName: 'Verify src/azure-cli/requirements.py3.Linux.txt' +# +#- job: VerifyDarwinRequirements +# displayName: 'Verify src/azure-cli/requirements.*.Darwin.txt' +# condition: succeeded() +# pool: +# vmImage: 'macOS-12' +# +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# +# - bash: ./scripts/ci/dependency_check.sh +# displayName: 'Verify src/azure-cli/requirements.py3.Darwin.txt' +# +#- job: VerifyWindowsRequirements +# displayName: 'Verify src/azure-cli/requirements.*.Windows.txt' +# condition: succeeded() +# pool: +# name: ${{ variables.windows_pool }} +# +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# +# - task: BatchScript@1 +# inputs: +# filename: ./scripts/ci/dependency_check.bat +# displayName: 'Verify src/azure-cli/requirements.py3.Windows.txt' +# +#- job: VerifyVersions +# displayName: Verify Command Module Versions +# condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/release'), eq(variables['System.PullRequest.TargetBranch'], 'release'))) +# +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# - template: .azure-pipelines/templates/azdev_setup.yml +# - bash: | +# set -ev +# . env/bin/activate +# azdev verify history +# +# displayName: 'Verify History' +# +#- job: BuildWindowsMSI +# displayName: Build Windows MSI +# +# dependsOn: ExtractMetadata +# condition: succeeded() +# pool: +# name: ${{ variables.windows_pool }} +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Build Artifacts' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# +# - script: | +# set /p CLI_VERSION=<$(System.ArtifactsDirectory)/metadata/version +# set +# +# build_scripts/windows/scripts/build.cmd +# displayName: 'Build Windows MSI' +# +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: 'SBOM' +# inputs: +# BuildDropPath: 'build_scripts/windows/out/' +# +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: MSI' +# inputs: +# TargetPath: 'build_scripts/windows/out/' +# ArtifactName: msi +# +#- job: TestWindowsMSI +# displayName: Test Windows MSI +# +# dependsOn: BuildWindowsMSI +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# pool: +# name: ${{ variables.windows_pool }} +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Build Artifacts' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Build Artifacts' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/msi' +# artifactName: msi +# +# - task: PowerShell@2 +# displayName: Install and Load CLI +# inputs: +# targetType: inline +# script: | +# if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { +# # Start another Powershell process as Admin and execute this script again +# $arguments = "& '" +$myinvocation.mycommand.definition + "'" +# Start-Process powershell -Verb runAs -ArgumentList $arguments +# # Stop if the PowerShell is not run as Admin +# Break +# } +# # The following are executed by elevated PowerShell +# az --version +# +# $InstallArgs = @( +# "/i" +# "`"$env:SYSTEM_ARTIFACTSDIRECTORY\msi\Microsoft Azure CLI.msi`"" +# "/q" +# "/norestart" +# "/l*v" +# ".\install_logs.txt" +# ) +# $pre_installed_version=az version --query '\"azure-cli\"' -o tsv +# $to_be_installed_version=Get-Content $(System.ArtifactsDirectory)/metadata/version +# if ($pre_installed_version -eq $to_be_installed_version){ +# # See https://docs.microsoft.com/windows/win32/msi/reinstallmode about options of REINSTALLMODE +# $reinstall_option="REINSTALL=ALL REINSTALLMODE=emus" +# $InstallArgs += $reinstall_option +# } +# Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow +# $install_time=Measure-Command {Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow} | select -expand TotalSeconds +# $installed_version=az version --query '\"azure-cli\"' -o tsv +# if ($installed_version -ne $to_be_installed_version){ +# echo "The MSI failed to install." +# Exit 1 +# } +# echo 'Install time(seconds):' $install_time +# az --version +# # Test bundled pip with extension installation +# az extension add -n rdbms-connect +# az self-test +# +# Get-Content .\install_logs.txt +# +#- job: BuildDockerImage +# displayName: Build Docker Image +# +# dependsOn: ExtractMetadata +# condition: succeeded() +# strategy: +# matrix: +# AMD64: +# pool: ${{ variables.ubuntu_pool }} +# artifactName: docker-amd64 +# ARM64: +# pool: ${{ variables.ubuntu_arm64_pool }} +# artifactName: docker-arm64 +# pool: +# name: $(pool) +# steps: +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# - task: Bash@3 +# displayName: 'Bash Script' +# inputs: +# targetType: 'filePath' +# filePath: scripts/release/docker/pipeline.sh +# +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: 'SBOM' +# inputs: +# BuildDropPath: $(Build.ArtifactStagingDirectory) +# DockerImagesToScan: 'clibuild$BUILD_BUILDNUMBER:latest' +# +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: docker image' +# inputs: +# TargetPath: $(Build.ArtifactStagingDirectory) +# ArtifactName: $(artifactName) +# +#- job: TestDockerImage +# displayName: Test Docker Image +# +# dependsOn: BuildDockerImage +# condition: succeeded() +# strategy: +# matrix: +# AMD64: +# pool: ${{ variables.ubuntu_pool }} +# artifactName: docker-amd64 +# ARM64: +# pool: ${{ variables.ubuntu_arm64_pool }} +# artifactName: docker-arm64 +# pool: +# name: $(pool) +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Docker Image' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/docker' +# artifactName: $(artifactName) +# +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# +# - bash: | +# set -exv +# +# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` +# IMAGE_NAME=clibuild$BUILD_BUILDNUMBER:latest +# TAR_FILE=$SYSTEM_ARTIFACTSDIRECTORY/docker/docker-azure-cli-$CLI_VERSION.tar +# +# echo "== Test docker image ==" +# +# docker load < $TAR_FILE +# docker run $IMAGE_NAME /bin/bash -c "time az self-test && time az --version && sleep 5" +# displayName: 'Bash Script' +# +#- job: BuildPythonWheel +# displayName: Build Python Wheels +# +# dependsOn: ExtractMetadata +# condition: succeeded() +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# +# +# - script: | +# if [[ "$(Build.Reason)" == "PullRequest" ]]; then +# branch=$(System.PullRequest.TargetBranch) +# else +# branch=$(Build.SourceBranchName) +# fi +# scripts/release/pypi/build.sh $branch +# displayName: 'Run Wheel Build Script' +# +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: 'SBOM' +# inputs: +# BuildDropPath: $(Build.ArtifactStagingDirectory) +# +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: pypi' +# inputs: +# TargetPath: $(Build.ArtifactStagingDirectory) +# ArtifactName: pypi +# +#- job: TestPythonWheel +# displayName: Test Python Wheels +# +# dependsOn: BuildPythonWheel +# condition: succeeded() +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download PyPI Packages' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/pypi' +# artifactName: pypi +# +# +# - bash: | +# #!/usr/bin/env bash +# +# # Verify the pip wheels +# +# set -ex +# +# CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` +# PYPI_FILES=$(cd $BUILD_ARTIFACTSTAGINGDIRECTORY/pypi; pwd) +# +# echo "== Testing pip install on Python 3.7 ==" +# docker run \ +# --rm -v $PYPI_FILES:/mnt/pypi python:3.7 \ +# /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" +# +# echo "== Testing pip install on Python 3.9 ==" +# docker run \ +# --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ +# /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" +# +# echo "== Testing pip install on Python 3.10 ==" +# docker run \ +# --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ +# /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" +# +# displayName: 'Test pip Install' +# +#- job: TestCore +# displayName: Unit Test for Core +# timeoutInMinutes: 10 +# pool: +# name: ${{ variables.ubuntu_pool }} +# strategy: +# matrix: +# Python39: +# python.version: '3.9' +# Python310: +# python.version: '3.10' +# steps: +# - template: .azure-pipelines/templates/automation_test.yml +# parameters: +# pythonVersion: '$(python.version)' +# module: 'azure-cli-core' +# +#- job: TestTelemetry +# displayName: Unit Test for Telemetry +# timeoutInMinutes: 10 +# pool: +# name: ${{ variables.ubuntu_pool }} +# strategy: +# matrix: +# Python39: +# python.version: '3.9' +# Python310: +# python.version: '3.10' +# steps: +# - template: .azure-pipelines/templates/automation_test.yml +# parameters: +# pythonVersion: '$(python.version)' +# module: 'azure-cli-telemetry' +# +#- job: IntegrationTestAgainstProfiles +# displayName: Integration Test against Profiles +# dependsOn: BuildPythonWheel +# condition: succeeded() +# timeoutInMinutes: 20 +# +# pool: +# name: ${{ variables.ubuntu_pool }} +# strategy: +# matrix: +# Python39: +# python.version: '3.9' +# Python310: +# python.version: '3.10' +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python $(python.version)' +# inputs: +# versionSpec: '$(python.version)' +# - bash: pip install --upgrade pip wheel +# displayName: 'Install pip and wheel' +# - bash: ./scripts/ci/test_profile_integration.sh +# displayName: 'Run Integration Test against Profiles' +# +#- job: TestExtensionsLoading +# displayName: Test Extensions Loading +# condition: succeeded() +# timeoutInMinutes: 40 +# +# pool: +# name: ${{ variables.ubuntu_pool }} +# strategy: +# matrix: +# Python310: +# python.version: '3.10' +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python $(python.version)' +# inputs: +# versionSpec: '$(python.version)' +# - bash: pip install --upgrade pip wheel +# displayName: 'Install pip and wheel' +# - bash: ./scripts/ci/test_extensions.sh +# displayName: 'Load extensions' +# +#- job: BuildHomebrewFormula +# displayName: Build Homebrew Formula +# +# dependsOn: BuildPythonWheel +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# - bash: | +# #!/bin/bash +# +# root=$(cd $(dirname $0); pwd) +# +# set -evx +# +# CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` +# HOMEBREW_UPSTREAM_URL=`curl -Ls -o /dev/null -w %{url_effective} https://api.github.com/repos/Azure/azure-cli/tarball/$BUILD_SOURCEVERSION` +# +# docker_files=$(cd $BUILD_SOURCESDIRECTORY/scripts/release/homebrew/docker; pwd) +# src_files=$(cd $BUILD_SOURCESDIRECTORY/src; pwd) +# +# echo "Generating formula in docker container ... " +# docker run -v $docker_files:/mnt/scripts \ +# -v $src_files:/mnt/src \ +# -e CLI_VERSION=$CLI_VERSION \ +# -e HOMEBREW_UPSTREAM_URL=$HOMEBREW_UPSTREAM_URL \ +# --name azurecli \ +# python:3.10 \ +# /mnt/scripts/run.sh +# +# # clean up +# rm -rf $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata +# +# docker cp azurecli:azure-cli.rb $BUILD_ARTIFACTSTAGINGDIRECTORY/azure-cli.rb +# docker rm --force azurecli +# displayName: 'Build homebrew formula' +# +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: 'SBOM' +# inputs: +# BuildDropPath: $(Build.ArtifactStagingDirectory) +# +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: homebrew' +# inputs: +# TargetPath: $(Build.ArtifactStagingDirectory) +# ArtifactName: homebrew +# +#- job: TestHomebrewFormula +# displayName: Test Homebrew Formula +# +# dependsOn: BuildHomebrewFormula +# condition: succeeded() +# pool: +# vmImage: 'macOS-12' +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Homebrew' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' +# artifactName: homebrew +# +# +# - bash: | +# set -ev +# +# echo == Remove pre-installed azure-cli == +# brew uninstall azure-cli +# +# echo == Install azure-cli.rb formula == +# brew install --build-from-source $SYSTEM_ARTIFACTSDIRECTORY/homebrew/azure-cli.rb +# +# echo == Az Version == +# az --version +# +# echo == Run Self-Test == +# az self-test +# +# displayName: 'Bash Script' +# +#- job: TestHomebrewPackage +# displayName: Test Homebrew Package +# timeoutInMinutes: 180 +# dependsOn: BuildHomebrewFormula +# # condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# condition: false +# pool: +# vmImage: 'macOS-12' +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Build Artifacts' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' +# artifactName: homebrew +# +# +# - bash: ./scripts/release/homebrew/test_homebrew_package.sh +# +# +# displayName: 'Test Homebrew Package' +# +# +#- job: BuildRpmPackageMariner +# displayName: Build Rpm Package Mariner +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# strategy: +# matrix: +# 2.0 AMD64: +# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 +# artifact: rpm-mariner2.0-amd64 +# pool: ${{ variables.ubuntu_pool }} +# 2.0 ARM64: +# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 +# artifact: rpm-mariner2.0-arm64 +# pool: ${{ variables.ubuntu_arm64_pool }} +# pool: +# name: $(pool) +# steps: +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# +# - task: Bash@3 +# displayName: 'Build Rpm Package: Mariner' +# inputs: +# targetType: 'filePath' +# filePath: scripts/release/rpm/pipeline_mariner.sh +# +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: 'SBOM' +# inputs: +# BuildDropPath: $(Build.ArtifactStagingDirectory) +# +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: rpm-mariner' +# inputs: +# TargetPath: $(Build.ArtifactStagingDirectory) +# ArtifactName: $(artifact) +# +#- job: TestRpmPackageMariner +# displayName: Test Rpm Package Mariner +# timeoutInMinutes: 120 +# dependsOn: +# - BuildRpmPackageMariner +# - ExtractMetadata +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# pool: +# name: $(pool) +# strategy: +# matrix: +# 2.0 AMD64: +# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 +# artifact: rpm-mariner2.0-amd64 +# pool: ${{ variables.ubuntu_pool }} +# 2.0 ARM64: +# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 +# artifact: rpm-mariner2.0-arm64 +# pool: ${{ variables.ubuntu_arm64_pool }} +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Build Artifacts' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' +# artifactName: $(artifact) +# +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# +# - bash: | +# set -ex +# +# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` +# RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.cm2.*.rpm" -printf '%f\n') +# +# echo "== Test rpm package on ${IMAGE} ==" +# docker pull $IMAGE +# docker run --rm -e RPM_NAME=$RPM_NAME -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_mariner_in_docker.sh" +# +# displayName: 'Test Rpm Package Mariner' +# +## TODO: rpmbuild on Red Hat UBI 8 is slow for unknown reason. Still working with Red Hat to investigate. +#- job: BuildRpmPackages +# displayName: Build Rpm Packages +# # Do not run this job for Pull Requests due to the slowness +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# pool: +# name: $(pool) +# strategy: +# matrix: +# ${{ each arch in parameters.architectures }}: +# Red Hat Universal Base Image 8 ${{ arch.name }}: +# dockerfile: ubi +# image: registry.access.redhat.com/ubi8/ubi:8.4 +# artifact: rpm-ubi8-${{ arch.value }} +# python_package: python39 +# pool: ${{ arch.pool }} +# Red Hat Universal Base Image 9 ${{ arch.name }}: +# dockerfile: ubi +# image: registry.access.redhat.com/ubi9/ubi:9.0.0 +# artifact: rpm-ubi9-${{ arch.value }} +# python_package: python3.9 +# pool: ${{ arch.pool }} +# Fedora 36 ${{ arch.name }}: +# dockerfile: fedora +# image: fedora:36 +# artifact: rpm-fedora36-${{ arch.value }} +# python_package: python3 +# pool: ${{ arch.pool }} +# steps: +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# - task: Bash@3 +# displayName: 'Build Rpm Package' +# inputs: +# targetType: 'filePath' +# filePath: scripts/release/rpm/pipeline.sh +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: 'SBOM' +# inputs: +# BuildDropPath: $(Build.ArtifactStagingDirectory) +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: rpm' +# inputs: +# TargetPath: $(Build.ArtifactStagingDirectory) +# ArtifactName: $(artifact) +# +# +#- job: TestRpmPackage +# displayName: Test Rpm Package +# timeoutInMinutes: 120 +# dependsOn: +# - BuildRpmPackages +# - ExtractMetadata +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# pool: +# name: $(pool) +# strategy: +# matrix: +# ${{ each arch in parameters.architectures }}: +# Red Hat Universal Base Image 8 ${{ arch.name }}: +# artifact: rpm-ubi8-${{ arch.value }} +# distro: el8 +# image: registry.access.redhat.com/ubi8/ubi:8.4 +# python_package: python39 +# python_cmd: python3.9 +# pip_cmd: pip3.9 +# pool: ${{ arch.pool }} +# Red Hat Universal Base Image 9 ${{ arch.name }}: +# artifact: rpm-ubi9-${{ arch.value }} +# distro: el9 +# image: registry.access.redhat.com/ubi9/ubi:9.0.0 +# python_package: python3.9 +# python_cmd: python3.9 +# pip_cmd: pip3.9 +# pool: ${{ arch.pool }} +# Fedora 36 ${{ arch.name }}: +# artifact: rpm-fedora36-${{ arch.value }} +# distro: fc36 +# image: fedora:36 +# python_package: python3 +# python_cmd: python3 +# pip_cmd: pip3 +# pool: ${{ arch.pool }} +# steps: +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Build Artifacts' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' +# artifactName: $(artifact) +# +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# +# - bash: | +# set -ex +# +# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` +# RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.${DISTRO}.*.rpm" -printf '%f\n') +# +# echo "== Test rpm package on ${IMAGE} ==" +# docker pull $IMAGE +# docker run --rm -e RPM_NAME=$RPM_NAME -e PYTHON_PACKAGE=${PYTHON_PACKAGE} -e PYTHON_CMD=${PYTHON_CMD} -e PIP_CMD=${PIP_CMD} -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh" +# +# displayName: 'Test Rpm Package' +# +#- job: BuildDebPackages +# displayName: Build Deb Packages +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# pool: +# name: $(pool) +# strategy: +# matrix: +# ${{ each arch in parameters.architectures }}: +# # https://wiki.ubuntu.com/Releases +# Bionic ${{ arch.name }}: +# # 18.04 +# deb_system: ubuntu +# distro: bionic +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# Focal ${{ arch.name }}: +# # 20.04 +# deb_system: ubuntu +# distro: focal +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# Jammy ${{ arch.name }}: +# # 22.04 +# deb_system: ubuntu +# distro: jammy +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# +# # https://wiki.debian.org/DebianReleases +# Buster ${{ arch.name }}: +# # 10 +# deb_system: debian +# distro: buster +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# Bullseye ${{ arch.name }}: +# # 11 +# deb_system: debian +# distro: bullseye +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# steps: +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# - task: Bash@3 +# displayName: 'Build $(deb_system) $(distro) $(arch) Package' +# inputs: +# targetType: 'filePath' +# filePath: scripts/release/debian/pipeline.sh +# env: +# DISTRO_BASE_IMAGE: $(deb_system):$(distro) +# +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: 'SBOM' +# inputs: +# BuildDropPath: $(Build.ArtifactStagingDirectory) +# +# - task: PublishPipelineArtifact@0 +# displayName: 'Publish Artifact: $(deb_system) $(distro) $(arch)' +# inputs: +# TargetPath: $(Build.ArtifactStagingDirectory) +# ArtifactName: $(deb_system)-$(distro)-$(arch) +# +#- job: TestDebPackages +# timeoutInMinutes: 120 +# displayName: Test Deb Packages +# dependsOn: +# - BuildDebPackages +# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) +# strategy: +# matrix: +# ${{ each arch in parameters.architectures }}: +# Focal ${{ arch.name }}: +# deb_system: ubuntu +# distro: focal +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# Jammy ${{ arch.name }}: +# deb_system: ubuntu +# distro: jammy +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# Buster ${{ arch.name }}: +# deb_system: debian +# distro: buster +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# Bullseye ${{ arch.name }}: +# deb_system: debian +# distro: bullseye +# arch: ${{ arch.value }} +# pool: ${{ arch.pool }} +# pool: +# name: $(pool) +# steps: +# - bash: ./scripts/ci/install_docker.sh +# displayName: Install Docker +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download Metadata' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' +# artifactName: metadata +# +# - task: DownloadPipelineArtifact@1 +# displayName: 'Download $(deb_system):$(distro) $(arch) Build' +# inputs: +# TargetPath: '$(Build.ArtifactStagingDirectory)/debian' +# artifactName: $(deb_system)-$(distro)-$(arch) +# +# - task: Bash@3 +# displayName: 'Test $(deb_system) $(distro) $(arch) Package' +# env: +# DISTRO_BASE_IMAGE: $(deb_system):$(distro) +# inputs: +# targetType: 'inline' +# script: | +# set -exv +# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` +# +# echo "== Test debian package on ${DISTRO} ==" +# docker pull ${DISTRO_BASE_IMAGE} +# docker run --rm -e DISTRO=${DISTRO} -e CLI_VERSION=$CLI_VERSION -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts -v $(pwd):/azure-cli ${DISTRO_BASE_IMAGE} /bin/bash "/azure-cli/scripts/release/debian/test_deb_in_docker.sh" +# +#- job: CheckStyle +# displayName: "Check CLI Style" +# timeoutInMinutes: 120 +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# - template: .azure-pipelines/templates/azdev_setup.yml +# - bash: | +# set -ev +# . env/bin/activate +# azdev style +# +#- job: CheckHeaders +# displayName: "Check License, History, and DocMap" +# +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# - template: .azure-pipelines/templates/azdev_setup.yml +# - bash: | +# set -ev +# . env/bin/activate +# azdev verify license +# azdev verify history +# azdev verify document-map +# +#- job: PerformanceCheck +# displayName: "PerformanceCheck" +# strategy: +# matrix: +# Python39: +# python.version: '3.9' +# Python310: +# python.version: '3.10' +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python $(python.version)' +# inputs: +# versionSpec: '$(python.version)' +# - template: .azure-pipelines/templates/azdev_setup.yml +# - bash: | +# set -ev +# . env/bin/activate +# azdev perf load-times +# displayName: "Load Performance" +# # - bash: | +# # set -ev +# # . env/bin/activate +# +# # azdev perf benchmark "version" "network vnet -h" "rest -h" "storage account" +# # displayName: "Execution Performance" +# +#- job: CheckLinter +# displayName: "Check CLI Linter" +# +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# - template: .azure-pipelines/templates/azdev_setup.yml +# - bash: | +# set -ev +# . env/bin/activate +# python scripts/ci/service_name.py +# if [[ "$(System.PullRequest.TargetBranch)" != "" ]]; then +# # If CI is set to shallow fetch, target branch should be expilictly fetched. +# git fetch origin --depth=1 $(System.PullRequest.TargetBranch) +# azdev linter --ci-exclusions --min-severity medium --repo=./ --src=HEAD --tgt=origin/$(System.PullRequest.TargetBranch) +# else +# azdev linter --ci-exclusions --min-severity medium +# fi +# +#- job: CodegenCoverage +# displayName: "Codegen Coverage" +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# - template: .azure-pipelines/templates/azdev_setup.yml +# - bash: | +# set -ev +# . env/bin/activate +# # clone azure-cli-extensions +# cd .. +# git clone --depth 1 -b main https://github.com/Azure/azure-cli-extensions.git ./azure-cli-extensions +# azdev extension repo add ./azure-cli-extensions +# azdev extension add "*" +# # Some extension will change the dependence, so run `azdev setup` again after all extensions installed. +# azdev setup -c $CLI_REPO_PATH -r ./azure-cli-extensions +# # CLI repo only +# azdev statistics list-command-table CLI --statistics-only +# # CLI + EXT repos +# azdev statistics list-command-table --statistics-only +# +#- job: VerifySphinxDocumentGenerator +# displayName: "Verify Sphinx Document Generator" +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# - bash: pip install --upgrade pip wheel +# displayName: "Install pip and wheel" +# - bash: ./scripts/ci/test_ref_doc.sh +# displayName: "Verify Sphinx Document Generator" + +- job: BreakingChangeCheck + displayName: "Breaking Change Check" pool: name: ${{ variables.ubuntu_pool }} steps: @@ -978,174 +1101,69 @@ jobs: - bash: | set -ev . env/bin/activate - azdev style - -- job: CheckHeaders - displayName: "Check License, History, and DocMap" - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - azdev verify license - azdev verify history - azdev verify document-map - -- job: PerformanceCheck - displayName: "PerformanceCheck" - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python $(python.version)' - inputs: - versionSpec: '$(python.version)' - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - azdev perf load-times - displayName: "Load Performance" - # - bash: | - # set -ev - # . env/bin/activate - - # azdev perf benchmark "version" "network vnet -h" "rest -h" "storage account" - # displayName: "Execution Performance" - -- job: CheckLinter - displayName: "Check CLI Linter" - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - python scripts/ci/service_name.py - if [[ "$(System.PullRequest.TargetBranch)" != "" ]]; then - # If CI is set to shallow fetch, target branch should be expilictly fetched. - git fetch origin --depth=1 $(System.PullRequest.TargetBranch) - azdev linter --ci-exclusions --min-severity medium --repo=./ --src=HEAD --tgt=origin/$(System.PullRequest.TargetBranch) - else - azdev linter --ci-exclusions --min-severity medium - fi - -- job: CodegenCoverage - displayName: "Codegen Coverage" - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - # clone azure-cli-extensions - cd .. - git clone --depth 1 -b main https://github.com/Azure/azure-cli-extensions.git ./azure-cli-extensions - azdev extension repo add ./azure-cli-extensions - azdev extension add "*" - # Some extension will change the dependence, so run `azdev setup` again after all extensions installed. - azdev setup -c $CLI_REPO_PATH -r ./azure-cli-extensions - # CLI repo only - azdev statistics list-command-table CLI --statistics-only - # CLI + EXT repos - azdev statistics list-command-table --statistics-only - -- job: VerifySphinxDocumentGenerator - displayName: "Verify Sphinx Document Generator" - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - bash: pip install --upgrade pip wheel - displayName: "Install pip and wheel" - - bash: ./scripts/ci/test_ref_doc.sh - displayName: "Verify Sphinx Document Generator" - -- job: NotifyCIErrors - dependsOn: - - CheckPullRequest - - RejectPullRequestToMasterBranch - - CredentialScanner - - PolicyCheck - - ExtractMetadata - - VerifyLinuxRequirements - - VerifyDarwinRequirements - - VerifyWindowsRequirements - - VerifyVersions - - BuildWindowsMSI - - TestWindowsMSI - - BuildDockerImage - - TestDockerImage - - BuildPythonWheel - - TestPythonWheel - - TestCore - - TestTelemetry - - IntegrationTestAgainstProfiles - - TestExtensionsLoading - - BuildHomebrewFormula - - TestHomebrewFormula - - TestHomebrewPackage - - BuildRpmPackageMariner - - BuildRpmPackages - - TestRpmPackage - - BuildDebPackages - - TestDebPackages - - CheckStyle - - CheckHeaders - - PerformanceCheck - - CheckLinter - - CodegenCoverage - - VerifySphinxDocumentGenerator - condition: and(failed(), in(variables['Build.Reason'], 'BatchedCI')) - displayName: Notify CI Errors - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - task: AzureCLI@2 - inputs: - azureSubscription: 'Azure CLI' - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - pip install requests - teams_api_url=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_URL_SECRET_NAME) --query value -otsv) - teams_api_key=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_KEY_SECRET_NAME) --query value -otsv) - echo "If any task fails, notify to teams channel" - python scripts/ci/notify_ci_errors.py $teams_api_url $teams_api_key $(TEAMS_CHANNEL_ID) - displayName: 'Notify To Teams Channel' + python scripts/ci/breaking_change_check.py + displayName: "Breaking Change Check" env: - BASE_URI: $(System.CollectionUri) - PROJECT_TYPE: $(System.TeamProject) - BUILD_ID: $(Build.BuildId) - JOB_ID: $(System.JobId) + PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) + +#- job: NotifyCIErrors +# dependsOn: +# - CheckPullRequest +# - RejectPullRequestToMasterBranch +# - CredentialScanner +# - PolicyCheck +# - ExtractMetadata +# - VerifyLinuxRequirements +# - VerifyDarwinRequirements +# - VerifyWindowsRequirements +# - VerifyVersions +# - BuildWindowsMSI +# - TestWindowsMSI +# - BuildDockerImage +# - TestDockerImage +# - BuildPythonWheel +# - TestPythonWheel +# - TestCore +# - TestTelemetry +# - IntegrationTestAgainstProfiles +# - TestExtensionsLoading +# - BuildHomebrewFormula +# - TestHomebrewFormula +# - TestHomebrewPackage +# - BuildRpmPackageMariner +# - BuildRpmPackages +# - TestRpmPackage +# - BuildDebPackages +# - TestDebPackages +# - CheckStyle +# - CheckHeaders +# - PerformanceCheck +# - CheckLinter +# - CodegenCoverage +# - VerifySphinxDocumentGenerator +# condition: and(failed(), in(variables['Build.Reason'], 'BatchedCI')) +# displayName: Notify CI Errors +# pool: +# name: ${{ variables.ubuntu_pool }} +# steps: +# - task: UsePythonVersion@0 +# displayName: 'Use Python 3.10' +# inputs: +# versionSpec: 3.10 +# - task: AzureCLI@2 +# inputs: +# azureSubscription: 'Azure CLI' +# scriptType: 'bash' +# scriptLocation: 'inlineScript' +# inlineScript: | +# pip install requests +# teams_api_url=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_URL_SECRET_NAME) --query value -otsv) +# teams_api_key=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_KEY_SECRET_NAME) --query value -otsv) +# echo "If any task fails, notify to teams channel" +# python scripts/ci/notify_ci_errors.py $teams_api_url $teams_api_key $(TEAMS_CHANNEL_ID) +# displayName: 'Notify To Teams Channel' +# env: +# BASE_URI: $(System.CollectionUri) +# PROJECT_TYPE: $(System.TeamProject) +# BUILD_ID: $(Build.BuildId) +# JOB_ID: $(System.JobId) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py new file mode 100644 index 00000000000..741d8b2cbfe --- /dev/null +++ b/scripts/ci/breaking_change_check.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +import logging +import os +import subprocess + +from azdev.utilities.path import get_cli_repo_path + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +logger.addHandler(ch) + +pull_request_number = os.environ.get('PULL_REQUEST_NUMBER', None) +base_meta_path = '/mnt/vss/_work/1/base_meta' +diff_meta_path = '/mnt/vss/_work/1/diff_meta' +output_path = '/mnt/vss/_work/1/output_meta' + + +def get_base_meta_files(): + cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] + print(cmd) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) + + +def get_diff_meta_files(): + # refs/remotes/pull/24765/merge + target_branch = f'refs/remotes/pull/{pull_request_number}/merge' + cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] + print(cmd) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) + + +def meta_diff(): + cmd = ['git', 'checkout', 'dev'] + print(cmd) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) + # list file in diff_meta_path + # for each file, run follow command + # cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', 'az_monitor_meta_before.json', '--diff-meta-file', 'az_monitor_meta_after.json', '--output-file', 'xxx', '--output-type', 'xxx'] + for file in os.listdir(diff_meta_path): + if file.endswith('.json'): + cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', os.path.join(base_meta_path, file), '--diff-meta-file', os.path.join(diff_meta_path, file), '--output-file', output_path] + print(cmd) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) + cmd = ['ls', '-al', output_path] + print(cmd) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) + + +def build_pipeline_result(): + pass + + +def get_pipeline_result(): + pass + + +def build_markdown_content(state, test_case, message, line, content): + if content == "": + content = f'|Type|Test Case|Error Message|Line|\n|---|---|---|---|\n' + content += f'|{state}|{test_case}|{message}|{line}|\n' + return content + + +def save_pipeline_result(pipeline_result): + # # save pipeline result to file + # # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/pipeline_result_3.8_latest_1.json + # filename = os.path.join(azdev_test_result_dir, f'pipeline_result_{python_version}_{profile}_{instance_idx}.json') + # with open(filename, 'w') as f: + # json.dump(pipeline_result, f, indent=4) + # logger.info(f"save pipeline result to file: {filename}") + pass + + +def main(): + logger.info("Start breaking change check ...\n") + get_base_meta_files() + get_diff_meta_files() + meta_diff() + + +if __name__ == '__main__': + main() \ No newline at end of file From 05595d53c75a53e9859d509bdd0ff3fa848e55cd Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 10 May 2023 17:19:43 +0800 Subject: [PATCH 09/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 41 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index 741d8b2cbfe..a985441e090 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -26,8 +26,9 @@ def get_base_meta_files(): cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) + # out = subprocess.run(cmd, capture_output=True) + # print(out.stdout) def get_diff_meta_files(): @@ -35,28 +36,30 @@ def get_diff_meta_files(): target_branch = f'refs/remotes/pull/{pull_request_number}/merge' cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) + # out = subprocess.run(cmd, capture_output=True) + # print(out.stdout) def meta_diff(): cmd = ['git', 'checkout', 'dev'] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) - # list file in diff_meta_path - # for each file, run follow command - # cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', 'az_monitor_meta_before.json', '--diff-meta-file', 'az_monitor_meta_after.json', '--output-file', 'xxx', '--output-type', 'xxx'] - for file in os.listdir(diff_meta_path): - if file.endswith('.json'): - cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', os.path.join(base_meta_path, file), '--diff-meta-file', os.path.join(diff_meta_path, file), '--output-file', output_path] - print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) - cmd = ['ls', '-al', output_path] - print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) + # out = subprocess.run(cmd, capture_output=True) + # print(out.stdout) + if os.path.exists(diff_meta_path): + for file in os.listdir(diff_meta_path): + if file.endswith('.json'): + cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', os.path.join(base_meta_path, file), '--diff-meta-file', os.path.join(diff_meta_path, file), '--output-file', output_path] + print(cmd) + subprocess.run(cmd) + # out = subprocess.run(cmd, capture_output=True) + # print(out.stdout) + cmd = ['ls', '-al', output_path] + print(cmd) + subprocess.run(cmd) + # out = subprocess.run(cmd, capture_output=True) + # print(out.stdout) def build_pipeline_result(): From 0dbbdd5780b1fa678fb6d237a6efbf442d551ea4 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 10:53:03 +0800 Subject: [PATCH 10/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index a985441e090..8672c689406 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -9,7 +9,7 @@ import os import subprocess -from azdev.utilities.path import get_cli_repo_path +from azdev.utilities.path import get_cli_repo_path, get_ext_repo_paths logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) @@ -24,6 +24,12 @@ def get_base_meta_files(): + cmd = ['git', 'checkout', 'dev'] + print(cmd) + subprocess.run(cmd) + cmd = ['azdev', 'setup', '--cli', get_cli_repo_path(), '--repo', get_ext_repo_paths()] + print(cmd) + subprocess.run(cmd) cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] print(cmd) subprocess.run(cmd) @@ -42,11 +48,6 @@ def get_diff_meta_files(): def meta_diff(): - cmd = ['git', 'checkout', 'dev'] - print(cmd) - subprocess.run(cmd) - # out = subprocess.run(cmd, capture_output=True) - # print(out.stdout) if os.path.exists(diff_meta_path): for file in os.listdir(diff_meta_path): if file.endswith('.json'): @@ -89,8 +90,8 @@ def save_pipeline_result(pipeline_result): def main(): logger.info("Start breaking change check ...\n") - get_base_meta_files() get_diff_meta_files() + get_base_meta_files() meta_diff() From 62c99d7db519d582cda4a6a741913354776f6cfc Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 10:58:23 +0800 Subject: [PATCH 11/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index 8672c689406..4bd70c15ff6 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -9,7 +9,7 @@ import os import subprocess -from azdev.utilities.path import get_cli_repo_path, get_ext_repo_paths +from azdev.utilities.path import get_cli_repo_path logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) @@ -27,7 +27,7 @@ def get_base_meta_files(): cmd = ['git', 'checkout', 'dev'] print(cmd) subprocess.run(cmd) - cmd = ['azdev', 'setup', '--cli', get_cli_repo_path(), '--repo', get_ext_repo_paths()] + cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] print(cmd) subprocess.run(cmd) cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] From 457b9c20e83dd91efba290ba57310d248ea5a761 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 11:34:57 +0800 Subject: [PATCH 12/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 73 +++++++++++++++++++---------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index 4bd70c15ff6..e02cd289529 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -5,6 +5,7 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- +import json import logging import os import subprocess @@ -18,6 +19,7 @@ logger.addHandler(ch) pull_request_number = os.environ.get('PULL_REQUEST_NUMBER', None) +job_name = os.environ.get('JOB_NAME', None) base_meta_path = '/mnt/vss/_work/1/base_meta' diff_meta_path = '/mnt/vss/_work/1/diff_meta' output_path = '/mnt/vss/_work/1/output_meta' @@ -26,15 +28,16 @@ def get_base_meta_files(): cmd = ['git', 'checkout', 'dev'] print(cmd) - subprocess.run(cmd) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] print(cmd) - subprocess.run(cmd) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] print(cmd) - subprocess.run(cmd) - # out = subprocess.run(cmd, capture_output=True) - # print(out.stdout) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) def get_diff_meta_files(): @@ -42,39 +45,58 @@ def get_diff_meta_files(): target_branch = f'refs/remotes/pull/{pull_request_number}/merge' cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] print(cmd) - subprocess.run(cmd) - # out = subprocess.run(cmd, capture_output=True) - # print(out.stdout) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) def meta_diff(): if os.path.exists(diff_meta_path): for file in os.listdir(diff_meta_path): if file.endswith('.json'): - cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', os.path.join(base_meta_path, file), '--diff-meta-file', os.path.join(diff_meta_path, file), '--output-file', output_path] + cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', os.path.join(base_meta_path, file), '--diff-meta-file', os.path.join(diff_meta_path, file), '--output-file', os.path.join(output_path, file)] print(cmd) - subprocess.run(cmd) - # out = subprocess.run(cmd, capture_output=True) - # print(out.stdout) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) cmd = ['ls', '-al', output_path] print(cmd) - subprocess.run(cmd) - # out = subprocess.run(cmd, capture_output=True) - # print(out.stdout) + out = subprocess.run(cmd, capture_output=True) + print(out.stdout) def build_pipeline_result(): - pass - - -def get_pipeline_result(): - pass - - -def build_markdown_content(state, test_case, message, line, content): + pipeline_result = { + "breaking_change_check": { + "Name": job_name, + "Details": [] + } + } + if pull_request_number != '$(System.PullRequest.PullRequestNumber)': + pipeline_result['pull_request_number'] = pull_request_number + return pipeline_result + + +def get_pipeline_result(pipeline_result): + if os.path.exists(output_path): + for file in os.listdir(output_path): + with open('example.json', 'r') as f: + items = json.load(f) + module = os.path.basename(file).split('.')[0].split('_')[1] + breaking_change = { + "Module": module, + "Status": "", + "Content": "" + } + for item in items: + breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) + pipeline_result['breaking_change_check']['Details'].append(breaking_change) + print(pipeline_result) + return pipeline_result + + +def build_markdown_content(cmd_name, is_break, rule_message, suggest_message, content): if content == "": - content = f'|Type|Test Case|Error Message|Line|\n|---|---|---|---|\n' - content += f'|{state}|{test_case}|{message}|{line}|\n' + content = f'|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n' + content += f'|{is_break}|{cmd_name}|{rule_message}|{suggest_message}|\n' return content @@ -93,6 +115,7 @@ def main(): get_diff_meta_files() get_base_meta_files() meta_diff() + get_pipeline_result() if __name__ == '__main__': From 1026c0c1f68bca99bcbb7cf61466d5928f6ee834 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 12:21:19 +0800 Subject: [PATCH 13/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index e02cd289529..a63e4e859c1 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -26,27 +26,23 @@ def get_base_meta_files(): - cmd = ['git', 'checkout', 'dev'] - print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) def get_diff_meta_files(): + cmd = ['git', 'checkout', 'dev'] + print(cmd) + subprocess.run(cmd) # refs/remotes/pull/24765/merge target_branch = f'refs/remotes/pull/{pull_request_number}/merge' cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) def meta_diff(): @@ -55,15 +51,13 @@ def meta_diff(): if file.endswith('.json'): cmd = ['azdev', 'command-change', 'meta-diff', '--base-meta-file', os.path.join(base_meta_path, file), '--diff-meta-file', os.path.join(diff_meta_path, file), '--output-file', os.path.join(output_path, file)] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) cmd = ['ls', '-al', output_path] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) + subprocess.run(cmd) -def build_pipeline_result(): +def get_pipeline_result(): pipeline_result = { "breaking_change_check": { "Name": job_name, @@ -72,10 +66,6 @@ def build_pipeline_result(): } if pull_request_number != '$(System.PullRequest.PullRequestNumber)': pipeline_result['pull_request_number'] = pull_request_number - return pipeline_result - - -def get_pipeline_result(pipeline_result): if os.path.exists(output_path): for file in os.listdir(output_path): with open('example.json', 'r') as f: From 01c0e35d2e4c704ea6b93974db42b6bd0bfa92d1 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 12:33:49 +0800 Subject: [PATCH 14/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 30 +++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index a63e4e859c1..42980e3b9a1 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -25,22 +25,36 @@ output_path = '/mnt/vss/_work/1/output_meta' -def get_base_meta_files(): - cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] +def get_diff_meta_files(): + cmd = ['git', 'checkout', 'dev'] print(cmd) subprocess.run(cmd) - cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] + cmd = ['git', 'checkout', 'azure-cli-2.48.1'] + print(cmd) + subprocess.run(cmd) + # refs/remotes/pull/24765/merge + target_branch = 'dev' + cmd = ['azdev', 'command-change', 'meta-export', '--src', 'azure-cli-2.48.1', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] print(cmd) subprocess.run(cmd) -def get_diff_meta_files(): - cmd = ['git', 'checkout', 'dev'] +# def get_diff_meta_files(): +# cmd = ['git', 'checkout', 'dev'] +# print(cmd) +# subprocess.run(cmd) +# # refs/remotes/pull/24765/merge +# target_branch = f'refs/remotes/pull/{pull_request_number}/merge' +# cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] +# print(cmd) +# subprocess.run(cmd) + + +def get_base_meta_files(): + cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] print(cmd) subprocess.run(cmd) - # refs/remotes/pull/24765/merge - target_branch = f'refs/remotes/pull/{pull_request_number}/merge' - cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] + cmd = ['azdev', 'command-change', 'meta-export', 'CLI', '--meta-output-path', base_meta_path] print(cmd) subprocess.run(cmd) From 5a572a63e7d293740e3496103d9b969a3969f25b Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 12:51:17 +0800 Subject: [PATCH 15/68] update --- azure-pipelines.yml | 1 + scripts/ci/breaking_change_check.py | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 933f3b2bffe..f32cc8b50b0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1105,6 +1105,7 @@ jobs: displayName: "Breaking Change Check" env: PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) + JOB_NAME: $(System.JobName) #- job: NotifyCIErrors # dependsOn: diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index 42980e3b9a1..67bf6786051 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -29,6 +29,9 @@ def get_diff_meta_files(): cmd = ['git', 'checkout', 'dev'] print(cmd) subprocess.run(cmd) + cmd = ['git', 'fetch', '--all', '--tags', '--prune'] + print(cmd) + subprocess.run(cmd) cmd = ['git', 'checkout', 'azure-cli-2.48.1'] print(cmd) subprocess.run(cmd) @@ -82,7 +85,7 @@ def get_pipeline_result(): pipeline_result['pull_request_number'] = pull_request_number if os.path.exists(output_path): for file in os.listdir(output_path): - with open('example.json', 'r') as f: + with open(file, 'r') as f: items = json.load(f) module = os.path.basename(file).split('.')[0].split('_')[1] breaking_change = { @@ -115,11 +118,12 @@ def save_pipeline_result(pipeline_result): def main(): - logger.info("Start breaking change check ...\n") - get_diff_meta_files() - get_base_meta_files() - meta_diff() - get_pipeline_result() + if pull_request_number != '$(System.PullRequest.PullRequestNumber)': + logger.info("Start breaking change check ...\n") + get_diff_meta_files() + get_base_meta_files() + meta_diff() + get_pipeline_result() if __name__ == '__main__': From 77de4625aef8078a16b2c92a65faafb1e6b891b5 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 13:11:53 +0800 Subject: [PATCH 16/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index 67bf6786051..2e3b5c36ee9 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -23,37 +23,48 @@ base_meta_path = '/mnt/vss/_work/1/base_meta' diff_meta_path = '/mnt/vss/_work/1/diff_meta' output_path = '/mnt/vss/_work/1/output_meta' +src_branch = 'azure-cli-2.48.1' +target_branch = 'dev' +# src_branch = 'dev' +# refs/remotes/pull/24765/merge +# target_branch = f'refs/remotes/pull/{pull_request_number}/merge' def get_diff_meta_files(): - cmd = ['git', 'checkout', 'dev'] + cmd = ['git', 'fetch', '--all', '--tags', '--prune'] print(cmd) subprocess.run(cmd) - cmd = ['git', 'fetch', '--all', '--tags', '--prune'] + cmd = ['git', 'checkout', src_branch] print(cmd) subprocess.run(cmd) - cmd = ['git', 'checkout', 'azure-cli-2.48.1'] + cmd = ['git', 'checkout', target_branch] + print(cmd) + subprocess.run(cmd) + cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] print(cmd) subprocess.run(cmd) # refs/remotes/pull/24765/merge - target_branch = 'dev' cmd = ['azdev', 'command-change', 'meta-export', '--src', 'azure-cli-2.48.1', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] print(cmd) subprocess.run(cmd) # def get_diff_meta_files(): -# cmd = ['git', 'checkout', 'dev'] +# cmd = ['git', 'checkout', src_branch] +# print(cmd) +# subprocess.run(cmd) +# cmd = ['git', 'checkout', target_branch] # print(cmd) # subprocess.run(cmd) -# # refs/remotes/pull/24765/merge -# target_branch = f'refs/remotes/pull/{pull_request_number}/merge' # cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] # print(cmd) # subprocess.run(cmd) def get_base_meta_files(): + cmd = ['git', 'checkout', src_branch] + print(cmd) + subprocess.run(cmd) cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] print(cmd) subprocess.run(cmd) From ad78b1eedb44ece9f401d315d6c6f604bf9b3bb2 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 13:25:42 +0800 Subject: [PATCH 17/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index 2e3b5c36ee9..b42dfebb490 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -96,7 +96,7 @@ def get_pipeline_result(): pipeline_result['pull_request_number'] = pull_request_number if os.path.exists(output_path): for file in os.listdir(output_path): - with open(file, 'r') as f: + with open(os.path.join(output_path, file), 'r') as f: items = json.load(f) module = os.path.basename(file).split('.')[0].split('_')[1] breaking_change = { From 6bdbee756fa7ec8a23c133f328b4d5686a828515 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 14:22:21 +0800 Subject: [PATCH 18/68] update --- azure-pipelines.yml | 3 ++- scripts/ci/breaking_change_check.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index f32cc8b50b0..abc482c1249 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1105,7 +1105,8 @@ jobs: displayName: "Breaking Change Check" env: PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) - JOB_NAME: $(System.JobName) + JOB_NAME: "breaking_change_check" + BASE_BRANCH: $(Build.SourceBranchName) #- job: NotifyCIErrors # dependsOn: diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index b42dfebb490..a341babf9f1 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -20,6 +20,8 @@ pull_request_number = os.environ.get('PULL_REQUEST_NUMBER', None) job_name = os.environ.get('JOB_NAME', None) +base_branch = os.environ.get('BASE_BRANCH', None) +print('base_branch: ', base_branch) base_meta_path = '/mnt/vss/_work/1/base_meta' diff_meta_path = '/mnt/vss/_work/1/diff_meta' output_path = '/mnt/vss/_work/1/output_meta' @@ -107,7 +109,7 @@ def get_pipeline_result(): for item in items: breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) pipeline_result['breaking_change_check']['Details'].append(breaking_change) - print(pipeline_result) + print(json.dumps(pipeline_result, indent=2)) return pipeline_result From 03ec32241fe3db17c5a081ae8bd06608db2c54ad Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 14:44:11 +0800 Subject: [PATCH 19/68] update --- azure-pipelines.yml | 2 +- scripts/ci/breaking_change_check.py | 33 ++++++++++++++++------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index abc482c1249..36e8b2fd1e7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1104,9 +1104,9 @@ jobs: python scripts/ci/breaking_change_check.py displayName: "Breaking Change Check" env: + SRC_BRANCH: $(system.pullRequest.targetBranchName) PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) JOB_NAME: "breaking_change_check" - BASE_BRANCH: $(Build.SourceBranchName) #- job: NotifyCIErrors # dependsOn: diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index a341babf9f1..7dd7f6da10e 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -20,16 +20,14 @@ pull_request_number = os.environ.get('PULL_REQUEST_NUMBER', None) job_name = os.environ.get('JOB_NAME', None) -base_branch = os.environ.get('BASE_BRANCH', None) -print('base_branch: ', base_branch) -base_meta_path = '/mnt/vss/_work/1/base_meta' -diff_meta_path = '/mnt/vss/_work/1/diff_meta' -output_path = '/mnt/vss/_work/1/output_meta' src_branch = 'azure-cli-2.48.1' target_branch = 'dev' -# src_branch = 'dev' +# src_branch = os.environ.get('SRC_BRANCH', None) # refs/remotes/pull/24765/merge # target_branch = f'refs/remotes/pull/{pull_request_number}/merge' +base_meta_path = '/mnt/vss/_work/1/base_meta' +diff_meta_path = '/mnt/vss/_work/1/diff_meta' +output_path = '/mnt/vss/_work/1/output_meta' def get_diff_meta_files(): @@ -100,15 +98,20 @@ def get_pipeline_result(): for file in os.listdir(output_path): with open(os.path.join(output_path, file), 'r') as f: items = json.load(f) - module = os.path.basename(file).split('.')[0].split('_')[1] - breaking_change = { - "Module": module, - "Status": "", - "Content": "" - } - for item in items: - breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) - pipeline_result['breaking_change_check']['Details'].append(breaking_change) + if items: + module = os.path.basename(file).split('.')[0].split('_')[1] + breaking_change = { + "Module": module, + "Status": "", + "Content": "" + } + status = 'Warning' + for item in items: + if item['is_break'] == 'Yes': + status = 'Fail' + breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) + breaking_change['Status'] = status + pipeline_result['breaking_change_check']['Details'].append(breaking_change) print(json.dumps(pipeline_result, indent=2)) return pipeline_result From d0ad1fc0f7e02af2efbde1d5cbeeb7b764e7387c Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 15:22:50 +0800 Subject: [PATCH 20/68] Update breaking_change_check.py --- scripts/ci/breaking_change_check.py | 30 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index 7dd7f6da10e..ce4dbeb605f 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -96,22 +96,24 @@ def get_pipeline_result(): pipeline_result['pull_request_number'] = pull_request_number if os.path.exists(output_path): for file in os.listdir(output_path): + # skip empty file + if not os.path.getsize(os.path.join(output_path, file)): + continue with open(os.path.join(output_path, file), 'r') as f: items = json.load(f) - if items: - module = os.path.basename(file).split('.')[0].split('_')[1] - breaking_change = { - "Module": module, - "Status": "", - "Content": "" - } - status = 'Warning' - for item in items: - if item['is_break'] == 'Yes': - status = 'Fail' - breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) - breaking_change['Status'] = status - pipeline_result['breaking_change_check']['Details'].append(breaking_change) + module = os.path.basename(file).split('.')[0].split('_')[1] + breaking_change = { + "Module": module, + "Status": "", + "Content": "" + } + status = 'Warning' + for item in items: + if item['is_break'] == 'Yes': + status = 'Fail' + breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) + breaking_change['Status'] = status + pipeline_result['breaking_change_check']['Details'].append(breaking_change) print(json.dumps(pipeline_result, indent=2)) return pipeline_result From fc8a7eafd88a0bf2b211a8be075be482cb663674 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 15:30:57 +0800 Subject: [PATCH 21/68] update --- azure-pipelines.yml | 12 ++++++++++++ scripts/ci/breaking_change_check.py | 19 ++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 36e8b2fd1e7..ce8a9183f02 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1102,11 +1102,23 @@ jobs: set -ev . env/bin/activate python scripts/ci/breaking_change_check.py + breakingChangeCheck='false' + if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json' ]]; then + breakingChangeCheck='true' + fi + echo "##vso[task.setvariable variable=breakingChangeCheck]$breakingChangeCheck" displayName: "Breaking Change Check" env: SRC_BRANCH: $(system.pullRequest.targetBranchName) PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) JOB_NAME: "breaking_change_check" + - task: PublishBuildArtifacts@1 + condition: and(succeededOrFailed(), eq(variables.breakingChangeCheck, 'true')) + inputs: + # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json + PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json' + ArtifactName: 'breaking_change_check' + publishLocation: 'Container' #- job: NotifyCIErrors # dependsOn: diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_check.py index ce4dbeb605f..433145078a0 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_check.py @@ -20,6 +20,7 @@ pull_request_number = os.environ.get('PULL_REQUEST_NUMBER', None) job_name = os.environ.get('JOB_NAME', None) +azdev_test_result_dir = os.path.expanduser("~/.azdev/env_config/mnt/vss/_work/1/s/env") src_branch = 'azure-cli-2.48.1' target_branch = 'dev' # src_branch = os.environ.get('SRC_BRANCH', None) @@ -114,7 +115,7 @@ def get_pipeline_result(): breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) breaking_change['Status'] = status pipeline_result['breaking_change_check']['Details'].append(breaking_change) - print(json.dumps(pipeline_result, indent=2)) + print(json.dumps(pipeline_result, indent=4)) return pipeline_result @@ -126,13 +127,12 @@ def build_markdown_content(cmd_name, is_break, rule_message, suggest_message, co def save_pipeline_result(pipeline_result): - # # save pipeline result to file - # # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/pipeline_result_3.8_latest_1.json - # filename = os.path.join(azdev_test_result_dir, f'pipeline_result_{python_version}_{profile}_{instance_idx}.json') - # with open(filename, 'w') as f: - # json.dump(pipeline_result, f, indent=4) - # logger.info(f"save pipeline result to file: {filename}") - pass + # save pipeline result to file + # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json + filename = os.path.join(azdev_test_result_dir, f'breaking_change_check.json') + with open(filename, 'w') as f: + json.dump(pipeline_result, f, indent=4) + logger.info(f"save pipeline result to file: {filename}") def main(): @@ -141,7 +141,8 @@ def main(): get_diff_meta_files() get_base_meta_files() meta_diff() - get_pipeline_result() + pipeline_result = get_pipeline_result() + save_pipeline_result(pipeline_result) if __name__ == '__main__': From 3b480e372878e148833fa7435ab256b191d6aae6 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 16:57:40 +0800 Subject: [PATCH 22/68] update --- .azure-pipelines/breaking-change-tests.yml | 1146 +-------- azure-pipelines.yml | 2248 ++++++++--------- ...hange_check.py => breaking_change_test.py} | 10 +- 3 files changed, 1133 insertions(+), 2271 deletions(-) rename scripts/ci/{breaking_change_check.py => breaking_change_test.py} (96%) diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 0df1e528ecf..20d0557db57 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -1,11 +1,7 @@ resources: - repo: self -trigger: - batch: true - branches: - include: - - '*' +trigger: none pr: branches: @@ -15,160 +11,9 @@ pr: variables: - template: ${{ variables.Pipeline.Workspace }}/.azure-pipelines/templates/variables.yml -parameters: -- name: architectures - type: object - default: - - name: AMD64 - value: amd64 - pool: pool-ubuntu-2004 - - name: ARM64 - value: arm64 - pool: ubuntu-arm64-2004-pool - jobs: -- job: CheckPullRequest - displayName: "Check the Format of Pull Request Title and Content" - condition: and(succeeded(), in(variables['System.PullRequest.TargetBranch'], 'dev', 'release')) - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - bash: | - echo "Check Title of Pull Request: #$(System.PullRequest.PullRequestNumber)" - title=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.title') - echo $title - body=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.body') - echo $body - if [ "$(System.PullRequest.TargetBranch)" != "release" ] && echo $title | grep -iqF hotfix:; then - echo "Hotfix PR should target release branch." - exit 1 - fi - python scripts/ci/check_pull_request.py "$title" "$body" - -- job: RejectPullRequestToMasterBranch - displayName: "Reject Pull Request To Master Branch" - condition: and(succeeded(), eq(variables['System.PullRequest.TargetBranch'], 'master')) - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - bash: | - echo "Reject pull request directly to master branch" - exit 1 - -- job: CredentialScanner - displayName: "Credential Scanner" - pool: - name: ${{ variables.windows_pool }} - steps: - - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-credscan.CredScan@2 - displayName: 'Run Credential Scanner' - inputs: - toolMajorVersion: V2 - suppressionsFile: './scripts/ci/credscan/CredScanSuppressions.json' - toolVersionV2: '2.1.17' - - - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-postanalysis.PostAnalysis@1 - displayName: 'Post Analysis' - inputs: - AllTools: false - BinSkim: false - CredScan: true - PoliCheck: false - RoslynAnalyzers: false - TSLint: false - ToolLogsNotFoundAction: 'Standard' - -- job: PolicyCheck - displayName: "Policy Check" - pool: - name: ${{ variables.windows_pool }} - steps: - - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@2 - displayName: 'Run Policy Check' - inputs: - targetType: F - result: PoliCheckResult.xml - - - task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@2 - displayName: 'Post Analysis' - inputs: - GdnBreakAllTools: false - GdnBreakGdnToolPoliCheck: true - GdnBreakGdnToolPoliCheckSeverity: Error - -- job: ExtractMetadata - displayName: Extract Metadata - - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: Bash@3 - displayName: 'Extract Version' - inputs: - targetType: 'filePath' - filePath: scripts/release/get_version.sh - - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: metadata' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: metadata - -- job: VerifyLinuxRequirements - displayName: 'Verify src/azure-cli/requirements.*.Linux.txt' - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - bash: ./scripts/ci/dependency_check.sh - displayName: 'Verify src/azure-cli/requirements.py3.Linux.txt' - -- job: VerifyDarwinRequirements - displayName: 'Verify src/azure-cli/requirements.*.Darwin.txt' - condition: succeeded() - pool: - vmImage: 'macOS-12' - - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - bash: ./scripts/ci/dependency_check.sh - displayName: 'Verify src/azure-cli/requirements.py3.Darwin.txt' - -- job: VerifyWindowsRequirements - displayName: 'Verify src/azure-cli/requirements.*.Windows.txt' - condition: succeeded() - pool: - name: ${{ variables.windows_pool }} - - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - task: BatchScript@1 - inputs: - filename: ./scripts/ci/dependency_check.bat - displayName: 'Verify src/azure-cli/requirements.py3.Windows.txt' - -- job: VerifyVersions - displayName: Verify Command Module Versions - condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/release'), eq(variables['System.PullRequest.TargetBranch'], 'release'))) - +- job: BreakingChangeTest + displayName: "Breaking Change Test" pool: name: ${{ variables.ubuntu_pool }} steps: @@ -176,976 +21,25 @@ jobs: displayName: 'Use Python 3.10' inputs: versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml + - template: ${{ variables.Pipeline.Workspace }}/.azure-pipelines/templates/azdev_setup.yml - bash: | set -ev . env/bin/activate - azdev verify history - - displayName: 'Verify History' - -- job: BuildWindowsMSI - displayName: Build Windows MSI - - dependsOn: ExtractMetadata - condition: succeeded() - pool: - name: ${{ variables.windows_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - script: | - set /p CLI_VERSION=<$(System.ArtifactsDirectory)/metadata/version - set - - build_scripts/windows/scripts/build.cmd - displayName: 'Build Windows MSI' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: 'build_scripts/windows/out/' - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: MSI' - inputs: - TargetPath: 'build_scripts/windows/out/' - ArtifactName: msi - -- job: TestWindowsMSI - displayName: Test Windows MSI - - dependsOn: BuildWindowsMSI - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: ${{ variables.windows_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/msi' - artifactName: msi - - - task: PowerShell@2 - displayName: Install and Load CLI - inputs: - targetType: inline - script: | - if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { - # Start another Powershell process as Admin and execute this script again - $arguments = "& '" +$myinvocation.mycommand.definition + "'" - Start-Process powershell -Verb runAs -ArgumentList $arguments - # Stop if the PowerShell is not run as Admin - Break - } - # The following are executed by elevated PowerShell - az --version - - $InstallArgs = @( - "/i" - "`"$env:SYSTEM_ARTIFACTSDIRECTORY\msi\Microsoft Azure CLI.msi`"" - "/q" - "/norestart" - "/l*v" - ".\install_logs.txt" - ) - $pre_installed_version=az version --query '\"azure-cli\"' -o tsv - $to_be_installed_version=Get-Content $(System.ArtifactsDirectory)/metadata/version - if ($pre_installed_version -eq $to_be_installed_version){ - # See https://docs.microsoft.com/windows/win32/msi/reinstallmode about options of REINSTALLMODE - $reinstall_option="REINSTALL=ALL REINSTALLMODE=emus" - $InstallArgs += $reinstall_option - } - Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow - $install_time=Measure-Command {Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow} | select -expand TotalSeconds - $installed_version=az version --query '\"azure-cli\"' -o tsv - if ($installed_version -ne $to_be_installed_version){ - echo "The MSI failed to install." - Exit 1 - } - echo 'Install time(seconds):' $install_time - az --version - # Test bundled pip with extension installation - az extension add -n rdbms-connect - az self-test - - Get-Content .\install_logs.txt - -- job: BuildDockerImage - displayName: Build Docker Image - - dependsOn: ExtractMetadata - condition: succeeded() - strategy: - matrix: - AMD64: - pool: ${{ variables.ubuntu_pool }} - artifactName: docker-amd64 - ARM64: - pool: ${{ variables.ubuntu_arm64_pool }} - artifactName: docker-arm64 - pool: - name: $(pool) - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: Bash@3 - displayName: 'Bash Script' - inputs: - targetType: 'filePath' - filePath: scripts/release/docker/pipeline.sh - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - DockerImagesToScan: 'clibuild$BUILD_BUILDNUMBER:latest' - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: docker image' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(artifactName) - -- job: TestDockerImage - displayName: Test Docker Image - - dependsOn: BuildDockerImage - condition: succeeded() - strategy: - matrix: - AMD64: - pool: ${{ variables.ubuntu_pool }} - artifactName: docker-amd64 - ARM64: - pool: ${{ variables.ubuntu_arm64_pool }} - artifactName: docker-arm64 - pool: - name: $(pool) - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Docker Image' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/docker' - artifactName: $(artifactName) - - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - bash: | - set -exv - - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - IMAGE_NAME=clibuild$BUILD_BUILDNUMBER:latest - TAR_FILE=$SYSTEM_ARTIFACTSDIRECTORY/docker/docker-azure-cli-$CLI_VERSION.tar - - echo "== Test docker image ==" - - docker load < $TAR_FILE - docker run $IMAGE_NAME /bin/bash -c "time az self-test && time az --version && sleep 5" - displayName: 'Bash Script' - -- job: BuildPythonWheel - displayName: Build Python Wheels - - dependsOn: ExtractMetadata - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - - - script: | - if [[ "$(Build.Reason)" == "PullRequest" ]]; then - branch=$(System.PullRequest.TargetBranch) - else - branch=$(Build.SourceBranchName) + python scripts/ci/breaking_change_test.py + breakingChangeTest='false' + if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then + breakingChangeTest='true' fi - scripts/release/pypi/build.sh $branch - displayName: 'Run Wheel Build Script' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: pypi' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: pypi - -- job: TestPythonWheel - displayName: Test Python Wheels - - dependsOn: BuildPythonWheel - condition: succeeded() - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download PyPI Packages' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/pypi' - artifactName: pypi - - - - bash: | - #!/usr/bin/env bash - - # Verify the pip wheels - - set -ex - - CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` - PYPI_FILES=$(cd $BUILD_ARTIFACTSTAGINGDIRECTORY/pypi; pwd) - - echo "== Testing pip install on Python 3.7 ==" - docker run \ - --rm -v $PYPI_FILES:/mnt/pypi python:3.7 \ - /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - - echo "== Testing pip install on Python 3.9 ==" - docker run \ - --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ - /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - - echo "== Testing pip install on Python 3.10 ==" - docker run \ - --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ - /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - - displayName: 'Test pip Install' - -- job: TestCore - displayName: Unit Test for Core - timeoutInMinutes: 10 - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - steps: - - template: .azure-pipelines/templates/automation_test.yml - parameters: - pythonVersion: '$(python.version)' - module: 'azure-cli-core' - -- job: TestTelemetry - displayName: Unit Test for Telemetry - timeoutInMinutes: 10 - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - steps: - - template: .azure-pipelines/templates/automation_test.yml - parameters: - pythonVersion: '$(python.version)' - module: 'azure-cli-telemetry' - -- job: IntegrationTestAgainstProfiles - displayName: Integration Test against Profiles - dependsOn: BuildPythonWheel - condition: succeeded() - timeoutInMinutes: 20 - - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python $(python.version)' - inputs: - versionSpec: '$(python.version)' - - bash: pip install --upgrade pip wheel - displayName: 'Install pip and wheel' - - bash: ./scripts/ci/test_profile_integration.sh - displayName: 'Run Integration Test against Profiles' - -- job: TestExtensionsLoading - displayName: Test Extensions Loading - condition: succeeded() - timeoutInMinutes: 40 - - pool: - name: ${{ variables.ubuntu_pool }} - strategy: - matrix: - Python310: - python.version: '3.10' - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python $(python.version)' - inputs: - versionSpec: '$(python.version)' - - bash: pip install --upgrade pip wheel - displayName: 'Install pip and wheel' - - bash: ./scripts/ci/test_extensions.sh - displayName: 'Load extensions' - -- job: BuildHomebrewFormula - displayName: Build Homebrew Formula - - dependsOn: BuildPythonWheel - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - bash: | - #!/bin/bash - - root=$(cd $(dirname $0); pwd) - - set -evx - - CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` - HOMEBREW_UPSTREAM_URL=`curl -Ls -o /dev/null -w %{url_effective} https://api.github.com/repos/Azure/azure-cli/tarball/$BUILD_SOURCEVERSION` - - docker_files=$(cd $BUILD_SOURCESDIRECTORY/scripts/release/homebrew/docker; pwd) - src_files=$(cd $BUILD_SOURCESDIRECTORY/src; pwd) - - echo "Generating formula in docker container ... " - docker run -v $docker_files:/mnt/scripts \ - -v $src_files:/mnt/src \ - -e CLI_VERSION=$CLI_VERSION \ - -e HOMEBREW_UPSTREAM_URL=$HOMEBREW_UPSTREAM_URL \ - --name azurecli \ - python:3.10 \ - /mnt/scripts/run.sh - - # clean up - rm -rf $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata - - docker cp azurecli:azure-cli.rb $BUILD_ARTIFACTSTAGINGDIRECTORY/azure-cli.rb - docker rm --force azurecli - displayName: 'Build homebrew formula' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: homebrew' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: homebrew - -- job: TestHomebrewFormula - displayName: Test Homebrew Formula - - dependsOn: BuildHomebrewFormula - condition: succeeded() - pool: - vmImage: 'macOS-12' - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Homebrew' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' - artifactName: homebrew - - - - bash: | - set -ev - - echo == Remove pre-installed azure-cli == - brew uninstall azure-cli - - echo == Install azure-cli.rb formula == - brew install --build-from-source $SYSTEM_ARTIFACTSDIRECTORY/homebrew/azure-cli.rb - - echo == Az Version == - az --version - - echo == Run Self-Test == - az self-test - - displayName: 'Bash Script' - -- job: TestHomebrewPackage - displayName: Test Homebrew Package - timeoutInMinutes: 180 - dependsOn: BuildHomebrewFormula - # condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - condition: false - pool: - vmImage: 'macOS-12' - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' - artifactName: homebrew - - - - bash: ./scripts/release/homebrew/test_homebrew_package.sh - - - displayName: 'Test Homebrew Package' - - -- job: BuildRpmPackageMariner - displayName: Build Rpm Package Mariner - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - strategy: - matrix: - 2.0 AMD64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-amd64 - pool: ${{ variables.ubuntu_pool }} - 2.0 ARM64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-arm64 - pool: ${{ variables.ubuntu_arm64_pool }} - pool: - name: $(pool) - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - task: Bash@3 - displayName: 'Build Rpm Package: Mariner' - inputs: - targetType: 'filePath' - filePath: scripts/release/rpm/pipeline_mariner.sh - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: rpm-mariner' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(artifact) - -- job: TestRpmPackageMariner - displayName: Test Rpm Package Mariner - timeoutInMinutes: 120 - dependsOn: - - BuildRpmPackageMariner - - ExtractMetadata - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - 2.0 AMD64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-amd64 - pool: ${{ variables.ubuntu_pool }} - 2.0 ARM64: - image: mcr.microsoft.com/cbl-mariner/base/core:2.0 - artifact: rpm-mariner2.0-arm64 - pool: ${{ variables.ubuntu_arm64_pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' - artifactName: $(artifact) - - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - bash: | - set -ex - - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.cm2.*.rpm" -printf '%f\n') - - echo "== Test rpm package on ${IMAGE} ==" - docker pull $IMAGE - docker run --rm -e RPM_NAME=$RPM_NAME -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_mariner_in_docker.sh" - - displayName: 'Test Rpm Package Mariner' - -# TODO: rpmbuild on Red Hat UBI 8 is slow for unknown reason. Still working with Red Hat to investigate. -- job: BuildRpmPackages - displayName: Build Rpm Packages - # Do not run this job for Pull Requests due to the slowness - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - Red Hat Universal Base Image 8 ${{ arch.name }}: - dockerfile: ubi - image: registry.access.redhat.com/ubi8/ubi:8.4 - artifact: rpm-ubi8-${{ arch.value }} - python_package: python39 - pool: ${{ arch.pool }} - Red Hat Universal Base Image 9 ${{ arch.name }}: - dockerfile: ubi - image: registry.access.redhat.com/ubi9/ubi:9.0.0 - artifact: rpm-ubi9-${{ arch.value }} - python_package: python3.9 - pool: ${{ arch.pool }} - Fedora 36 ${{ arch.name }}: - dockerfile: fedora - image: fedora:36 - artifact: rpm-fedora36-${{ arch.value }} - python_package: python3 - pool: ${{ arch.pool }} - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: Bash@3 - displayName: 'Build Rpm Package' - inputs: - targetType: 'filePath' - filePath: scripts/release/rpm/pipeline.sh - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: rpm' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(artifact) - - -- job: TestRpmPackage - displayName: Test Rpm Package - timeoutInMinutes: 120 - dependsOn: - - BuildRpmPackages - - ExtractMetadata - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - Red Hat Universal Base Image 8 ${{ arch.name }}: - artifact: rpm-ubi8-${{ arch.value }} - distro: el8 - image: registry.access.redhat.com/ubi8/ubi:8.4 - python_package: python39 - python_cmd: python3.9 - pip_cmd: pip3.9 - pool: ${{ arch.pool }} - Red Hat Universal Base Image 9 ${{ arch.name }}: - artifact: rpm-ubi9-${{ arch.value }} - distro: el9 - image: registry.access.redhat.com/ubi9/ubi:9.0.0 - python_package: python3.9 - python_cmd: python3.9 - pip_cmd: pip3.9 - pool: ${{ arch.pool }} - Fedora 36 ${{ arch.name }}: - artifact: rpm-fedora36-${{ arch.value }} - distro: fc36 - image: fedora:36 - python_package: python3 - python_cmd: python3 - pip_cmd: pip3 - pool: ${{ arch.pool }} - steps: - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download Build Artifacts' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' - artifactName: $(artifact) - - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - - bash: | - set -ex - - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.${DISTRO}.*.rpm" -printf '%f\n') - - echo "== Test rpm package on ${IMAGE} ==" - docker pull $IMAGE - docker run --rm -e RPM_NAME=$RPM_NAME -e PYTHON_PACKAGE=${PYTHON_PACKAGE} -e PYTHON_CMD=${PYTHON_CMD} -e PIP_CMD=${PIP_CMD} -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh" - - displayName: 'Test Rpm Package' - -- job: BuildDebPackages - displayName: Build Deb Packages - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - pool: - name: $(pool) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - # https://wiki.ubuntu.com/Releases - Bionic ${{ arch.name }}: - # 18.04 - deb_system: ubuntu - distro: bionic - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Focal ${{ arch.name }}: - # 20.04 - deb_system: ubuntu - distro: focal - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Jammy ${{ arch.name }}: - # 22.04 - deb_system: ubuntu - distro: jammy - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - - # https://wiki.debian.org/DebianReleases - Buster ${{ arch.name }}: - # 10 - deb_system: debian - distro: buster - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Bullseye ${{ arch.name }}: - # 11 - deb_system: debian - distro: bullseye - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: Bash@3 - displayName: 'Build $(deb_system) $(distro) $(arch) Package' - inputs: - targetType: 'filePath' - filePath: scripts/release/debian/pipeline.sh - env: - DISTRO_BASE_IMAGE: $(deb_system):$(distro) - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'SBOM' - inputs: - BuildDropPath: $(Build.ArtifactStagingDirectory) - - - task: PublishPipelineArtifact@0 - displayName: 'Publish Artifact: $(deb_system) $(distro) $(arch)' - inputs: - TargetPath: $(Build.ArtifactStagingDirectory) - ArtifactName: $(deb_system)-$(distro)-$(arch) - -- job: TestDebPackages - timeoutInMinutes: 120 - displayName: Test Deb Packages - dependsOn: - - BuildDebPackages - condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) - strategy: - matrix: - ${{ each arch in parameters.architectures }}: - Focal ${{ arch.name }}: - deb_system: ubuntu - distro: focal - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Jammy ${{ arch.name }}: - deb_system: ubuntu - distro: jammy - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Buster ${{ arch.name }}: - deb_system: debian - distro: buster - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - Bullseye ${{ arch.name }}: - deb_system: debian - distro: bullseye - arch: ${{ arch.value }} - pool: ${{ arch.pool }} - pool: - name: $(pool) - steps: - - bash: ./scripts/ci/install_docker.sh - displayName: Install Docker - - task: DownloadPipelineArtifact@1 - displayName: 'Download Metadata' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' - artifactName: metadata - - - task: DownloadPipelineArtifact@1 - displayName: 'Download $(deb_system):$(distro) $(arch) Build' - inputs: - TargetPath: '$(Build.ArtifactStagingDirectory)/debian' - artifactName: $(deb_system)-$(distro)-$(arch) - - - task: Bash@3 - displayName: 'Test $(deb_system) $(distro) $(arch) Package' - env: - DISTRO_BASE_IMAGE: $(deb_system):$(distro) - inputs: - targetType: 'inline' - script: | - set -exv - CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - - echo "== Test debian package on ${DISTRO} ==" - docker pull ${DISTRO_BASE_IMAGE} - docker run --rm -e DISTRO=${DISTRO} -e CLI_VERSION=$CLI_VERSION -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts -v $(pwd):/azure-cli ${DISTRO_BASE_IMAGE} /bin/bash "/azure-cli/scripts/release/debian/test_deb_in_docker.sh" - -- job: CheckStyle - displayName: "Check CLI Style" - timeoutInMinutes: 120 - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - azdev style - -- job: CheckHeaders - displayName: "Check License, History, and DocMap" - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - azdev verify license - azdev verify history - azdev verify document-map - -- job: PerformanceCheck - displayName: "PerformanceCheck" - strategy: - matrix: - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python $(python.version)' - inputs: - versionSpec: '$(python.version)' - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - azdev perf load-times - displayName: "Load Performance" - # - bash: | - # set -ev - # . env/bin/activate - - # azdev perf benchmark "version" "network vnet -h" "rest -h" "storage account" - # displayName: "Execution Performance" - -- job: CheckLinter - displayName: "Check CLI Linter" - - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - python scripts/ci/service_name.py - if [[ "$(System.PullRequest.TargetBranch)" != "" ]]; then - # If CI is set to shallow fetch, target branch should be expilictly fetched. - git fetch origin --depth=1 $(System.PullRequest.TargetBranch) - azdev linter --ci-exclusions --min-severity medium --repo=./ --src=HEAD --tgt=origin/$(System.PullRequest.TargetBranch) - else - azdev linter --ci-exclusions --min-severity medium - fi - -- job: CodegenCoverage - displayName: "Codegen Coverage" - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - template: .azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - # clone azure-cli-extensions - cd .. - git clone --depth 1 -b main https://github.com/Azure/azure-cli-extensions.git ./azure-cli-extensions - azdev extension repo add ./azure-cli-extensions - azdev extension add "*" - # Some extension will change the dependence, so run `azdev setup` again after all extensions installed. - azdev setup -c $CLI_REPO_PATH -r ./azure-cli-extensions - # CLI repo only - azdev statistics list-command-table CLI --statistics-only - # CLI + EXT repos - azdev statistics list-command-table --statistics-only - -- job: VerifySphinxDocumentGenerator - displayName: "Verify Sphinx Document Generator" - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - bash: pip install --upgrade pip wheel - displayName: "Install pip and wheel" - - bash: ./scripts/ci/test_ref_doc.sh - displayName: "Verify Sphinx Document Generator" - -- job: NotifyCIErrors - dependsOn: - - CheckPullRequest - - RejectPullRequestToMasterBranch - - CredentialScanner - - PolicyCheck - - ExtractMetadata - - VerifyLinuxRequirements - - VerifyDarwinRequirements - - VerifyWindowsRequirements - - VerifyVersions - - BuildWindowsMSI - - TestWindowsMSI - - BuildDockerImage - - TestDockerImage - - BuildPythonWheel - - TestPythonWheel - - TestCore - - TestTelemetry - - IntegrationTestAgainstProfiles - - TestExtensionsLoading - - BuildHomebrewFormula - - TestHomebrewFormula - - TestHomebrewPackage - - BuildRpmPackageMariner - - BuildRpmPackages - - TestRpmPackage - - BuildDebPackages - - TestDebPackages - - CheckStyle - - CheckHeaders - - PerformanceCheck - - CheckLinter - - CodegenCoverage - - VerifySphinxDocumentGenerator - condition: and(failed(), in(variables['Build.Reason'], 'BatchedCI')) - displayName: Notify CI Errors - pool: - name: ${{ variables.ubuntu_pool }} - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' - inputs: - versionSpec: 3.10 - - task: AzureCLI@2 - inputs: - azureSubscription: 'Azure CLI' - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - pip install requests - teams_api_url=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_URL_SECRET_NAME) --query value -otsv) - teams_api_key=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_KEY_SECRET_NAME) --query value -otsv) - echo "If any task fails, notify to teams channel" - python scripts/ci/notify_ci_errors.py $teams_api_url $teams_api_key $(TEAMS_CHANNEL_ID) - displayName: 'Notify To Teams Channel' + echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" + displayName: "Breaking Change Test" env: - BASE_URI: $(System.CollectionUri) - PROJECT_TYPE: $(System.TeamProject) - BUILD_ID: $(Build.BuildId) - JOB_ID: $(System.JobId) + SRC_BRANCH: $(system.pullRequest.targetBranchName) + PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) + JOB_NAME: "breaking_change_test" + - task: PublishBuildArtifacts@1 + condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) + inputs: + # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json + PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' + ArtifactName: 'breaking_change_test' + publishLocation: 'Container' diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ce8a9183f02..dd3ae24e346 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -27,1069 +27,148 @@ parameters: pool: ubuntu-arm64-2004-pool jobs: -#- job: CheckPullRequest -# displayName: "Check the Format of Pull Request Title and Content" -# condition: and(succeeded(), in(variables['System.PullRequest.TargetBranch'], 'dev', 'release')) -# -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - bash: | -# echo "Check Title of Pull Request: #$(System.PullRequest.PullRequestNumber)" -# title=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.title') -# echo $title -# body=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.body') -# echo $body -# if [ "$(System.PullRequest.TargetBranch)" != "release" ] && echo $title | grep -iqF hotfix:; then -# echo "Hotfix PR should target release branch." -# exit 1 -# fi -# python scripts/ci/check_pull_request.py "$title" "$body" -# -#- job: RejectPullRequestToMasterBranch -# displayName: "Reject Pull Request To Master Branch" -# condition: and(succeeded(), eq(variables['System.PullRequest.TargetBranch'], 'master')) -# -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - bash: | -# echo "Reject pull request directly to master branch" -# exit 1 -# -#- job: CredentialScanner -# displayName: "Credential Scanner" -# pool: -# name: ${{ variables.windows_pool }} -# steps: -# - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-credscan.CredScan@2 -# displayName: 'Run Credential Scanner' -# inputs: -# toolMajorVersion: V2 -# suppressionsFile: './scripts/ci/credscan/CredScanSuppressions.json' -# toolVersionV2: '2.1.17' -# -# - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-postanalysis.PostAnalysis@1 -# displayName: 'Post Analysis' -# inputs: -# AllTools: false -# BinSkim: false -# CredScan: true -# PoliCheck: false -# RoslynAnalyzers: false -# TSLint: false -# ToolLogsNotFoundAction: 'Standard' -# -#- job: PolicyCheck -# displayName: "Policy Check" -# pool: -# name: ${{ variables.windows_pool }} -# steps: -# - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@2 -# displayName: 'Run Policy Check' -# inputs: -# targetType: F -# result: PoliCheckResult.xml -# -# - task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@2 -# displayName: 'Post Analysis' -# inputs: -# GdnBreakAllTools: false -# GdnBreakGdnToolPoliCheck: true -# GdnBreakGdnToolPoliCheckSeverity: Error -# -#- job: ExtractMetadata -# displayName: Extract Metadata -# -# condition: succeeded() -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: Bash@3 -# displayName: 'Extract Version' -# inputs: -# targetType: 'filePath' -# filePath: scripts/release/get_version.sh -# -# -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: metadata' -# inputs: -# TargetPath: $(Build.ArtifactStagingDirectory) -# ArtifactName: metadata -# -#- job: VerifyLinuxRequirements -# displayName: 'Verify src/azure-cli/requirements.*.Linux.txt' -# condition: succeeded() -# pool: -# name: ${{ variables.ubuntu_pool }} -# -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# -# - bash: ./scripts/ci/dependency_check.sh -# displayName: 'Verify src/azure-cli/requirements.py3.Linux.txt' -# -#- job: VerifyDarwinRequirements -# displayName: 'Verify src/azure-cli/requirements.*.Darwin.txt' -# condition: succeeded() -# pool: -# vmImage: 'macOS-12' -# -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# -# - bash: ./scripts/ci/dependency_check.sh -# displayName: 'Verify src/azure-cli/requirements.py3.Darwin.txt' -# -#- job: VerifyWindowsRequirements -# displayName: 'Verify src/azure-cli/requirements.*.Windows.txt' -# condition: succeeded() -# pool: -# name: ${{ variables.windows_pool }} -# -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# -# - task: BatchScript@1 -# inputs: -# filename: ./scripts/ci/dependency_check.bat -# displayName: 'Verify src/azure-cli/requirements.py3.Windows.txt' -# -#- job: VerifyVersions -# displayName: Verify Command Module Versions -# condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/release'), eq(variables['System.PullRequest.TargetBranch'], 'release'))) -# -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# - template: .azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# azdev verify history -# -# displayName: 'Verify History' -# -#- job: BuildWindowsMSI -# displayName: Build Windows MSI -# -# dependsOn: ExtractMetadata -# condition: succeeded() -# pool: -# name: ${{ variables.windows_pool }} -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Build Artifacts' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# -# - script: | -# set /p CLI_VERSION=<$(System.ArtifactsDirectory)/metadata/version -# set -# -# build_scripts/windows/scripts/build.cmd -# displayName: 'Build Windows MSI' -# -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: 'SBOM' -# inputs: -# BuildDropPath: 'build_scripts/windows/out/' -# -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: MSI' -# inputs: -# TargetPath: 'build_scripts/windows/out/' -# ArtifactName: msi -# -#- job: TestWindowsMSI -# displayName: Test Windows MSI -# -# dependsOn: BuildWindowsMSI -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# pool: -# name: ${{ variables.windows_pool }} -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Build Artifacts' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Build Artifacts' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/msi' -# artifactName: msi -# -# - task: PowerShell@2 -# displayName: Install and Load CLI -# inputs: -# targetType: inline -# script: | -# if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { -# # Start another Powershell process as Admin and execute this script again -# $arguments = "& '" +$myinvocation.mycommand.definition + "'" -# Start-Process powershell -Verb runAs -ArgumentList $arguments -# # Stop if the PowerShell is not run as Admin -# Break -# } -# # The following are executed by elevated PowerShell -# az --version -# -# $InstallArgs = @( -# "/i" -# "`"$env:SYSTEM_ARTIFACTSDIRECTORY\msi\Microsoft Azure CLI.msi`"" -# "/q" -# "/norestart" -# "/l*v" -# ".\install_logs.txt" -# ) -# $pre_installed_version=az version --query '\"azure-cli\"' -o tsv -# $to_be_installed_version=Get-Content $(System.ArtifactsDirectory)/metadata/version -# if ($pre_installed_version -eq $to_be_installed_version){ -# # See https://docs.microsoft.com/windows/win32/msi/reinstallmode about options of REINSTALLMODE -# $reinstall_option="REINSTALL=ALL REINSTALLMODE=emus" -# $InstallArgs += $reinstall_option -# } -# Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow -# $install_time=Measure-Command {Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow} | select -expand TotalSeconds -# $installed_version=az version --query '\"azure-cli\"' -o tsv -# if ($installed_version -ne $to_be_installed_version){ -# echo "The MSI failed to install." -# Exit 1 -# } -# echo 'Install time(seconds):' $install_time -# az --version -# # Test bundled pip with extension installation -# az extension add -n rdbms-connect -# az self-test -# -# Get-Content .\install_logs.txt -# -#- job: BuildDockerImage -# displayName: Build Docker Image -# -# dependsOn: ExtractMetadata -# condition: succeeded() -# strategy: -# matrix: -# AMD64: -# pool: ${{ variables.ubuntu_pool }} -# artifactName: docker-amd64 -# ARM64: -# pool: ${{ variables.ubuntu_arm64_pool }} -# artifactName: docker-arm64 -# pool: -# name: $(pool) -# steps: -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# - task: Bash@3 -# displayName: 'Bash Script' -# inputs: -# targetType: 'filePath' -# filePath: scripts/release/docker/pipeline.sh -# -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: 'SBOM' -# inputs: -# BuildDropPath: $(Build.ArtifactStagingDirectory) -# DockerImagesToScan: 'clibuild$BUILD_BUILDNUMBER:latest' -# -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: docker image' -# inputs: -# TargetPath: $(Build.ArtifactStagingDirectory) -# ArtifactName: $(artifactName) -# -#- job: TestDockerImage -# displayName: Test Docker Image -# -# dependsOn: BuildDockerImage -# condition: succeeded() -# strategy: -# matrix: -# AMD64: -# pool: ${{ variables.ubuntu_pool }} -# artifactName: docker-amd64 -# ARM64: -# pool: ${{ variables.ubuntu_arm64_pool }} -# artifactName: docker-arm64 -# pool: -# name: $(pool) -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Docker Image' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/docker' -# artifactName: $(artifactName) -# -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# -# - bash: | -# set -exv -# -# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` -# IMAGE_NAME=clibuild$BUILD_BUILDNUMBER:latest -# TAR_FILE=$SYSTEM_ARTIFACTSDIRECTORY/docker/docker-azure-cli-$CLI_VERSION.tar -# -# echo "== Test docker image ==" -# -# docker load < $TAR_FILE -# docker run $IMAGE_NAME /bin/bash -c "time az self-test && time az --version && sleep 5" -# displayName: 'Bash Script' -# -#- job: BuildPythonWheel -# displayName: Build Python Wheels -# -# dependsOn: ExtractMetadata -# condition: succeeded() -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# -# -# - script: | -# if [[ "$(Build.Reason)" == "PullRequest" ]]; then -# branch=$(System.PullRequest.TargetBranch) -# else -# branch=$(Build.SourceBranchName) -# fi -# scripts/release/pypi/build.sh $branch -# displayName: 'Run Wheel Build Script' -# -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: 'SBOM' -# inputs: -# BuildDropPath: $(Build.ArtifactStagingDirectory) -# -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: pypi' -# inputs: -# TargetPath: $(Build.ArtifactStagingDirectory) -# ArtifactName: pypi -# -#- job: TestPythonWheel -# displayName: Test Python Wheels -# -# dependsOn: BuildPythonWheel -# condition: succeeded() -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download PyPI Packages' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/pypi' -# artifactName: pypi -# -# -# - bash: | -# #!/usr/bin/env bash -# -# # Verify the pip wheels -# -# set -ex -# -# CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` -# PYPI_FILES=$(cd $BUILD_ARTIFACTSTAGINGDIRECTORY/pypi; pwd) -# -# echo "== Testing pip install on Python 3.7 ==" -# docker run \ -# --rm -v $PYPI_FILES:/mnt/pypi python:3.7 \ -# /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" -# -# echo "== Testing pip install on Python 3.9 ==" -# docker run \ -# --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ -# /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" -# -# echo "== Testing pip install on Python 3.10 ==" -# docker run \ -# --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ -# /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" -# -# displayName: 'Test pip Install' -# -#- job: TestCore -# displayName: Unit Test for Core -# timeoutInMinutes: 10 -# pool: -# name: ${{ variables.ubuntu_pool }} -# strategy: -# matrix: -# Python39: -# python.version: '3.9' -# Python310: -# python.version: '3.10' -# steps: -# - template: .azure-pipelines/templates/automation_test.yml -# parameters: -# pythonVersion: '$(python.version)' -# module: 'azure-cli-core' -# -#- job: TestTelemetry -# displayName: Unit Test for Telemetry -# timeoutInMinutes: 10 -# pool: -# name: ${{ variables.ubuntu_pool }} -# strategy: -# matrix: -# Python39: -# python.version: '3.9' -# Python310: -# python.version: '3.10' -# steps: -# - template: .azure-pipelines/templates/automation_test.yml -# parameters: -# pythonVersion: '$(python.version)' -# module: 'azure-cli-telemetry' -# -#- job: IntegrationTestAgainstProfiles -# displayName: Integration Test against Profiles -# dependsOn: BuildPythonWheel -# condition: succeeded() -# timeoutInMinutes: 20 -# -# pool: -# name: ${{ variables.ubuntu_pool }} -# strategy: -# matrix: -# Python39: -# python.version: '3.9' -# Python310: -# python.version: '3.10' -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python $(python.version)' -# inputs: -# versionSpec: '$(python.version)' -# - bash: pip install --upgrade pip wheel -# displayName: 'Install pip and wheel' -# - bash: ./scripts/ci/test_profile_integration.sh -# displayName: 'Run Integration Test against Profiles' -# -#- job: TestExtensionsLoading -# displayName: Test Extensions Loading -# condition: succeeded() -# timeoutInMinutes: 40 -# -# pool: -# name: ${{ variables.ubuntu_pool }} -# strategy: -# matrix: -# Python310: -# python.version: '3.10' -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python $(python.version)' -# inputs: -# versionSpec: '$(python.version)' -# - bash: pip install --upgrade pip wheel -# displayName: 'Install pip and wheel' -# - bash: ./scripts/ci/test_extensions.sh -# displayName: 'Load extensions' -# -#- job: BuildHomebrewFormula -# displayName: Build Homebrew Formula -# -# dependsOn: BuildPythonWheel -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# - bash: | -# #!/bin/bash -# -# root=$(cd $(dirname $0); pwd) -# -# set -evx -# -# CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` -# HOMEBREW_UPSTREAM_URL=`curl -Ls -o /dev/null -w %{url_effective} https://api.github.com/repos/Azure/azure-cli/tarball/$BUILD_SOURCEVERSION` -# -# docker_files=$(cd $BUILD_SOURCESDIRECTORY/scripts/release/homebrew/docker; pwd) -# src_files=$(cd $BUILD_SOURCESDIRECTORY/src; pwd) -# -# echo "Generating formula in docker container ... " -# docker run -v $docker_files:/mnt/scripts \ -# -v $src_files:/mnt/src \ -# -e CLI_VERSION=$CLI_VERSION \ -# -e HOMEBREW_UPSTREAM_URL=$HOMEBREW_UPSTREAM_URL \ -# --name azurecli \ -# python:3.10 \ -# /mnt/scripts/run.sh -# -# # clean up -# rm -rf $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata -# -# docker cp azurecli:azure-cli.rb $BUILD_ARTIFACTSTAGINGDIRECTORY/azure-cli.rb -# docker rm --force azurecli -# displayName: 'Build homebrew formula' -# -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: 'SBOM' -# inputs: -# BuildDropPath: $(Build.ArtifactStagingDirectory) -# -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: homebrew' -# inputs: -# TargetPath: $(Build.ArtifactStagingDirectory) -# ArtifactName: homebrew -# -#- job: TestHomebrewFormula -# displayName: Test Homebrew Formula -# -# dependsOn: BuildHomebrewFormula -# condition: succeeded() -# pool: -# vmImage: 'macOS-12' -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Homebrew' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' -# artifactName: homebrew -# -# -# - bash: | -# set -ev -# -# echo == Remove pre-installed azure-cli == -# brew uninstall azure-cli -# -# echo == Install azure-cli.rb formula == -# brew install --build-from-source $SYSTEM_ARTIFACTSDIRECTORY/homebrew/azure-cli.rb -# -# echo == Az Version == -# az --version -# -# echo == Run Self-Test == -# az self-test -# -# displayName: 'Bash Script' -# -#- job: TestHomebrewPackage -# displayName: Test Homebrew Package -# timeoutInMinutes: 180 -# dependsOn: BuildHomebrewFormula -# # condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# condition: false -# pool: -# vmImage: 'macOS-12' -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Build Artifacts' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' -# artifactName: homebrew -# -# -# - bash: ./scripts/release/homebrew/test_homebrew_package.sh -# -# -# displayName: 'Test Homebrew Package' -# -# -#- job: BuildRpmPackageMariner -# displayName: Build Rpm Package Mariner -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# strategy: -# matrix: -# 2.0 AMD64: -# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 -# artifact: rpm-mariner2.0-amd64 -# pool: ${{ variables.ubuntu_pool }} -# 2.0 ARM64: -# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 -# artifact: rpm-mariner2.0-arm64 -# pool: ${{ variables.ubuntu_arm64_pool }} -# pool: -# name: $(pool) -# steps: -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# -# - task: Bash@3 -# displayName: 'Build Rpm Package: Mariner' -# inputs: -# targetType: 'filePath' -# filePath: scripts/release/rpm/pipeline_mariner.sh -# -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: 'SBOM' -# inputs: -# BuildDropPath: $(Build.ArtifactStagingDirectory) -# -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: rpm-mariner' -# inputs: -# TargetPath: $(Build.ArtifactStagingDirectory) -# ArtifactName: $(artifact) -# -#- job: TestRpmPackageMariner -# displayName: Test Rpm Package Mariner -# timeoutInMinutes: 120 -# dependsOn: -# - BuildRpmPackageMariner -# - ExtractMetadata -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# pool: -# name: $(pool) -# strategy: -# matrix: -# 2.0 AMD64: -# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 -# artifact: rpm-mariner2.0-amd64 -# pool: ${{ variables.ubuntu_pool }} -# 2.0 ARM64: -# image: mcr.microsoft.com/cbl-mariner/base/core:2.0 -# artifact: rpm-mariner2.0-arm64 -# pool: ${{ variables.ubuntu_arm64_pool }} -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Build Artifacts' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' -# artifactName: $(artifact) -# -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# -# - bash: | -# set -ex -# -# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` -# RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.cm2.*.rpm" -printf '%f\n') -# -# echo "== Test rpm package on ${IMAGE} ==" -# docker pull $IMAGE -# docker run --rm -e RPM_NAME=$RPM_NAME -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_mariner_in_docker.sh" -# -# displayName: 'Test Rpm Package Mariner' -# -## TODO: rpmbuild on Red Hat UBI 8 is slow for unknown reason. Still working with Red Hat to investigate. -#- job: BuildRpmPackages -# displayName: Build Rpm Packages -# # Do not run this job for Pull Requests due to the slowness -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# pool: -# name: $(pool) -# strategy: -# matrix: -# ${{ each arch in parameters.architectures }}: -# Red Hat Universal Base Image 8 ${{ arch.name }}: -# dockerfile: ubi -# image: registry.access.redhat.com/ubi8/ubi:8.4 -# artifact: rpm-ubi8-${{ arch.value }} -# python_package: python39 -# pool: ${{ arch.pool }} -# Red Hat Universal Base Image 9 ${{ arch.name }}: -# dockerfile: ubi -# image: registry.access.redhat.com/ubi9/ubi:9.0.0 -# artifact: rpm-ubi9-${{ arch.value }} -# python_package: python3.9 -# pool: ${{ arch.pool }} -# Fedora 36 ${{ arch.name }}: -# dockerfile: fedora -# image: fedora:36 -# artifact: rpm-fedora36-${{ arch.value }} -# python_package: python3 -# pool: ${{ arch.pool }} -# steps: -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# - task: Bash@3 -# displayName: 'Build Rpm Package' -# inputs: -# targetType: 'filePath' -# filePath: scripts/release/rpm/pipeline.sh -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: 'SBOM' -# inputs: -# BuildDropPath: $(Build.ArtifactStagingDirectory) -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: rpm' -# inputs: -# TargetPath: $(Build.ArtifactStagingDirectory) -# ArtifactName: $(artifact) -# -# -#- job: TestRpmPackage -# displayName: Test Rpm Package -# timeoutInMinutes: 120 -# dependsOn: -# - BuildRpmPackages -# - ExtractMetadata -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# pool: -# name: $(pool) -# strategy: -# matrix: -# ${{ each arch in parameters.architectures }}: -# Red Hat Universal Base Image 8 ${{ arch.name }}: -# artifact: rpm-ubi8-${{ arch.value }} -# distro: el8 -# image: registry.access.redhat.com/ubi8/ubi:8.4 -# python_package: python39 -# python_cmd: python3.9 -# pip_cmd: pip3.9 -# pool: ${{ arch.pool }} -# Red Hat Universal Base Image 9 ${{ arch.name }}: -# artifact: rpm-ubi9-${{ arch.value }} -# distro: el9 -# image: registry.access.redhat.com/ubi9/ubi:9.0.0 -# python_package: python3.9 -# python_cmd: python3.9 -# pip_cmd: pip3.9 -# pool: ${{ arch.pool }} -# Fedora 36 ${{ arch.name }}: -# artifact: rpm-fedora36-${{ arch.value }} -# distro: fc36 -# image: fedora:36 -# python_package: python3 -# python_cmd: python3 -# pip_cmd: pip3 -# pool: ${{ arch.pool }} -# steps: -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Build Artifacts' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' -# artifactName: $(artifact) -# -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# -# - bash: | -# set -ex -# -# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` -# RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.${DISTRO}.*.rpm" -printf '%f\n') -# -# echo "== Test rpm package on ${IMAGE} ==" -# docker pull $IMAGE -# docker run --rm -e RPM_NAME=$RPM_NAME -e PYTHON_PACKAGE=${PYTHON_PACKAGE} -e PYTHON_CMD=${PYTHON_CMD} -e PIP_CMD=${PIP_CMD} -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh" -# -# displayName: 'Test Rpm Package' -# -#- job: BuildDebPackages -# displayName: Build Deb Packages -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# pool: -# name: $(pool) -# strategy: -# matrix: -# ${{ each arch in parameters.architectures }}: -# # https://wiki.ubuntu.com/Releases -# Bionic ${{ arch.name }}: -# # 18.04 -# deb_system: ubuntu -# distro: bionic -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# Focal ${{ arch.name }}: -# # 20.04 -# deb_system: ubuntu -# distro: focal -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# Jammy ${{ arch.name }}: -# # 22.04 -# deb_system: ubuntu -# distro: jammy -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# -# # https://wiki.debian.org/DebianReleases -# Buster ${{ arch.name }}: -# # 10 -# deb_system: debian -# distro: buster -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# Bullseye ${{ arch.name }}: -# # 11 -# deb_system: debian -# distro: bullseye -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# steps: -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# - task: Bash@3 -# displayName: 'Build $(deb_system) $(distro) $(arch) Package' -# inputs: -# targetType: 'filePath' -# filePath: scripts/release/debian/pipeline.sh -# env: -# DISTRO_BASE_IMAGE: $(deb_system):$(distro) -# -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: 'SBOM' -# inputs: -# BuildDropPath: $(Build.ArtifactStagingDirectory) -# -# - task: PublishPipelineArtifact@0 -# displayName: 'Publish Artifact: $(deb_system) $(distro) $(arch)' -# inputs: -# TargetPath: $(Build.ArtifactStagingDirectory) -# ArtifactName: $(deb_system)-$(distro)-$(arch) -# -#- job: TestDebPackages -# timeoutInMinutes: 120 -# displayName: Test Deb Packages -# dependsOn: -# - BuildDebPackages -# condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) -# strategy: -# matrix: -# ${{ each arch in parameters.architectures }}: -# Focal ${{ arch.name }}: -# deb_system: ubuntu -# distro: focal -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# Jammy ${{ arch.name }}: -# deb_system: ubuntu -# distro: jammy -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# Buster ${{ arch.name }}: -# deb_system: debian -# distro: buster -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# Bullseye ${{ arch.name }}: -# deb_system: debian -# distro: bullseye -# arch: ${{ arch.value }} -# pool: ${{ arch.pool }} -# pool: -# name: $(pool) -# steps: -# - bash: ./scripts/ci/install_docker.sh -# displayName: Install Docker -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download Metadata' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' -# artifactName: metadata -# -# - task: DownloadPipelineArtifact@1 -# displayName: 'Download $(deb_system):$(distro) $(arch) Build' -# inputs: -# TargetPath: '$(Build.ArtifactStagingDirectory)/debian' -# artifactName: $(deb_system)-$(distro)-$(arch) -# -# - task: Bash@3 -# displayName: 'Test $(deb_system) $(distro) $(arch) Package' -# env: -# DISTRO_BASE_IMAGE: $(deb_system):$(distro) -# inputs: -# targetType: 'inline' -# script: | -# set -exv -# CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` -# -# echo "== Test debian package on ${DISTRO} ==" -# docker pull ${DISTRO_BASE_IMAGE} -# docker run --rm -e DISTRO=${DISTRO} -e CLI_VERSION=$CLI_VERSION -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts -v $(pwd):/azure-cli ${DISTRO_BASE_IMAGE} /bin/bash "/azure-cli/scripts/release/debian/test_deb_in_docker.sh" -# -#- job: CheckStyle -# displayName: "Check CLI Style" -# timeoutInMinutes: 120 -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# - template: .azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# azdev style -# -#- job: CheckHeaders -# displayName: "Check License, History, and DocMap" -# -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# - template: .azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# azdev verify license -# azdev verify history -# azdev verify document-map -# -#- job: PerformanceCheck -# displayName: "PerformanceCheck" -# strategy: -# matrix: -# Python39: -# python.version: '3.9' -# Python310: -# python.version: '3.10' -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python $(python.version)' -# inputs: -# versionSpec: '$(python.version)' -# - template: .azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# azdev perf load-times -# displayName: "Load Performance" -# # - bash: | -# # set -ev -# # . env/bin/activate -# -# # azdev perf benchmark "version" "network vnet -h" "rest -h" "storage account" -# # displayName: "Execution Performance" -# -#- job: CheckLinter -# displayName: "Check CLI Linter" -# -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# - template: .azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# python scripts/ci/service_name.py -# if [[ "$(System.PullRequest.TargetBranch)" != "" ]]; then -# # If CI is set to shallow fetch, target branch should be expilictly fetched. -# git fetch origin --depth=1 $(System.PullRequest.TargetBranch) -# azdev linter --ci-exclusions --min-severity medium --repo=./ --src=HEAD --tgt=origin/$(System.PullRequest.TargetBranch) -# else -# azdev linter --ci-exclusions --min-severity medium -# fi -# -#- job: CodegenCoverage -# displayName: "Codegen Coverage" -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# - template: .azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# # clone azure-cli-extensions -# cd .. -# git clone --depth 1 -b main https://github.com/Azure/azure-cli-extensions.git ./azure-cli-extensions -# azdev extension repo add ./azure-cli-extensions -# azdev extension add "*" -# # Some extension will change the dependence, so run `azdev setup` again after all extensions installed. -# azdev setup -c $CLI_REPO_PATH -r ./azure-cli-extensions -# # CLI repo only -# azdev statistics list-command-table CLI --statistics-only -# # CLI + EXT repos -# azdev statistics list-command-table --statistics-only -# -#- job: VerifySphinxDocumentGenerator -# displayName: "Verify Sphinx Document Generator" -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# - bash: pip install --upgrade pip wheel -# displayName: "Install pip and wheel" -# - bash: ./scripts/ci/test_ref_doc.sh -# displayName: "Verify Sphinx Document Generator" - -- job: BreakingChangeCheck - displayName: "Breaking Change Check" +- job: CheckPullRequest + displayName: "Check the Format of Pull Request Title and Content" + condition: and(succeeded(), in(variables['System.PullRequest.TargetBranch'], 'dev', 'release')) + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - bash: | + echo "Check Title of Pull Request: #$(System.PullRequest.PullRequestNumber)" + title=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.title') + echo $title + body=$(curl https://api.github.com/repos/$(Build.Repository.Name)/pulls/$(System.PullRequest.PullRequestNumber) | jq -r '.body') + echo $body + if [ "$(System.PullRequest.TargetBranch)" != "release" ] && echo $title | grep -iqF hotfix:; then + echo "Hotfix PR should target release branch." + exit 1 + fi + python scripts/ci/check_pull_request.py "$title" "$body" + +- job: RejectPullRequestToMasterBranch + displayName: "Reject Pull Request To Master Branch" + condition: and(succeeded(), eq(variables['System.PullRequest.TargetBranch'], 'master')) + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - bash: | + echo "Reject pull request directly to master branch" + exit 1 + +- job: CredentialScanner + displayName: "Credential Scanner" + pool: + name: ${{ variables.windows_pool }} + steps: + - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-credscan.CredScan@2 + displayName: 'Run Credential Scanner' + inputs: + toolMajorVersion: V2 + suppressionsFile: './scripts/ci/credscan/CredScanSuppressions.json' + toolVersionV2: '2.1.17' + + - task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-postanalysis.PostAnalysis@1 + displayName: 'Post Analysis' + inputs: + AllTools: false + BinSkim: false + CredScan: true + PoliCheck: false + RoslynAnalyzers: false + TSLint: false + ToolLogsNotFoundAction: 'Standard' + +- job: PolicyCheck + displayName: "Policy Check" + pool: + name: ${{ variables.windows_pool }} + steps: + - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@2 + displayName: 'Run Policy Check' + inputs: + targetType: F + result: PoliCheckResult.xml + + - task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@2 + displayName: 'Post Analysis' + inputs: + GdnBreakAllTools: false + GdnBreakGdnToolPoliCheck: true + GdnBreakGdnToolPoliCheckSeverity: Error + +- job: ExtractMetadata + displayName: Extract Metadata + + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: Bash@3 + displayName: 'Extract Version' + inputs: + targetType: 'filePath' + filePath: scripts/release/get_version.sh + + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: metadata' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: metadata + +- job: VerifyLinuxRequirements + displayName: 'Verify src/azure-cli/requirements.*.Linux.txt' + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + - bash: ./scripts/ci/dependency_check.sh + displayName: 'Verify src/azure-cli/requirements.py3.Linux.txt' + +- job: VerifyDarwinRequirements + displayName: 'Verify src/azure-cli/requirements.*.Darwin.txt' + condition: succeeded() + pool: + vmImage: 'macOS-12' + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + - bash: ./scripts/ci/dependency_check.sh + displayName: 'Verify src/azure-cli/requirements.py3.Darwin.txt' + +- job: VerifyWindowsRequirements + displayName: 'Verify src/azure-cli/requirements.*.Windows.txt' + condition: succeeded() + pool: + name: ${{ variables.windows_pool }} + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + - task: BatchScript@1 + inputs: + filename: ./scripts/ci/dependency_check.bat + displayName: 'Verify src/azure-cli/requirements.py3.Windows.txt' + +- job: VerifyVersions + displayName: Verify Command Module Versions + condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/release'), eq(variables['System.PullRequest.TargetBranch'], 'release'))) + pool: name: ${{ variables.ubuntu_pool }} steps: @@ -1101,83 +180,972 @@ jobs: - bash: | set -ev . env/bin/activate - python scripts/ci/breaking_change_check.py - breakingChangeCheck='false' - if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json' ]]; then - breakingChangeCheck='true' + azdev verify history + + displayName: 'Verify History' + +- job: BuildWindowsMSI + displayName: Build Windows MSI + + dependsOn: ExtractMetadata + condition: succeeded() + pool: + name: ${{ variables.windows_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - script: | + set /p CLI_VERSION=<$(System.ArtifactsDirectory)/metadata/version + set + + build_scripts/windows/scripts/build.cmd + displayName: 'Build Windows MSI' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: 'build_scripts/windows/out/' + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: MSI' + inputs: + TargetPath: 'build_scripts/windows/out/' + ArtifactName: msi + +- job: TestWindowsMSI + displayName: Test Windows MSI + + dependsOn: BuildWindowsMSI + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: ${{ variables.windows_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/msi' + artifactName: msi + + - task: PowerShell@2 + displayName: Install and Load CLI + inputs: + targetType: inline + script: | + if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { + # Start another Powershell process as Admin and execute this script again + $arguments = "& '" +$myinvocation.mycommand.definition + "'" + Start-Process powershell -Verb runAs -ArgumentList $arguments + # Stop if the PowerShell is not run as Admin + Break + } + # The following are executed by elevated PowerShell + az --version + + $InstallArgs = @( + "/i" + "`"$env:SYSTEM_ARTIFACTSDIRECTORY\msi\Microsoft Azure CLI.msi`"" + "/q" + "/norestart" + "/l*v" + ".\install_logs.txt" + ) + $pre_installed_version=az version --query '\"azure-cli\"' -o tsv + $to_be_installed_version=Get-Content $(System.ArtifactsDirectory)/metadata/version + if ($pre_installed_version -eq $to_be_installed_version){ + # See https://docs.microsoft.com/windows/win32/msi/reinstallmode about options of REINSTALLMODE + $reinstall_option="REINSTALL=ALL REINSTALLMODE=emus" + $InstallArgs += $reinstall_option + } + Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow + $install_time=Measure-Command {Start-Process "msiexec.exe" -ArgumentList $InstallArgs -Wait -NoNewWindow} | select -expand TotalSeconds + $installed_version=az version --query '\"azure-cli\"' -o tsv + if ($installed_version -ne $to_be_installed_version){ + echo "The MSI failed to install." + Exit 1 + } + echo 'Install time(seconds):' $install_time + az --version + # Test bundled pip with extension installation + az extension add -n rdbms-connect + az self-test + + Get-Content .\install_logs.txt + +- job: BuildDockerImage + displayName: Build Docker Image + + dependsOn: ExtractMetadata + condition: succeeded() + strategy: + matrix: + AMD64: + pool: ${{ variables.ubuntu_pool }} + artifactName: docker-amd64 + ARM64: + pool: ${{ variables.ubuntu_arm64_pool }} + artifactName: docker-arm64 + pool: + name: $(pool) + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: Bash@3 + displayName: 'Bash Script' + inputs: + targetType: 'filePath' + filePath: scripts/release/docker/pipeline.sh + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + DockerImagesToScan: 'clibuild$BUILD_BUILDNUMBER:latest' + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: docker image' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(artifactName) + +- job: TestDockerImage + displayName: Test Docker Image + + dependsOn: BuildDockerImage + condition: succeeded() + strategy: + matrix: + AMD64: + pool: ${{ variables.ubuntu_pool }} + artifactName: docker-amd64 + ARM64: + pool: ${{ variables.ubuntu_arm64_pool }} + artifactName: docker-arm64 + pool: + name: $(pool) + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Docker Image' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/docker' + artifactName: $(artifactName) + + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - bash: | + set -exv + + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + IMAGE_NAME=clibuild$BUILD_BUILDNUMBER:latest + TAR_FILE=$SYSTEM_ARTIFACTSDIRECTORY/docker/docker-azure-cli-$CLI_VERSION.tar + + echo "== Test docker image ==" + + docker load < $TAR_FILE + docker run $IMAGE_NAME /bin/bash -c "time az self-test && time az --version && sleep 5" + displayName: 'Bash Script' + +- job: BuildPythonWheel + displayName: Build Python Wheels + + dependsOn: ExtractMetadata + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + + + - script: | + if [[ "$(Build.Reason)" == "PullRequest" ]]; then + branch=$(System.PullRequest.TargetBranch) + else + branch=$(Build.SourceBranchName) fi - echo "##vso[task.setvariable variable=breakingChangeCheck]$breakingChangeCheck" - displayName: "Breaking Change Check" + scripts/release/pypi/build.sh $branch + displayName: 'Run Wheel Build Script' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: pypi' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: pypi + +- job: TestPythonWheel + displayName: Test Python Wheels + + dependsOn: BuildPythonWheel + condition: succeeded() + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download PyPI Packages' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/pypi' + artifactName: pypi + + + - bash: | + #!/usr/bin/env bash + + # Verify the pip wheels + + set -ex + + CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` + PYPI_FILES=$(cd $BUILD_ARTIFACTSTAGINGDIRECTORY/pypi; pwd) + + echo "== Testing pip install on Python 3.7 ==" + docker run \ + --rm -v $PYPI_FILES:/mnt/pypi python:3.7 \ + /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" + + echo "== Testing pip install on Python 3.9 ==" + docker run \ + --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ + /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" + + echo "== Testing pip install on Python 3.10 ==" + docker run \ + --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ + /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" + + displayName: 'Test pip Install' + +- job: TestCore + displayName: Unit Test for Core + timeoutInMinutes: 10 + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + steps: + - template: .azure-pipelines/templates/automation_test.yml + parameters: + pythonVersion: '$(python.version)' + module: 'azure-cli-core' + +- job: TestTelemetry + displayName: Unit Test for Telemetry + timeoutInMinutes: 10 + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + steps: + - template: .azure-pipelines/templates/automation_test.yml + parameters: + pythonVersion: '$(python.version)' + module: 'azure-cli-telemetry' + +- job: IntegrationTestAgainstProfiles + displayName: Integration Test against Profiles + dependsOn: BuildPythonWheel + condition: succeeded() + timeoutInMinutes: 20 + + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '$(python.version)' + - bash: pip install --upgrade pip wheel + displayName: 'Install pip and wheel' + - bash: ./scripts/ci/test_profile_integration.sh + displayName: 'Run Integration Test against Profiles' + +- job: TestExtensionsLoading + displayName: Test Extensions Loading + condition: succeeded() + timeoutInMinutes: 40 + + pool: + name: ${{ variables.ubuntu_pool }} + strategy: + matrix: + Python310: + python.version: '3.10' + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '$(python.version)' + - bash: pip install --upgrade pip wheel + displayName: 'Install pip and wheel' + - bash: ./scripts/ci/test_extensions.sh + displayName: 'Load extensions' + +- job: BuildHomebrewFormula + displayName: Build Homebrew Formula + + dependsOn: BuildPythonWheel + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - bash: | + #!/bin/bash + + root=$(cd $(dirname $0); pwd) + + set -evx + + CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` + HOMEBREW_UPSTREAM_URL=`curl -Ls -o /dev/null -w %{url_effective} https://api.github.com/repos/Azure/azure-cli/tarball/$BUILD_SOURCEVERSION` + + docker_files=$(cd $BUILD_SOURCESDIRECTORY/scripts/release/homebrew/docker; pwd) + src_files=$(cd $BUILD_SOURCESDIRECTORY/src; pwd) + + echo "Generating formula in docker container ... " + docker run -v $docker_files:/mnt/scripts \ + -v $src_files:/mnt/src \ + -e CLI_VERSION=$CLI_VERSION \ + -e HOMEBREW_UPSTREAM_URL=$HOMEBREW_UPSTREAM_URL \ + --name azurecli \ + python:3.10 \ + /mnt/scripts/run.sh + + # clean up + rm -rf $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata + + docker cp azurecli:azure-cli.rb $BUILD_ARTIFACTSTAGINGDIRECTORY/azure-cli.rb + docker rm --force azurecli + displayName: 'Build homebrew formula' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: homebrew' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: homebrew + +- job: TestHomebrewFormula + displayName: Test Homebrew Formula + + dependsOn: BuildHomebrewFormula + condition: succeeded() + pool: + vmImage: 'macOS-12' + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Homebrew' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' + artifactName: homebrew + + + - bash: | + set -ev + + echo == Remove pre-installed azure-cli == + brew uninstall azure-cli + + echo == Install azure-cli.rb formula == + brew install --build-from-source $SYSTEM_ARTIFACTSDIRECTORY/homebrew/azure-cli.rb + + echo == Az Version == + az --version + + echo == Run Self-Test == + az self-test + + displayName: 'Bash Script' + +- job: TestHomebrewPackage + displayName: Test Homebrew Package + timeoutInMinutes: 180 + dependsOn: BuildHomebrewFormula + # condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + condition: false + pool: + vmImage: 'macOS-12' + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/homebrew' + artifactName: homebrew + + + - bash: ./scripts/release/homebrew/test_homebrew_package.sh + + + displayName: 'Test Homebrew Package' + + +- job: BuildRpmPackageMariner + displayName: Build Rpm Package Mariner + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + strategy: + matrix: + 2.0 AMD64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-amd64 + pool: ${{ variables.ubuntu_pool }} + 2.0 ARM64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-arm64 + pool: ${{ variables.ubuntu_arm64_pool }} + pool: + name: $(pool) + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - task: Bash@3 + displayName: 'Build Rpm Package: Mariner' + inputs: + targetType: 'filePath' + filePath: scripts/release/rpm/pipeline_mariner.sh + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: rpm-mariner' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(artifact) + +- job: TestRpmPackageMariner + displayName: Test Rpm Package Mariner + timeoutInMinutes: 120 + dependsOn: + - BuildRpmPackageMariner + - ExtractMetadata + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + 2.0 AMD64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-amd64 + pool: ${{ variables.ubuntu_pool }} + 2.0 ARM64: + image: mcr.microsoft.com/cbl-mariner/base/core:2.0 + artifact: rpm-mariner2.0-arm64 + pool: ${{ variables.ubuntu_arm64_pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' + artifactName: $(artifact) + + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - bash: | + set -ex + + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.cm2.*.rpm" -printf '%f\n') + + echo "== Test rpm package on ${IMAGE} ==" + docker pull $IMAGE + docker run --rm -e RPM_NAME=$RPM_NAME -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_mariner_in_docker.sh" + + displayName: 'Test Rpm Package Mariner' + +# TODO: rpmbuild on Red Hat UBI 8 is slow for unknown reason. Still working with Red Hat to investigate. +- job: BuildRpmPackages + displayName: Build Rpm Packages + # Do not run this job for Pull Requests due to the slowness + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + Red Hat Universal Base Image 8 ${{ arch.name }}: + dockerfile: ubi + image: registry.access.redhat.com/ubi8/ubi:8.4 + artifact: rpm-ubi8-${{ arch.value }} + python_package: python39 + pool: ${{ arch.pool }} + Red Hat Universal Base Image 9 ${{ arch.name }}: + dockerfile: ubi + image: registry.access.redhat.com/ubi9/ubi:9.0.0 + artifact: rpm-ubi9-${{ arch.value }} + python_package: python3.9 + pool: ${{ arch.pool }} + Fedora 36 ${{ arch.name }}: + dockerfile: fedora + image: fedora:36 + artifact: rpm-fedora36-${{ arch.value }} + python_package: python3 + pool: ${{ arch.pool }} + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: Bash@3 + displayName: 'Build Rpm Package' + inputs: + targetType: 'filePath' + filePath: scripts/release/rpm/pipeline.sh + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: rpm' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(artifact) + + +- job: TestRpmPackage + displayName: Test Rpm Package + timeoutInMinutes: 120 + dependsOn: + - BuildRpmPackages + - ExtractMetadata + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + Red Hat Universal Base Image 8 ${{ arch.name }}: + artifact: rpm-ubi8-${{ arch.value }} + distro: el8 + image: registry.access.redhat.com/ubi8/ubi:8.4 + python_package: python39 + python_cmd: python3.9 + pip_cmd: pip3.9 + pool: ${{ arch.pool }} + Red Hat Universal Base Image 9 ${{ arch.name }}: + artifact: rpm-ubi9-${{ arch.value }} + distro: el9 + image: registry.access.redhat.com/ubi9/ubi:9.0.0 + python_package: python3.9 + python_cmd: python3.9 + pip_cmd: pip3.9 + pool: ${{ arch.pool }} + Fedora 36 ${{ arch.name }}: + artifact: rpm-fedora36-${{ arch.value }} + distro: fc36 + image: fedora:36 + python_package: python3 + python_cmd: python3 + pip_cmd: pip3 + pool: ${{ arch.pool }} + steps: + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download Build Artifacts' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/rpm' + artifactName: $(artifact) + + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + + - bash: | + set -ex + + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.${DISTRO}.*.rpm" -printf '%f\n') + + echo "== Test rpm package on ${IMAGE} ==" + docker pull $IMAGE + docker run --rm -e RPM_NAME=$RPM_NAME -e PYTHON_PACKAGE=${PYTHON_PACKAGE} -e PYTHON_CMD=${PYTHON_CMD} -e PIP_CMD=${PIP_CMD} -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh" + + displayName: 'Test Rpm Package' + +- job: BuildDebPackages + displayName: Build Deb Packages + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + pool: + name: $(pool) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + # https://wiki.ubuntu.com/Releases + Bionic ${{ arch.name }}: + # 18.04 + deb_system: ubuntu + distro: bionic + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Focal ${{ arch.name }}: + # 20.04 + deb_system: ubuntu + distro: focal + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Jammy ${{ arch.name }}: + # 22.04 + deb_system: ubuntu + distro: jammy + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + + # https://wiki.debian.org/DebianReleases + Buster ${{ arch.name }}: + # 10 + deb_system: debian + distro: buster + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Bullseye ${{ arch.name }}: + # 11 + deb_system: debian + distro: bullseye + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: Bash@3 + displayName: 'Build $(deb_system) $(distro) $(arch) Package' + inputs: + targetType: 'filePath' + filePath: scripts/release/debian/pipeline.sh + env: + DISTRO_BASE_IMAGE: $(deb_system):$(distro) + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'SBOM' + inputs: + BuildDropPath: $(Build.ArtifactStagingDirectory) + + - task: PublishPipelineArtifact@0 + displayName: 'Publish Artifact: $(deb_system) $(distro) $(arch)' + inputs: + TargetPath: $(Build.ArtifactStagingDirectory) + ArtifactName: $(deb_system)-$(distro)-$(arch) + +- job: TestDebPackages + timeoutInMinutes: 120 + displayName: Test Deb Packages + dependsOn: + - BuildDebPackages + condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule')) + strategy: + matrix: + ${{ each arch in parameters.architectures }}: + Focal ${{ arch.name }}: + deb_system: ubuntu + distro: focal + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Jammy ${{ arch.name }}: + deb_system: ubuntu + distro: jammy + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Buster ${{ arch.name }}: + deb_system: debian + distro: buster + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + Bullseye ${{ arch.name }}: + deb_system: debian + distro: bullseye + arch: ${{ arch.value }} + pool: ${{ arch.pool }} + pool: + name: $(pool) + steps: + - bash: ./scripts/ci/install_docker.sh + displayName: Install Docker + - task: DownloadPipelineArtifact@1 + displayName: 'Download Metadata' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/metadata' + artifactName: metadata + + - task: DownloadPipelineArtifact@1 + displayName: 'Download $(deb_system):$(distro) $(arch) Build' + inputs: + TargetPath: '$(Build.ArtifactStagingDirectory)/debian' + artifactName: $(deb_system)-$(distro)-$(arch) + + - task: Bash@3 + displayName: 'Test $(deb_system) $(distro) $(arch) Package' env: - SRC_BRANCH: $(system.pullRequest.targetBranchName) - PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) - JOB_NAME: "breaking_change_check" - - task: PublishBuildArtifacts@1 - condition: and(succeededOrFailed(), eq(variables.breakingChangeCheck, 'true')) + DISTRO_BASE_IMAGE: $(deb_system):$(distro) + inputs: + targetType: 'inline' + script: | + set -exv + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` + + echo "== Test debian package on ${DISTRO} ==" + docker pull ${DISTRO_BASE_IMAGE} + docker run --rm -e DISTRO=${DISTRO} -e CLI_VERSION=$CLI_VERSION -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts -v $(pwd):/azure-cli ${DISTRO_BASE_IMAGE} /bin/bash "/azure-cli/scripts/release/debian/test_deb_in_docker.sh" + +- job: CheckStyle + displayName: "Check CLI Style" + timeoutInMinutes: 120 + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + azdev style + +- job: CheckHeaders + displayName: "Check License, History, and DocMap" + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + azdev verify license + azdev verify history + azdev verify document-map + +- job: PerformanceCheck + displayName: "PerformanceCheck" + strategy: + matrix: + Python39: + python.version: '3.9' + Python310: + python.version: '3.10' + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '$(python.version)' + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + azdev perf load-times + displayName: "Load Performance" + # - bash: | + # set -ev + # . env/bin/activate + + # azdev perf benchmark "version" "network vnet -h" "rest -h" "storage account" + # displayName: "Execution Performance" + +- job: CheckLinter + displayName: "Check CLI Linter" + + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + python scripts/ci/service_name.py + if [[ "$(System.PullRequest.TargetBranch)" != "" ]]; then + # If CI is set to shallow fetch, target branch should be expilictly fetched. + git fetch origin --depth=1 $(System.PullRequest.TargetBranch) + azdev linter --ci-exclusions --min-severity medium --repo=./ --src=HEAD --tgt=origin/$(System.PullRequest.TargetBranch) + else + azdev linter --ci-exclusions --min-severity medium + fi + +- job: CodegenCoverage + displayName: "Codegen Coverage" + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - template: .azure-pipelines/templates/azdev_setup.yml + - bash: | + set -ev + . env/bin/activate + # clone azure-cli-extensions + cd .. + git clone --depth 1 -b main https://github.com/Azure/azure-cli-extensions.git ./azure-cli-extensions + azdev extension repo add ./azure-cli-extensions + azdev extension add "*" + # Some extension will change the dependence, so run `azdev setup` again after all extensions installed. + azdev setup -c $CLI_REPO_PATH -r ./azure-cli-extensions + # CLI repo only + azdev statistics list-command-table CLI --statistics-only + # CLI + EXT repos + azdev statistics list-command-table --statistics-only + +- job: VerifySphinxDocumentGenerator + displayName: "Verify Sphinx Document Generator" + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' inputs: - # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json - PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json' - ArtifactName: 'breaking_change_check' - publishLocation: 'Container' - -#- job: NotifyCIErrors -# dependsOn: -# - CheckPullRequest -# - RejectPullRequestToMasterBranch -# - CredentialScanner -# - PolicyCheck -# - ExtractMetadata -# - VerifyLinuxRequirements -# - VerifyDarwinRequirements -# - VerifyWindowsRequirements -# - VerifyVersions -# - BuildWindowsMSI -# - TestWindowsMSI -# - BuildDockerImage -# - TestDockerImage -# - BuildPythonWheel -# - TestPythonWheel -# - TestCore -# - TestTelemetry -# - IntegrationTestAgainstProfiles -# - TestExtensionsLoading -# - BuildHomebrewFormula -# - TestHomebrewFormula -# - TestHomebrewPackage -# - BuildRpmPackageMariner -# - BuildRpmPackages -# - TestRpmPackage -# - BuildDebPackages -# - TestDebPackages -# - CheckStyle -# - CheckHeaders -# - PerformanceCheck -# - CheckLinter -# - CodegenCoverage -# - VerifySphinxDocumentGenerator -# condition: and(failed(), in(variables['Build.Reason'], 'BatchedCI')) -# displayName: Notify CI Errors -# pool: -# name: ${{ variables.ubuntu_pool }} -# steps: -# - task: UsePythonVersion@0 -# displayName: 'Use Python 3.10' -# inputs: -# versionSpec: 3.10 -# - task: AzureCLI@2 -# inputs: -# azureSubscription: 'Azure CLI' -# scriptType: 'bash' -# scriptLocation: 'inlineScript' -# inlineScript: | -# pip install requests -# teams_api_url=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_URL_SECRET_NAME) --query value -otsv) -# teams_api_key=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_KEY_SECRET_NAME) --query value -otsv) -# echo "If any task fails, notify to teams channel" -# python scripts/ci/notify_ci_errors.py $teams_api_url $teams_api_key $(TEAMS_CHANNEL_ID) -# displayName: 'Notify To Teams Channel' -# env: -# BASE_URI: $(System.CollectionUri) -# PROJECT_TYPE: $(System.TeamProject) -# BUILD_ID: $(Build.BuildId) -# JOB_ID: $(System.JobId) + versionSpec: 3.10 + - bash: pip install --upgrade pip wheel + displayName: "Install pip and wheel" + - bash: ./scripts/ci/test_ref_doc.sh + displayName: "Verify Sphinx Document Generator" + +- job: NotifyCIErrors + dependsOn: + - CheckPullRequest + - RejectPullRequestToMasterBranch + - CredentialScanner + - PolicyCheck + - ExtractMetadata + - VerifyLinuxRequirements + - VerifyDarwinRequirements + - VerifyWindowsRequirements + - VerifyVersions + - BuildWindowsMSI + - TestWindowsMSI + - BuildDockerImage + - TestDockerImage + - BuildPythonWheel + - TestPythonWheel + - TestCore + - TestTelemetry + - IntegrationTestAgainstProfiles + - TestExtensionsLoading + - BuildHomebrewFormula + - TestHomebrewFormula + - TestHomebrewPackage + - BuildRpmPackageMariner + - BuildRpmPackages + - TestRpmPackage + - BuildDebPackages + - TestDebPackages + - CheckStyle + - CheckHeaders + - PerformanceCheck + - CheckLinter + - CodegenCoverage + - VerifySphinxDocumentGenerator + condition: and(failed(), in(variables['Build.Reason'], 'BatchedCI')) + displayName: Notify CI Errors + pool: + name: ${{ variables.ubuntu_pool }} + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.10' + inputs: + versionSpec: 3.10 + - task: AzureCLI@2 + inputs: + azureSubscription: 'Azure CLI' + scriptType: 'bash' + scriptLocation: 'inlineScript' + inlineScript: | + pip install requests + teams_api_url=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_URL_SECRET_NAME) --query value -otsv) + teams_api_key=$(az keyvault secret show --vault-name $(TEAMS_BOT_VAULT_NAME) --name $(TEAMS_BOT_API_KEY_SECRET_NAME) --query value -otsv) + echo "If any task fails, notify to teams channel" + python scripts/ci/notify_ci_errors.py $teams_api_url $teams_api_key $(TEAMS_CHANNEL_ID) + displayName: 'Notify To Teams Channel' + env: + BASE_URI: $(System.CollectionUri) + PROJECT_TYPE: $(System.TeamProject) + BUILD_ID: $(Build.BuildId) + JOB_ID: $(System.JobId) diff --git a/scripts/ci/breaking_change_check.py b/scripts/ci/breaking_change_test.py similarity index 96% rename from scripts/ci/breaking_change_check.py rename to scripts/ci/breaking_change_test.py index 433145078a0..6595e3e6982 100644 --- a/scripts/ci/breaking_change_check.py +++ b/scripts/ci/breaking_change_test.py @@ -88,7 +88,7 @@ def meta_diff(): def get_pipeline_result(): pipeline_result = { - "breaking_change_check": { + "breaking_change_test": { "Name": job_name, "Details": [] } @@ -114,7 +114,7 @@ def get_pipeline_result(): status = 'Fail' breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) breaking_change['Status'] = status - pipeline_result['breaking_change_check']['Details'].append(breaking_change) + pipeline_result['breaking_change_test']['Details'].append(breaking_change) print(json.dumps(pipeline_result, indent=4)) return pipeline_result @@ -128,8 +128,8 @@ def build_markdown_content(cmd_name, is_break, rule_message, suggest_message, co def save_pipeline_result(pipeline_result): # save pipeline result to file - # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_check.json - filename = os.path.join(azdev_test_result_dir, f'breaking_change_check.json') + # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json + filename = os.path.join(azdev_test_result_dir, f'breaking_change_test.json') with open(filename, 'w') as f: json.dump(pipeline_result, f, indent=4) logger.info(f"save pipeline result to file: {filename}") @@ -137,7 +137,7 @@ def save_pipeline_result(pipeline_result): def main(): if pull_request_number != '$(System.PullRequest.PullRequestNumber)': - logger.info("Start breaking change check ...\n") + logger.info("Start breaking change test ...\n") get_diff_meta_files() get_base_meta_files() meta_diff() From 3d88ba233c4fd0230095a169008cf6b95d93c347 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 17:23:40 +0800 Subject: [PATCH 23/68] Update breaking_change_test.py --- scripts/ci/breaking_change_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 6595e3e6982..875a0c00799 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -21,7 +21,7 @@ pull_request_number = os.environ.get('PULL_REQUEST_NUMBER', None) job_name = os.environ.get('JOB_NAME', None) azdev_test_result_dir = os.path.expanduser("~/.azdev/env_config/mnt/vss/_work/1/s/env") -src_branch = 'azure-cli-2.48.1' +src_branch = 'azure-cli-2.48.1-test' target_branch = 'dev' # src_branch = os.environ.get('SRC_BRANCH', None) # refs/remotes/pull/24765/merge @@ -45,7 +45,7 @@ def get_diff_meta_files(): print(cmd) subprocess.run(cmd) # refs/remotes/pull/24765/merge - cmd = ['azdev', 'command-change', 'meta-export', '--src', 'azure-cli-2.48.1', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] + cmd = ['azdev', 'command-change', 'meta-export', '--src', src_branch, '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] print(cmd) subprocess.run(cmd) From b5cf4b42ba3358fd8d65742062954c2109a82f76 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 18:49:27 +0800 Subject: [PATCH 24/68] Update breaking_change_test.py --- scripts/ci/breaking_change_test.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 875a0c00799..60f0f7cf295 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -88,9 +88,14 @@ def meta_diff(): def get_pipeline_result(): pipeline_result = { - "breaking_change_test": { + "breaking_change_test 1": { "Name": job_name, - "Details": [] + "Details": [ + { + "TestName": "AzureCLI-BreakingChangeTest", + "Details": [] + } + ] } } if pull_request_number != '$(System.PullRequest.PullRequestNumber)': @@ -114,7 +119,7 @@ def get_pipeline_result(): status = 'Fail' breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) breaking_change['Status'] = status - pipeline_result['breaking_change_test']['Details'].append(breaking_change) + pipeline_result['breaking_change_test 1']['Details'][0]['Details'].append(breaking_change) print(json.dumps(pipeline_result, indent=4)) return pipeline_result From 1f1712524f35fe7bf675bb933746044d61b13a6d Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 19:36:06 +0800 Subject: [PATCH 25/68] Empty From 0e60bc446daf2d29e4c33d147115871e57f9ff16 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 20:00:24 +0800 Subject: [PATCH 26/68] update --- .azure-pipelines/breaking-change-tests.yml | 34 ++++++++++++------- scripts/ci/breaking_change_test.json | 38 ++++++++++++++++++++++ scripts/ci/breaking_change_test2.py | 26 +++++++++++++++ 3 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 scripts/ci/breaking_change_test.json create mode 100644 scripts/ci/breaking_change_test2.py diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 20d0557db57..7adb2c08a92 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -22,22 +22,32 @@ jobs: inputs: versionSpec: 3.10 - template: ${{ variables.Pipeline.Workspace }}/.azure-pipelines/templates/azdev_setup.yml +# - bash: | +# set -ev +# . env/bin/activate +# python scripts/ci/breaking_change_test.py +# breakingChangeTest='false' +# if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then +# breakingChangeTest='true' +# fi +# echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" +# displayName: "Breaking Change Test" +# env: +# SRC_BRANCH: $(system.pullRequest.targetBranchName) +# PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) +# JOB_NAME: "breaking_change_test" +# - task: PublishBuildArtifacts@1 +# condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) +# inputs: +# # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json +# PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' +# ArtifactName: 'breaking_change_test' +# publishLocation: 'Container' - bash: | set -ev . env/bin/activate - python scripts/ci/breaking_change_test.py - breakingChangeTest='false' - if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then - breakingChangeTest='true' - fi - echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" - displayName: "Breaking Change Test" - env: - SRC_BRANCH: $(system.pullRequest.targetBranchName) - PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) - JOB_NAME: "breaking_change_test" + python scripts/ci/breaking_change_test2.py - task: PublishBuildArtifacts@1 - condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) inputs: # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json new file mode 100644 index 00000000000..f5e270a12f3 --- /dev/null +++ b/scripts/ci/breaking_change_test.json @@ -0,0 +1,38 @@ +{ + "breaking_change_test 1": { + "Name": "breaking_change_test", + "Details": [ + { + "TestName": "AzureCLI-BreakingChangeTest", + "Details": [ + { + "Module": "cosmosdb", + "Status": "Warning", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|True|cosmosdb update|cmd `cosmosdb update` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb update`|\n|False|cosmosdb update|cmd `cosmosdb update` added parameter `public_network_access`||\n|False|cosmosdb update|cmd `cosmosdb update` added parameter `continuous_tier`||\n|True|cosmosdb create|cmd `cosmosdb create` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb create`|\n|False|cosmosdb create|cmd `cosmosdb create` added parameter `public_network_access`||\n|False|cosmosdb create|cmd `cosmosdb create` added parameter `continuous_tier`||\n" + }, + { + "Module": "servicebus", + "Status": "Warning", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|servicebus migration delete|cmd `servicebus migration delete` added||\n|False|servicebus migration list|cmd `servicebus migration list` added||\n|False|servicebus migration update|cmd `servicebus migration update` added||\n|False|servicebus migration wait|cmd `servicebus migration wait` added||\n|True|servicebus migration start|cmd `servicebus migration start` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `servicebus migration start`|\n|False|servicebus migration abort|cmd `servicebus migration abort` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration complete|cmd `servicebus migration complete` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration show|cmd `servicebus migration show` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration start|cmd `servicebus migration start` updated property `is_aaz` from `False` to `True`||\n|False|servicebus namespace exists|cmd `servicebus namespace exists` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration abort`|\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_default`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration complete`|\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_default`||\n|True|servicebus migration show|cmd `servicebus migration show` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration show`|\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration show`|\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_default`||\n|True|servicebus namespace exists|cmd `servicebus namespace exists` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus namespace exists`|\n|False|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `aaz_type`||\n|False|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `type`||\n|True|servicebus migration start|cmd `servicebus migration start` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration start`|\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: removed property `required`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: removed property `required`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `type`||\n|True|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration start`|\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_default`||\n|False|servicebus migration start|cmd `servicebus migration start` added parameter `no_wait`||\n" + }, + { + "Module": "sql", + "Status": "Warning", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|sql elastic-pool create|cmd `sql elastic-pool create` added parameter `preferred_enclave_type`||\n|False|sql elastic-pool update|cmd `sql elastic-pool update` added parameter `preferred_enclave_type`||\n" + }, + { + "Module": "appservice", + "Status": "Warning", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|functionapp create|cmd `functionapp create` added parameter `registry_server`||\n|False|functionapp create|cmd `functionapp create` added parameter `min_replicas`||\n|False|functionapp create|cmd `functionapp create` added parameter `max_replicas`||\n|False|webapp config container set|cmd `webapp config container set` added parameter `min_replicas`||\n|False|webapp config container set|cmd `webapp config container set` added parameter `max_replicas`||\n|False|webapp config set|cmd `webapp config set` added parameter `min_replicas`||\n|False|webapp config set|cmd `webapp config set` added parameter `max_replicas`||\n|False|functionapp config container set|cmd `functionapp config container set` added parameter `min_replicas`||\n|False|functionapp config container set|cmd `functionapp config container set` added parameter `max_replicas`||\n|False|functionapp config set|cmd `functionapp config set` added parameter `min_replicas`||\n|False|functionapp config set|cmd `functionapp config set` added parameter `max_replicas`||\n" + }, + { + "Module": "eventhubs", + "Status": "Warning", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|eventhubs namespace schema-registry update|cmd `eventhubs namespace schema-registry update` added||\n|False|eventhubs georecovery-alias create|cmd `eventhubs georecovery-alias create` added||\n|False|eventhubs georecovery-alias update|cmd `eventhubs georecovery-alias update` added||\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `eventhubs georecovery-alias set`|\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `is_preview`|please remove property `is_preview` for cmd `eventhubs georecovery-alias set`|\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `type`||\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `aaz_type`||\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `type`||\n|True|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias show`|\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: removed property `required`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `choices`|please remove property `choices` for parameter `schema_compatibility` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: removed property `required`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `choices`|please remove property `choices` for parameter `schema_type` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `type`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `tags`|please add back parameter `tags` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` added parameter `group_properties`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `type`||\n|True|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry show`|\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `type`||\n|True|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias authorization-rule show`|\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` update parameter `partner_namespace`: added property `required`|please remove property `required` for parameter `partner_namespace` for cmd `eventhubs georecovery-alias set`|\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `cmd`||\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `no_wait`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `type`||\n|True|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` removed parameter `name`|please add back parameter `name` for cmd `eventhubs georecovery-alias exists`|\n|True|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` added parameter `alias`|please remove parameter `alias` for cmd `eventhubs georecovery-alias exists`|\n" + } + ] + } + ] + }, + "pull_request_number": "8" +} \ No newline at end of file diff --git a/scripts/ci/breaking_change_test2.py b/scripts/ci/breaking_change_test2.py new file mode 100644 index 00000000000..cd6d70187e9 --- /dev/null +++ b/scripts/ci/breaking_change_test2.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +import os + +azdev_test_result_dir = os.path.expanduser("~/.azdev/env_config/mnt/vss/_work/1/s/env") + + +def save_pipeline_result(): + # save pipeline result to file + # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json + filename = os.path.join(azdev_test_result_dir, f'breaking_change_test.json') + from shutil import copyfile + copyfile('./scripts/ci/breaking_change_test.json', filename) + + +def main(): + save_pipeline_result() + + +if __name__ == '__main__': + main() \ No newline at end of file From f0500e726de78facf50f7575985c3e2aa5cb9a5a Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 20:20:30 +0800 Subject: [PATCH 27/68] Empty From 991b0691d062a95387fe9a8ffe805a03eb2db617 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 20:37:07 +0800 Subject: [PATCH 28/68] update --- scripts/ci/breaking_change_test.json | 11 +++++------ scripts/ci/breaking_change_test.py | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index f5e270a12f3..d181150bf7f 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -1,18 +1,17 @@ { - "breaking_change_test 1": { - "Name": "breaking_change_test", + "breaking_change_test": { "Details": [ { "TestName": "AzureCLI-BreakingChangeTest", "Details": [ { "Module": "cosmosdb", - "Status": "Warning", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|True|cosmosdb update|cmd `cosmosdb update` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb update`|\n|False|cosmosdb update|cmd `cosmosdb update` added parameter `public_network_access`||\n|False|cosmosdb update|cmd `cosmosdb update` added parameter `continuous_tier`||\n|True|cosmosdb create|cmd `cosmosdb create` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb create`|\n|False|cosmosdb create|cmd `cosmosdb create` added parameter `public_network_access`||\n|False|cosmosdb create|cmd `cosmosdb create` added parameter `continuous_tier`||\n" + "Status": "Failed", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|❌True|cosmosdb update|cmd `cosmosdb update` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb update`|\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `continuous_tier`||\n|❌True|cosmosdb create|cmd `cosmosdb create` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb create`|\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `continuous_tier`||\n" }, { "Module": "servicebus", - "Status": "Warning", + "Status": "Failed", "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|servicebus migration delete|cmd `servicebus migration delete` added||\n|False|servicebus migration list|cmd `servicebus migration list` added||\n|False|servicebus migration update|cmd `servicebus migration update` added||\n|False|servicebus migration wait|cmd `servicebus migration wait` added||\n|True|servicebus migration start|cmd `servicebus migration start` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `servicebus migration start`|\n|False|servicebus migration abort|cmd `servicebus migration abort` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration complete|cmd `servicebus migration complete` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration show|cmd `servicebus migration show` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration start|cmd `servicebus migration start` updated property `is_aaz` from `False` to `True`||\n|False|servicebus namespace exists|cmd `servicebus namespace exists` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration abort`|\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_default`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration complete`|\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_default`||\n|True|servicebus migration show|cmd `servicebus migration show` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration show`|\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration show`|\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_default`||\n|True|servicebus namespace exists|cmd `servicebus namespace exists` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus namespace exists`|\n|False|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `aaz_type`||\n|False|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `type`||\n|True|servicebus migration start|cmd `servicebus migration start` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration start`|\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: removed property `required`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: removed property `required`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `type`||\n|True|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration start`|\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_default`||\n|False|servicebus migration start|cmd `servicebus migration start` added parameter `no_wait`||\n" }, { @@ -27,7 +26,7 @@ }, { "Module": "eventhubs", - "Status": "Warning", + "Status": "Failed", "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|eventhubs namespace schema-registry update|cmd `eventhubs namespace schema-registry update` added||\n|False|eventhubs georecovery-alias create|cmd `eventhubs georecovery-alias create` added||\n|False|eventhubs georecovery-alias update|cmd `eventhubs georecovery-alias update` added||\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `eventhubs georecovery-alias set`|\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `is_preview`|please remove property `is_preview` for cmd `eventhubs georecovery-alias set`|\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `type`||\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `aaz_type`||\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `type`||\n|True|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias show`|\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: removed property `required`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `choices`|please remove property `choices` for parameter `schema_compatibility` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: removed property `required`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `choices`|please remove property `choices` for parameter `schema_type` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `type`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `tags`|please add back parameter `tags` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` added parameter `group_properties`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `type`||\n|True|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry show`|\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `type`||\n|True|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias authorization-rule show`|\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` update parameter `partner_namespace`: added property `required`|please remove property `required` for parameter `partner_namespace` for cmd `eventhubs georecovery-alias set`|\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `cmd`||\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `no_wait`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `type`||\n|True|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` removed parameter `name`|please add back parameter `name` for cmd `eventhubs georecovery-alias exists`|\n|True|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` added parameter `alias`|please remove parameter `alias` for cmd `eventhubs georecovery-alias exists`|\n" } ] diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 60f0f7cf295..939f9dc25b0 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -115,8 +115,8 @@ def get_pipeline_result(): } status = 'Warning' for item in items: - if item['is_break'] == 'Yes': - status = 'Fail' + if item['is_break']: + status = 'Failed' breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) breaking_change['Status'] = status pipeline_result['breaking_change_test 1']['Details'][0]['Details'].append(breaking_change) From 26d530a88dab0f6339551dc7a4341a48dde2f8cc Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 21:02:29 +0800 Subject: [PATCH 29/68] Empty From 975a03c5f8e3d8e6f2467ebc845489653b75e4a4 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 21:24:41 +0800 Subject: [PATCH 30/68] update --- .azure-pipelines/breaking-change-tests.yml | 44 +++++++++++----------- scripts/ci/breaking_change_test.py | 6 +-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 7adb2c08a92..365958497f6 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -22,34 +22,34 @@ jobs: inputs: versionSpec: 3.10 - template: ${{ variables.Pipeline.Workspace }}/.azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# python scripts/ci/breaking_change_test.py -# breakingChangeTest='false' -# if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then -# breakingChangeTest='true' -# fi -# echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" -# displayName: "Breaking Change Test" -# env: -# SRC_BRANCH: $(system.pullRequest.targetBranchName) -# PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) -# JOB_NAME: "breaking_change_test" -# - task: PublishBuildArtifacts@1 -# condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) -# inputs: -# # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json -# PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' -# ArtifactName: 'breaking_change_test' -# publishLocation: 'Container' - bash: | set -ev . env/bin/activate - python scripts/ci/breaking_change_test2.py + python scripts/ci/breaking_change_test.py + breakingChangeTest='false' + if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then + breakingChangeTest='true' + fi + echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" + displayName: "Breaking Change Test" + env: + SRC_BRANCH: $(system.pullRequest.targetBranchName) + PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) + JOB_NAME: "breaking_change_test" - task: PublishBuildArtifacts@1 + condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) inputs: # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ArtifactName: 'breaking_change_test' publishLocation: 'Container' +# - bash: | +# set -ev +# . env/bin/activate +# python scripts/ci/breaking_change_test2.py +# - task: PublishBuildArtifacts@1 +# inputs: +# # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json +# PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' +# ArtifactName: 'breaking_change_test' +# publishLocation: 'Container' diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 939f9dc25b0..89ce4551960 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -88,8 +88,7 @@ def meta_diff(): def get_pipeline_result(): pipeline_result = { - "breaking_change_test 1": { - "Name": job_name, + "breaking_change_test": { "Details": [ { "TestName": "AzureCLI-BreakingChangeTest", @@ -119,7 +118,7 @@ def get_pipeline_result(): status = 'Failed' breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) breaking_change['Status'] = status - pipeline_result['breaking_change_test 1']['Details'][0]['Details'].append(breaking_change) + pipeline_result['breaking_change_test']['Details'][0]['Details'].append(breaking_change) print(json.dumps(pipeline_result, indent=4)) return pipeline_result @@ -127,6 +126,7 @@ def get_pipeline_result(): def build_markdown_content(cmd_name, is_break, rule_message, suggest_message, content): if content == "": content = f'|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n' + is_break = '❌True' if is_break else '⚠️False' content += f'|{is_break}|{cmd_name}|{rule_message}|{suggest_message}|\n' return content From fad56b4fd7b614eb10d28be49bebe37b8efc372c Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 21:47:28 +0800 Subject: [PATCH 31/68] update --- .azure-pipelines/breaking-change-tests.yml | 44 +++++++++++----------- scripts/ci/breaking_change_test.json | 25 ------------ 2 files changed, 22 insertions(+), 47 deletions(-) diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 365958497f6..7adb2c08a92 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -22,34 +22,34 @@ jobs: inputs: versionSpec: 3.10 - template: ${{ variables.Pipeline.Workspace }}/.azure-pipelines/templates/azdev_setup.yml - - bash: | - set -ev - . env/bin/activate - python scripts/ci/breaking_change_test.py - breakingChangeTest='false' - if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then - breakingChangeTest='true' - fi - echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" - displayName: "Breaking Change Test" - env: - SRC_BRANCH: $(system.pullRequest.targetBranchName) - PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) - JOB_NAME: "breaking_change_test" - - task: PublishBuildArtifacts@1 - condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) - inputs: - # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json - PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' - ArtifactName: 'breaking_change_test' - publishLocation: 'Container' # - bash: | # set -ev # . env/bin/activate -# python scripts/ci/breaking_change_test2.py +# python scripts/ci/breaking_change_test.py +# breakingChangeTest='false' +# if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then +# breakingChangeTest='true' +# fi +# echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" +# displayName: "Breaking Change Test" +# env: +# SRC_BRANCH: $(system.pullRequest.targetBranchName) +# PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) +# JOB_NAME: "breaking_change_test" # - task: PublishBuildArtifacts@1 +# condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) # inputs: # # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json # PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' # ArtifactName: 'breaking_change_test' # publishLocation: 'Container' + - bash: | + set -ev + . env/bin/activate + python scripts/ci/breaking_change_test2.py + - task: PublishBuildArtifacts@1 + inputs: + # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json + PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' + ArtifactName: 'breaking_change_test' + publishLocation: 'Container' diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index d181150bf7f..4539346ded7 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -4,31 +4,6 @@ { "TestName": "AzureCLI-BreakingChangeTest", "Details": [ - { - "Module": "cosmosdb", - "Status": "Failed", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|❌True|cosmosdb update|cmd `cosmosdb update` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb update`|\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `continuous_tier`||\n|❌True|cosmosdb create|cmd `cosmosdb create` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb create`|\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `continuous_tier`||\n" - }, - { - "Module": "servicebus", - "Status": "Failed", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|servicebus migration delete|cmd `servicebus migration delete` added||\n|False|servicebus migration list|cmd `servicebus migration list` added||\n|False|servicebus migration update|cmd `servicebus migration update` added||\n|False|servicebus migration wait|cmd `servicebus migration wait` added||\n|True|servicebus migration start|cmd `servicebus migration start` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `servicebus migration start`|\n|False|servicebus migration abort|cmd `servicebus migration abort` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration complete|cmd `servicebus migration complete` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration show|cmd `servicebus migration show` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration start|cmd `servicebus migration start` updated property `is_aaz` from `False` to `True`||\n|False|servicebus namespace exists|cmd `servicebus namespace exists` updated property `is_aaz` from `False` to `True`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration abort`|\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `type`||\n|False|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_default`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration complete`|\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `type`||\n|False|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_default`||\n|True|servicebus migration show|cmd `servicebus migration show` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration show`|\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `type`||\n|True|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration show`|\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `type`||\n|False|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_default`||\n|True|servicebus namespace exists|cmd `servicebus namespace exists` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus namespace exists`|\n|False|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `aaz_type`||\n|False|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `type`||\n|True|servicebus migration start|cmd `servicebus migration start` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration start`|\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `id_part`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: removed property `required`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: removed property `required`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `type`||\n|True|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration start`|\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `id_part`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `type`||\n|False|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_default`||\n|False|servicebus migration start|cmd `servicebus migration start` added parameter `no_wait`||\n" - }, - { - "Module": "sql", - "Status": "Warning", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|sql elastic-pool create|cmd `sql elastic-pool create` added parameter `preferred_enclave_type`||\n|False|sql elastic-pool update|cmd `sql elastic-pool update` added parameter `preferred_enclave_type`||\n" - }, - { - "Module": "appservice", - "Status": "Warning", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|functionapp create|cmd `functionapp create` added parameter `registry_server`||\n|False|functionapp create|cmd `functionapp create` added parameter `min_replicas`||\n|False|functionapp create|cmd `functionapp create` added parameter `max_replicas`||\n|False|webapp config container set|cmd `webapp config container set` added parameter `min_replicas`||\n|False|webapp config container set|cmd `webapp config container set` added parameter `max_replicas`||\n|False|webapp config set|cmd `webapp config set` added parameter `min_replicas`||\n|False|webapp config set|cmd `webapp config set` added parameter `max_replicas`||\n|False|functionapp config container set|cmd `functionapp config container set` added parameter `min_replicas`||\n|False|functionapp config container set|cmd `functionapp config container set` added parameter `max_replicas`||\n|False|functionapp config set|cmd `functionapp config set` added parameter `min_replicas`||\n|False|functionapp config set|cmd `functionapp config set` added parameter `max_replicas`||\n" - }, - { - "Module": "eventhubs", - "Status": "Failed", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|False|eventhubs namespace schema-registry update|cmd `eventhubs namespace schema-registry update` added||\n|False|eventhubs georecovery-alias create|cmd `eventhubs georecovery-alias create` added||\n|False|eventhubs georecovery-alias update|cmd `eventhubs georecovery-alias update` added||\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `eventhubs georecovery-alias set`|\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `is_preview`|please remove property `is_preview` for cmd `eventhubs georecovery-alias set`|\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` updated property `is_aaz` from `False` to `True`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `type`||\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `aaz_type`||\n|False|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `type`||\n|True|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias show`|\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: removed property `required`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `choices`|please remove property `choices` for parameter `schema_compatibility` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: removed property `required`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `choices`|please remove property `choices` for parameter `schema_type` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `type`||\n|True|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `tags`|please add back parameter `tags` for cmd `eventhubs namespace schema-registry create`|\n|False|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` added parameter `group_properties`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `id_part`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `aaz_type`||\n|False|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `type`||\n|True|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry show`|\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `id_part`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `type`||\n|True|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias authorization-rule show`|\n|True|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` update parameter `partner_namespace`: added property `required`|please remove property `required` for parameter `partner_namespace` for cmd `eventhubs georecovery-alias set`|\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `cmd`||\n|False|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `no_wait`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `id_part`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `id_part`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `aaz_type`||\n|False|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `type`||\n|True|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` removed parameter `name`|please add back parameter `name` for cmd `eventhubs georecovery-alias exists`|\n|True|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` added parameter `alias`|please remove parameter `alias` for cmd `eventhubs georecovery-alias exists`|\n" - } ] } ] From d4b3c6a7799fef5c20fa437688acf439a8737f0d Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 21:49:21 +0800 Subject: [PATCH 32/68] Empty From d672d159ee4cd38d8c17d8a3e754606c3f12b9f9 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 22:06:42 +0800 Subject: [PATCH 33/68] Empty From 8737dbad659bc88617a8d5fa39f5080574fa8a23 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 11 May 2023 22:28:24 +0800 Subject: [PATCH 34/68] Update breaking_change_test.json --- scripts/ci/breaking_change_test.json | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index 4539346ded7..af5881ec492 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -3,6 +3,7 @@ "Details": [ { "TestName": "AzureCLI-BreakingChangeTest", + "Status": "Succeeded", "Details": [ ] } From 7f37a8fa6075fb4dc5b37cf0aab605f94ead14fe Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 10:13:03 +0800 Subject: [PATCH 35/68] Empty From e02707a03b0a4bd5872a46611ccfe9cb57b22f3b Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 10:20:49 +0800 Subject: [PATCH 36/68] Update breaking_change_test.json --- scripts/ci/breaking_change_test.json | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index af5881ec492..4a31a4d906e 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -1,4 +1,5 @@ { + "Status": "Succeeded", "breaking_change_test": { "Details": [ { From 1b55bd710517a1d0946e22de5c77a8e3fa1d3ec7 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 10:31:48 +0800 Subject: [PATCH 37/68] Update breaking_change_test.json --- scripts/ci/breaking_change_test.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index 4a31a4d906e..a39b9196dce 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -1,11 +1,14 @@ { - "Status": "Succeeded", "breaking_change_test": { "Details": [ { "TestName": "AzureCLI-BreakingChangeTest", - "Status": "Succeeded", "Details": [ + { + "Module": "", + "Status": "Succeeded", + "Content": "" + } ] } ] From 0b91cb8d1c472f08c1541e4ed8a029b2470412d5 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 11:07:53 +0800 Subject: [PATCH 38/68] Update breaking_change_test.json --- scripts/ci/breaking_change_test.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index a39b9196dce..a29f9ef6f5f 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -6,7 +6,7 @@ "Details": [ { "Module": "", - "Status": "Succeeded", + "Status": "", "Content": "" } ] From 21fe6ee18ccf814d8724cfd47b8fe88e649923d6 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 12:21:43 +0800 Subject: [PATCH 39/68] update --- scripts/ci/breaking_change_test.json | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index a29f9ef6f5f..3f70f2ed54b 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -5,9 +5,29 @@ "TestName": "AzureCLI-BreakingChangeTest", "Details": [ { - "Module": "", - "Status": "", - "Content": "" + "Module": "sql", + "Status": "Warning", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|sql elastic-pool update|cmd `sql elastic-pool update` added parameter `preferred_enclave_type`||\n|\u26a0\ufe0fFalse|sql elastic-pool create|cmd `sql elastic-pool create` added parameter `preferred_enclave_type`||\n" + }, + { + "Module": "cosmosdb", + "Status": "Failed", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|❌True|cosmosdb create|cmd `cosmosdb create` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb create`|\n|❌True|cosmosdb update|cmd `cosmosdb update` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb update`|\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `continuous_tier`||\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `continuous_tier`||" + }, + { + "Module": "eventhubs", + "Status": "Failed", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry update|cmd `eventhubs namespace schema-registry update` added||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias create|cmd `eventhubs georecovery-alias create` added||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias update|cmd `eventhubs georecovery-alias update` added||\n|\u274cTrue|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `eventhubs georecovery-alias set`|\n|\u274cTrue|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `is_preview`|please remove property `is_preview` for cmd `eventhubs georecovery-alias set`|\n|\u26a0\ufe0fFalse|eventhubs namespace exists|cmd `eventhubs namespace exists` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` updated property `is_aaz` from `False` to `True`||\n|\u274cTrue|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` update parameter `partner_namespace`: added property `required`|please remove property `required` for parameter `partner_namespace` for cmd `eventhubs georecovery-alias set`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `cmd`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `no_wait`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `type`||\n|\u274cTrue|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias authorization-rule show`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `type`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: removed property `required`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `choices`|please remove property `choices` for parameter `schema_compatibility` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: removed property `required`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `choices`|please remove property `choices` for parameter `schema_type` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `type`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `tags`|please add back parameter `tags` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` added parameter `group_properties`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `type`||\n|\u274cTrue|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry show`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `type`||\n|\u274cTrue|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias show`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` removed parameter `name`|please add back parameter `name` for cmd `eventhubs georecovery-alias exists`|\n|\u274cTrue|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` added parameter `alias`|please remove parameter `alias` for cmd `eventhubs georecovery-alias exists`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `type`||\n" + }, + { + "Module": "appservice", + "Status": "Warning", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|functionapp config set|cmd `functionapp config set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|functionapp config set|cmd `functionapp config set` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|functionapp create|cmd `functionapp create` added parameter `registry_server`||\n|\u26a0\ufe0fFalse|functionapp create|cmd `functionapp create` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|functionapp create|cmd `functionapp create` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|functionapp config container set|cmd `functionapp config container set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|functionapp config container set|cmd `functionapp config container set` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|webapp config set|cmd `webapp config set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|webapp config set|cmd `webapp config set` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|webapp config container set|cmd `webapp config container set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|webapp config container set|cmd `webapp config container set` added parameter `max_replicas`||\n" + }, + { + "Module": "servicebus", + "Status": "Failed", + "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|servicebus migration delete|cmd `servicebus migration delete` added||\n|\u26a0\ufe0fFalse|servicebus migration list|cmd `servicebus migration list` added||\n|\u26a0\ufe0fFalse|servicebus migration update|cmd `servicebus migration update` added||\n|\u26a0\ufe0fFalse|servicebus migration wait|cmd `servicebus migration wait` added||\n|\u274cTrue|servicebus migration start|cmd `servicebus migration start` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `servicebus migration start`|\n|\u26a0\ufe0fFalse|servicebus namespace exists|cmd `servicebus namespace exists` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` updated property `is_aaz` from `False` to `True`||\n|\u274cTrue|servicebus migration start|cmd `servicebus migration start` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration start`|\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: removed property `required`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: removed property `required`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `type`||\n|\u274cTrue|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration start`|\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_default`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` added parameter `no_wait`||\n|\u274cTrue|servicebus namespace exists|cmd `servicebus namespace exists` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus namespace exists`|\n|\u26a0\ufe0fFalse|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration abort`|\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_default`||\n|\u274cTrue|servicebus migration show|cmd `servicebus migration show` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration show`|\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration show`|\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_default`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration complete`|\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_default`||\n" } ] } From 524edb9d810d6ae0df671f9996f4159e0ad832b6 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 14:18:08 +0800 Subject: [PATCH 40/68] update --- scripts/ci/breaking_change_test.json | 25 ------------------------- scripts/ci/breaking_change_test.py | 2 ++ 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index 3f70f2ed54b..4539346ded7 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -4,31 +4,6 @@ { "TestName": "AzureCLI-BreakingChangeTest", "Details": [ - { - "Module": "sql", - "Status": "Warning", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|sql elastic-pool update|cmd `sql elastic-pool update` added parameter `preferred_enclave_type`||\n|\u26a0\ufe0fFalse|sql elastic-pool create|cmd `sql elastic-pool create` added parameter `preferred_enclave_type`||\n" - }, - { - "Module": "cosmosdb", - "Status": "Failed", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|❌True|cosmosdb create|cmd `cosmosdb create` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb create`|\n|❌True|cosmosdb update|cmd `cosmosdb update` removed parameter `enable_public_network`|please add back parameter `enable_public_network` for cmd `cosmosdb update`|\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb create|cmd `cosmosdb create` added parameter `continuous_tier`||\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `public_network_access`||\n|⚠\uFE0FFalse|cosmosdb update|cmd `cosmosdb update` added parameter `continuous_tier`||" - }, - { - "Module": "eventhubs", - "Status": "Failed", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry update|cmd `eventhubs namespace schema-registry update` added||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias create|cmd `eventhubs georecovery-alias create` added||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias update|cmd `eventhubs georecovery-alias update` added||\n|\u274cTrue|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `eventhubs georecovery-alias set`|\n|\u274cTrue|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added property `is_preview`|please remove property `is_preview` for cmd `eventhubs georecovery-alias set`|\n|\u26a0\ufe0fFalse|eventhubs namespace exists|cmd `eventhubs namespace exists` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` updated property `is_aaz` from `False` to `True`||\n|\u274cTrue|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` update parameter `partner_namespace`: added property `required`|please remove property `required` for parameter `partner_namespace` for cmd `eventhubs georecovery-alias set`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `cmd`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias set|cmd `eventhubs georecovery-alias set` added parameter `no_wait`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` update parameter `authorization_rule_name`: added property `type`||\n|\u274cTrue|eventhubs georecovery-alias authorization-rule show|cmd `eventhubs georecovery-alias authorization-rule show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias authorization-rule show`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry delete|cmd `eventhubs namespace schema-registry delete` update parameter `schema_group_name`: added property `type`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: removed property `required`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `choices`|please remove property `choices` for parameter `schema_compatibility` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_compatibility`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: removed property `required`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `choices`|please remove property `choices` for parameter `schema_type` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` update parameter `schema_type`: added property `type`||\n|\u274cTrue|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` removed parameter `tags`|please add back parameter `tags` for cmd `eventhubs namespace schema-registry create`|\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry create|cmd `eventhubs namespace schema-registry create` added parameter `group_properties`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `skip`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry list|cmd `eventhubs namespace schema-registry list` update parameter `top`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: updated property `options` from `['--schema-group-name']` to `['--name', '--schema-group-name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` update parameter `schema_group_name`: added property `type`||\n|\u274cTrue|eventhubs namespace schema-registry show|cmd `eventhubs namespace schema-registry show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs namespace schema-registry show`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` update parameter `alias`: added property `type`||\n|\u274cTrue|eventhubs georecovery-alias show|cmd `eventhubs georecovery-alias show` removed parameter `cmd`|please add back parameter `cmd` for cmd `eventhubs georecovery-alias show`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: updated property `options` from `['--authorization-rule-name']` to `['--authorization-rule-name', '--name', '-n']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule keys list|cmd `eventhubs georecovery-alias authorization-rule keys list` update parameter `authorization_rule_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias fail-over|cmd `eventhubs georecovery-alias fail-over` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias list|cmd `eventhubs georecovery-alias list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias authorization-rule list|cmd `eventhubs georecovery-alias authorization-rule list` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias break-pair|cmd `eventhubs georecovery-alias break-pair` update parameter `alias`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs namespace exists|cmd `eventhubs namespace exists` update parameter `name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` removed parameter `name`|please add back parameter `name` for cmd `eventhubs georecovery-alias exists`|\n|\u274cTrue|eventhubs georecovery-alias exists|cmd `eventhubs georecovery-alias exists` added parameter `alias`|please remove parameter `alias` for cmd `eventhubs georecovery-alias exists`|\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: updated property `options` from `['--alias']` to `['--alias', '-a']`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `id_part`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|eventhubs georecovery-alias delete|cmd `eventhubs georecovery-alias delete` update parameter `alias`: added property `type`||\n" - }, - { - "Module": "appservice", - "Status": "Warning", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|functionapp config set|cmd `functionapp config set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|functionapp config set|cmd `functionapp config set` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|functionapp create|cmd `functionapp create` added parameter `registry_server`||\n|\u26a0\ufe0fFalse|functionapp create|cmd `functionapp create` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|functionapp create|cmd `functionapp create` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|functionapp config container set|cmd `functionapp config container set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|functionapp config container set|cmd `functionapp config container set` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|webapp config set|cmd `webapp config set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|webapp config set|cmd `webapp config set` added parameter `max_replicas`||\n|\u26a0\ufe0fFalse|webapp config container set|cmd `webapp config container set` added parameter `min_replicas`||\n|\u26a0\ufe0fFalse|webapp config container set|cmd `webapp config container set` added parameter `max_replicas`||\n" - }, - { - "Module": "servicebus", - "Status": "Failed", - "Content": "|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n|\u26a0\ufe0fFalse|servicebus migration delete|cmd `servicebus migration delete` added||\n|\u26a0\ufe0fFalse|servicebus migration list|cmd `servicebus migration list` added||\n|\u26a0\ufe0fFalse|servicebus migration update|cmd `servicebus migration update` added||\n|\u26a0\ufe0fFalse|servicebus migration wait|cmd `servicebus migration wait` added||\n|\u274cTrue|servicebus migration start|cmd `servicebus migration start` added property `supports_no_wait`|please remove property `supports_no_wait` for cmd `servicebus migration start`|\n|\u26a0\ufe0fFalse|servicebus namespace exists|cmd `servicebus namespace exists` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` updated property `is_aaz` from `False` to `True`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` updated property `is_aaz` from `False` to `True`||\n|\u274cTrue|servicebus migration start|cmd `servicebus migration start` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration start`|\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `namespace_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: removed property `required`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `target_namespace`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: removed property `required`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `post_migration_name`: added property `type`||\n|\u274cTrue|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration start`|\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` update parameter `config_name`: added property `aaz_default`||\n|\u26a0\ufe0fFalse|servicebus migration start|cmd `servicebus migration start` added parameter `no_wait`||\n|\u274cTrue|servicebus namespace exists|cmd `servicebus namespace exists` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus namespace exists`|\n|\u26a0\ufe0fFalse|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus namespace exists|cmd `servicebus namespace exists` update parameter `name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration abort`|\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration abort|cmd `servicebus migration abort` update parameter `config_name`: added property `aaz_default`||\n|\u274cTrue|servicebus migration show|cmd `servicebus migration show` removed parameter `cmd`|please add back parameter `cmd` for cmd `servicebus migration show`|\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration show`|\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration show|cmd `servicebus migration show` update parameter `config_name`: added property `aaz_default`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: updated property `name` from `resource_group_name` to `resource_group`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `resource_group_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: updated property `options` from `['--namespace-name']` to `['--name', '--namespace-name', '-n']`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `namespace_name`: added property `type`||\n|\u274cTrue|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `choices`|please remove property `choices` for parameter `config_name` for cmd `servicebus migration complete`|\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `id_part`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `type`||\n|\u26a0\ufe0fFalse|servicebus migration complete|cmd `servicebus migration complete` update parameter `config_name`: added property `aaz_default`||\n" - } ] } ] diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 89ce4551960..513af0b355e 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -113,6 +113,8 @@ def get_pipeline_result(): "Content": "" } status = 'Warning' + # sort + # for item in items: if item['is_break']: status = 'Failed' From 212132d6728933854aa473eea145e231c85e8c87 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 14:31:03 +0800 Subject: [PATCH 41/68] Update breaking_change_test.json --- scripts/ci/breaking_change_test.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/ci/breaking_change_test.json b/scripts/ci/breaking_change_test.json index 4539346ded7..0ab7c4f8014 100644 --- a/scripts/ci/breaking_change_test.json +++ b/scripts/ci/breaking_change_test.json @@ -4,6 +4,11 @@ { "TestName": "AzureCLI-BreakingChangeTest", "Details": [ + { + "Module": "Non Breaking Changes", + "Status": "Succeeded", + "Content": "" + } ] } ] From b0ff816b1ae12521453b7b8839e50926e0bce48b Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Fri, 12 May 2023 14:48:24 +0800 Subject: [PATCH 42/68] update --- .azure-pipelines/breaking-change-tests.yml | 44 +++++++++++----------- scripts/ci/breaking_change_test.py | 17 +++++++-- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 7adb2c08a92..365958497f6 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -22,34 +22,34 @@ jobs: inputs: versionSpec: 3.10 - template: ${{ variables.Pipeline.Workspace }}/.azure-pipelines/templates/azdev_setup.yml -# - bash: | -# set -ev -# . env/bin/activate -# python scripts/ci/breaking_change_test.py -# breakingChangeTest='false' -# if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then -# breakingChangeTest='true' -# fi -# echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" -# displayName: "Breaking Change Test" -# env: -# SRC_BRANCH: $(system.pullRequest.targetBranchName) -# PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) -# JOB_NAME: "breaking_change_test" -# - task: PublishBuildArtifacts@1 -# condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) -# inputs: -# # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json -# PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' -# ArtifactName: 'breaking_change_test' -# publishLocation: 'Container' - bash: | set -ev . env/bin/activate - python scripts/ci/breaking_change_test2.py + python scripts/ci/breaking_change_test.py + breakingChangeTest='false' + if [[ -f '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ]]; then + breakingChangeTest='true' + fi + echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" + displayName: "Breaking Change Test" + env: + SRC_BRANCH: $(system.pullRequest.targetBranchName) + PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) + JOB_NAME: "breaking_change_test" - task: PublishBuildArtifacts@1 + condition: and(succeededOrFailed(), eq(variables.breakingChangeTest, 'true')) inputs: # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' ArtifactName: 'breaking_change_test' publishLocation: 'Container' +# - bash: | +# set -ev +# . env/bin/activate +# python scripts/ci/breaking_change_test2.py +# - task: PublishBuildArtifacts@1 +# inputs: +# # /mnt/vss/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json +# PathtoPublish: '/$(HOME)/.azdev/env_config/mnt/vss/_work/1/s/env/breaking_change_test.json' +# ArtifactName: 'breaking_change_test' +# publishLocation: 'Container' diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 513af0b355e..33705589620 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -113,18 +113,29 @@ def get_pipeline_result(): "Content": "" } status = 'Warning' - # sort - # - for item in items: + sorted_items = sorted(items, key=sort_by_content) + for item in sorted_items: if item['is_break']: status = 'Failed' breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) breaking_change['Status'] = status pipeline_result['breaking_change_test']['Details'][0]['Details'].append(breaking_change) + if not pipeline_result['breaking_change_test']['Details'][0]['Details']: + pipeline_result['breaking_change_test']['Details'][0]['Details'].append({ + "Module": "Non Breaking Changes", + "Status": "Succeeded", + "Content": "" + }) print(json.dumps(pipeline_result, indent=4)) return pipeline_result +def sort_by_content(item): + # Sort item by is_break, cmd_name and rule_message, + is_break = 0 if item['is_break'] else 1 + return is_break, item['cmd_name'], item['rule_message'] + + def build_markdown_content(cmd_name, is_break, rule_message, suggest_message, content): if content == "": content = f'|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n' From 27a27e4ffe608b915d1037d78de5edc890962075 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 11:54:21 +0800 Subject: [PATCH 43/68] Update breaking_change_test.py --- scripts/ci/breaking_change_test.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 33705589620..771976d2708 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -117,7 +117,7 @@ def get_pipeline_result(): for item in sorted_items: if item['is_break']: status = 'Failed' - breaking_change['Content'] = build_markdown_content(item['cmd_name'], item['is_break'], item['rule_message'], item['suggest_message'], breaking_change['Content']) + breaking_change['Content'] = build_markdown_content(item, breaking_change['Content']) breaking_change['Status'] = status pipeline_result['breaking_change_test']['Details'][0]['Details'].append(breaking_change) if not pipeline_result['breaking_change_test']['Details'][0]['Details']: @@ -133,13 +133,17 @@ def get_pipeline_result(): def sort_by_content(item): # Sort item by is_break, cmd_name and rule_message, is_break = 0 if item['is_break'] else 1 - return is_break, item['cmd_name'], item['rule_message'] + cmd_name = item['cmd_name'] if 'cmd_name' in item else item['subgroup_name'] + return is_break, cmd_name, item['rule_message'] -def build_markdown_content(cmd_name, is_break, rule_message, suggest_message, content): +def build_markdown_content(item, content): if content == "": content = f'|is_break|cmd_name|rule_message|suggest_message|\n|---|---|---|---|\n' - is_break = '❌True' if is_break else '⚠️False' + is_break = '❌True' if item['is_break'] else '⚠️False' + cmd_name = item['cmd_name'] if 'cmd_name' in item else item['subgroup_name'] + rule_message = item['rule_message'] + suggest_message = item['suggest_message'] content += f'|{is_break}|{cmd_name}|{rule_message}|{suggest_message}|\n' return content From d0e9d09717036fa27a9e7385857838400334c974 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 13:34:29 +0800 Subject: [PATCH 44/68] Empty From 5b773dc381eccb8475b871a8d3913650a0f1b124 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 15:06:37 +0800 Subject: [PATCH 45/68] update --- .github/azure-client-tools-bot/config.yml | 2 +- azure-pipelines.yml | 52 +++++++++++------------ scripts/ci/breaking_change_test.py | 6 +-- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/azure-client-tools-bot/config.yml b/.github/azure-client-tools-bot/config.yml index 343f271cd89..1f2d1f9f313 100644 --- a/.github/azure-client-tools-bot/config.yml +++ b/.github/azure-client-tools-bot/config.yml @@ -21,7 +21,7 @@ pull_request: Thanks for your contribution! - azure_pipeline: allow_list: - - "Azure.azure-cli Breaking Change Test" + - "wangzelin007.azure-cli Breaking Change Test" result_path: "/breaking_change_test/" group_by_keys: - "TestName" diff --git a/azure-pipelines.yml b/azure-pipelines.yml index dd3ae24e346..0df1e528ecf 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -202,7 +202,7 @@ jobs: - script: | set /p CLI_VERSION=<$(System.ArtifactsDirectory)/metadata/version set - + build_scripts/windows/scripts/build.cmd displayName: 'Build Windows MSI' @@ -251,7 +251,7 @@ jobs: } # The following are executed by elevated PowerShell az --version - + $InstallArgs = @( "/i" "`"$env:SYSTEM_ARTIFACTSDIRECTORY\msi\Microsoft Azure CLI.msi`"" @@ -279,7 +279,7 @@ jobs: # Test bundled pip with extension installation az extension add -n rdbms-connect az self-test - + Get-Content .\install_logs.txt - job: BuildDockerImage @@ -352,13 +352,13 @@ jobs: - bash: | set -exv - + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` IMAGE_NAME=clibuild$BUILD_BUILDNUMBER:latest TAR_FILE=$SYSTEM_ARTIFACTSDIRECTORY/docker/docker-azure-cli-$CLI_VERSION.tar - + echo "== Test docker image ==" - + docker load < $TAR_FILE docker run $IMAGE_NAME /bin/bash -c "time az self-test && time az --version && sleep 5" displayName: 'Bash Script' @@ -421,24 +421,24 @@ jobs: - bash: | #!/usr/bin/env bash - + # Verify the pip wheels - + set -ex - + CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` PYPI_FILES=$(cd $BUILD_ARTIFACTSTAGINGDIRECTORY/pypi; pwd) - + echo "== Testing pip install on Python 3.7 ==" docker run \ --rm -v $PYPI_FILES:/mnt/pypi python:3.7 \ /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - + echo "== Testing pip install on Python 3.9 ==" docker run \ --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - + echo "== Testing pip install on Python 3.10 ==" docker run \ --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ @@ -541,17 +541,17 @@ jobs: - bash: | #!/bin/bash - + root=$(cd $(dirname $0); pwd) - + set -evx - + CLI_VERSION=`cat $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata/version` HOMEBREW_UPSTREAM_URL=`curl -Ls -o /dev/null -w %{url_effective} https://api.github.com/repos/Azure/azure-cli/tarball/$BUILD_SOURCEVERSION` - + docker_files=$(cd $BUILD_SOURCESDIRECTORY/scripts/release/homebrew/docker; pwd) src_files=$(cd $BUILD_SOURCESDIRECTORY/src; pwd) - + echo "Generating formula in docker container ... " docker run -v $docker_files:/mnt/scripts \ -v $src_files:/mnt/src \ @@ -560,10 +560,10 @@ jobs: --name azurecli \ python:3.10 \ /mnt/scripts/run.sh - + # clean up rm -rf $BUILD_ARTIFACTSTAGINGDIRECTORY/metadata - + docker cp azurecli:azure-cli.rb $BUILD_ARTIFACTSTAGINGDIRECTORY/azure-cli.rb docker rm --force azurecli displayName: 'Build homebrew formula' @@ -603,16 +603,16 @@ jobs: - bash: | set -ev - + echo == Remove pre-installed azure-cli == brew uninstall azure-cli - + echo == Install azure-cli.rb formula == brew install --build-from-source $SYSTEM_ARTIFACTSDIRECTORY/homebrew/azure-cli.rb - + echo == Az Version == az --version - + echo == Run Self-Test == az self-test @@ -831,10 +831,10 @@ jobs: - bash: | set -ex - + CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` RPM_NAME=$(find $SYSTEM_ARTIFACTSDIRECTORY/rpm/ -type f -name "azure-cli-$CLI_VERSION-1.${DISTRO}.*.rpm" -printf '%f\n') - + echo "== Test rpm package on ${IMAGE} ==" docker pull $IMAGE docker run --rm -e RPM_NAME=$RPM_NAME -e PYTHON_PACKAGE=${PYTHON_PACKAGE} -e PYTHON_CMD=${PYTHON_CMD} -e PIP_CMD=${PIP_CMD} -v $SYSTEM_ARTIFACTSDIRECTORY/rpm:/mnt/rpm -v $(pwd):/azure-cli $IMAGE /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh" @@ -959,7 +959,7 @@ jobs: script: | set -exv CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version` - + echo "== Test debian package on ${DISTRO} ==" docker pull ${DISTRO_BASE_IMAGE} docker run --rm -e DISTRO=${DISTRO} -e CLI_VERSION=$CLI_VERSION -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts -v $(pwd):/azure-cli ${DISTRO_BASE_IMAGE} /bin/bash "/azure-cli/scripts/release/debian/test_deb_in_docker.sh" diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 771976d2708..1a4fe66c02b 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -26,9 +26,9 @@ # src_branch = os.environ.get('SRC_BRANCH', None) # refs/remotes/pull/24765/merge # target_branch = f'refs/remotes/pull/{pull_request_number}/merge' -base_meta_path = '/mnt/vss/_work/1/base_meta' -diff_meta_path = '/mnt/vss/_work/1/diff_meta' -output_path = '/mnt/vss/_work/1/output_meta' +base_meta_path = '~/_work/1/base_meta' +diff_meta_path = '~/_work/1/diff_meta' +output_path = '~/_work/1/output_meta' def get_diff_meta_files(): From 3b8f6c2e780275da4e49fd318bf07b3fa0bf38b3 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 15:20:39 +0800 Subject: [PATCH 46/68] Empty From 18318730cdb6f799105a0fc1d50d326011dc970c Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 17:55:46 +0800 Subject: [PATCH 47/68] update --- scripts/ci/breaking_change_test.py | 48 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 1a4fe66c02b..90d5516d538 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -21,47 +21,47 @@ pull_request_number = os.environ.get('PULL_REQUEST_NUMBER', None) job_name = os.environ.get('JOB_NAME', None) azdev_test_result_dir = os.path.expanduser("~/.azdev/env_config/mnt/vss/_work/1/s/env") -src_branch = 'azure-cli-2.48.1-test' -target_branch = 'dev' -# src_branch = os.environ.get('SRC_BRANCH', None) +# src_branch = 'azure-cli-2.48.1-test' +# target_branch = 'dev' +src_branch = os.environ.get('SRC_BRANCH', None) # refs/remotes/pull/24765/merge -# target_branch = f'refs/remotes/pull/{pull_request_number}/merge' +target_branch = f'refs/remotes/pull/{pull_request_number}/merge' base_meta_path = '~/_work/1/base_meta' diff_meta_path = '~/_work/1/diff_meta' output_path = '~/_work/1/output_meta' -def get_diff_meta_files(): - cmd = ['git', 'fetch', '--all', '--tags', '--prune'] - print(cmd) - subprocess.run(cmd) - cmd = ['git', 'checkout', src_branch] - print(cmd) - subprocess.run(cmd) - cmd = ['git', 'checkout', target_branch] - print(cmd) - subprocess.run(cmd) - cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] - print(cmd) - subprocess.run(cmd) - # refs/remotes/pull/24765/merge - cmd = ['azdev', 'command-change', 'meta-export', '--src', src_branch, '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] - print(cmd) - subprocess.run(cmd) - - # def get_diff_meta_files(): +# cmd = ['git', 'fetch', '--all', '--tags', '--prune'] +# print(cmd) +# subprocess.run(cmd) # cmd = ['git', 'checkout', src_branch] # print(cmd) # subprocess.run(cmd) # cmd = ['git', 'checkout', target_branch] # print(cmd) # subprocess.run(cmd) -# cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] +# cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] +# print(cmd) +# subprocess.run(cmd) +# # refs/remotes/pull/24765/merge +# cmd = ['azdev', 'command-change', 'meta-export', '--src', src_branch, '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] # print(cmd) # subprocess.run(cmd) +def get_diff_meta_files(): + cmd = ['git', 'checkout', src_branch] + print(cmd) + subprocess.run(cmd) + cmd = ['git', 'checkout', target_branch] + print(cmd) + subprocess.run(cmd) + cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] + print(cmd) + subprocess.run(cmd) + + def get_base_meta_files(): cmd = ['git', 'checkout', src_branch] print(cmd) From cc9a146e50c3a5456be59f675bf572ee6fa3194a Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 18:20:14 +0800 Subject: [PATCH 48/68] update --- scripts/ci/breaking_change_test.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 90d5516d538..001d53f7432 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -51,6 +51,12 @@ def get_diff_meta_files(): + cmd = ['git', 'rev-parse', '--abbrev-ref', 'HEAD'] + print(cmd) + subprocess.run(cmd) + cmd = ['git', 'branch', '--show-current'] + print(cmd) + subprocess.run(cmd) cmd = ['git', 'checkout', src_branch] print(cmd) subprocess.run(cmd) @@ -161,10 +167,10 @@ def main(): if pull_request_number != '$(System.PullRequest.PullRequestNumber)': logger.info("Start breaking change test ...\n") get_diff_meta_files() - get_base_meta_files() - meta_diff() - pipeline_result = get_pipeline_result() - save_pipeline_result(pipeline_result) + # get_base_meta_files() + # meta_diff() + # pipeline_result = get_pipeline_result() + # save_pipeline_result(pipeline_result) if __name__ == '__main__': From d75560611805649d6c9efb81edbc15fb780112b1 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 18:30:24 +0800 Subject: [PATCH 49/68] update --- scripts/ci/breaking_change_test.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 001d53f7432..74848fb9659 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -54,9 +54,15 @@ def get_diff_meta_files(): cmd = ['git', 'rev-parse', '--abbrev-ref', 'HEAD'] print(cmd) subprocess.run(cmd) + cmd = ['git', 'rev-parse', 'HEAD'] + print(cmd) + subprocess.run(cmd) cmd = ['git', 'branch', '--show-current'] print(cmd) subprocess.run(cmd) + cmd = ['git', 'rev-parse', 'HEAD'] + print(cmd) + subprocess.run(cmd) cmd = ['git', 'checkout', src_branch] print(cmd) subprocess.run(cmd) From 2b0a043af6b8561a0792046202ddb24abd35648d Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 18:44:41 +0800 Subject: [PATCH 50/68] update --- .azure-pipelines/breaking-change-tests.yml | 3 +- scripts/ci/breaking_change_test.py | 35 +++++++++++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 365958497f6..430b49ddbe3 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -33,7 +33,8 @@ jobs: echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" displayName: "Breaking Change Test" env: - SRC_BRANCH: $(system.pullRequest.targetBranchName) + PR_SRC_BRANCH: $(system.pullRequest.sourceBranchName) + PR_TARGET_BRANCH: $(system.pullRequest.targetBranchName) PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) JOB_NAME: "breaking_change_test" - task: PublishBuildArtifacts@1 diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 74848fb9659..c283153ca50 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -23,9 +23,13 @@ azdev_test_result_dir = os.path.expanduser("~/.azdev/env_config/mnt/vss/_work/1/s/env") # src_branch = 'azure-cli-2.48.1-test' # target_branch = 'dev' -src_branch = os.environ.get('SRC_BRANCH', None) +# src_branch = os.environ.get('SRC_BRANCH', None) # refs/remotes/pull/24765/merge -target_branch = f'refs/remotes/pull/{pull_request_number}/merge' +# target_branch = f'refs/remotes/pull/{pull_request_number}/merge' +PR_SRC_BRANCH = os.environ.get('PR_SRC_BRANCH', None) +PR_TARGET_BRANCH = os.environ.get('PR_TARGET_BRANCH', None) +print(f'PR_SRC_BRANCH: {PR_SRC_BRANCH}') +print(f'PR_TARGET_BRANCH: {PR_TARGET_BRANCH}') base_meta_path = '~/_work/1/base_meta' diff_meta_path = '~/_work/1/diff_meta' output_path = '~/_work/1/output_meta' @@ -57,21 +61,30 @@ def get_diff_meta_files(): cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) subprocess.run(cmd) - cmd = ['git', 'branch', '--show-current'] + cmd = ['git', 'checkout', 'dev'] print(cmd) subprocess.run(cmd) - cmd = ['git', 'rev-parse', 'HEAD'] - print(cmd) - subprocess.run(cmd) - cmd = ['git', 'checkout', src_branch] - print(cmd) - subprocess.run(cmd) - cmd = ['git', 'checkout', target_branch] + cmd = ['git', 'rev-parse', '--abbrev-ref', 'HEAD'] print(cmd) subprocess.run(cmd) - cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] + cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) subprocess.run(cmd) + # cmd = ['git', 'branch', '--show-current'] + # print(cmd) + # subprocess.run(cmd) + # cmd = ['git', 'rev-parse', 'HEAD'] + # print(cmd) + # subprocess.run(cmd) + # cmd = ['git', 'checkout', src_branch] + # print(cmd) + # subprocess.run(cmd) + # cmd = ['git', 'checkout', target_branch] + # print(cmd) + # subprocess.run(cmd) + # cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] + # print(cmd) + # subprocess.run(cmd) def get_base_meta_files(): From 5b1c529ed9be0f6c7472a6a7d9576eae9464e386 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 18:51:41 +0800 Subject: [PATCH 51/68] update --- .azure-pipelines/breaking-change-tests.yml | 4 ++++ scripts/ci/breaking_change_test.py | 1 + 2 files changed, 5 insertions(+) diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 430b49ddbe3..4c99fbd688a 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -17,6 +17,10 @@ jobs: pool: name: ${{ variables.ubuntu_pool }} steps: + - checkout: self + fetchDepth: 0 + fetchTags: true + persistCredentials: true - task: UsePythonVersion@0 displayName: 'Use Python 3.10' inputs: diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index c283153ca50..72ff463fb1e 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -70,6 +70,7 @@ def get_diff_meta_files(): cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) subprocess.run(cmd) + # cmd = ['git', 'branch', '--show-current'] # print(cmd) # subprocess.run(cmd) From 5b9fbd4a34dd7aface096e783ff60785e1b7758e Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 18:54:39 +0800 Subject: [PATCH 52/68] update --- scripts/ci/breaking_change_test.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 72ff463fb1e..3fdc2466764 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -60,7 +60,9 @@ def get_diff_meta_files(): subprocess.run(cmd) cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) - subprocess.run(cmd) + output = subprocess.run(cmd) + commit_id = output.stdout.decode('utf-8').strip() + print(f'commit_id: {commit_id}') cmd = ['git', 'checkout', 'dev'] print(cmd) subprocess.run(cmd) From eb1e99bacb37482e5d44f340274c6bb5c3c9bc0b Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 19:13:22 +0800 Subject: [PATCH 53/68] update --- .azure-pipelines/breaking-change-tests.yml | 4 ++-- scripts/ci/breaking_change_test.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.azure-pipelines/breaking-change-tests.yml b/.azure-pipelines/breaking-change-tests.yml index 4c99fbd688a..2724c6f1c08 100644 --- a/.azure-pipelines/breaking-change-tests.yml +++ b/.azure-pipelines/breaking-change-tests.yml @@ -37,8 +37,8 @@ jobs: echo "##vso[task.setvariable variable=breakingChangeTest]$breakingChangeTest" displayName: "Breaking Change Test" env: - PR_SRC_BRANCH: $(system.pullRequest.sourceBranchName) - PR_TARGET_BRANCH: $(system.pullRequest.targetBranchName) + PR_SRC_BRANCH: $(System.PullRequest.SourceBranch) + PR_TARGET_BRANCH: $(System.PullRequest.TargetBranch) PULL_REQUEST_NUMBER: $(System.PullRequest.PullRequestNumber) JOB_NAME: "breaking_change_test" - task: PublishBuildArtifacts@1 diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 3fdc2466764..96574432de2 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -60,8 +60,8 @@ def get_diff_meta_files(): subprocess.run(cmd) cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) - output = subprocess.run(cmd) - commit_id = output.stdout.decode('utf-8').strip() + out = subprocess.run(cmd, capture_output=True) + commit_id = json.loads(out.stdout) print(f'commit_id: {commit_id}') cmd = ['git', 'checkout', 'dev'] print(cmd) From fcaba047899e9ad4638895eef8a0254db0d95df9 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 19:18:31 +0800 Subject: [PATCH 54/68] update --- scripts/ci/breaking_change_test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 96574432de2..e8eec7c5047 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -61,8 +61,7 @@ def get_diff_meta_files(): cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) out = subprocess.run(cmd, capture_output=True) - commit_id = json.loads(out.stdout) - print(f'commit_id: {commit_id}') + print(out.stdout) cmd = ['git', 'checkout', 'dev'] print(cmd) subprocess.run(cmd) From 4854ffc3d4b9b94d6a72bbc4155a700ed66fffb0 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 19:31:15 +0800 Subject: [PATCH 55/68] update --- scripts/ci/breaking_change_test.py | 36 ++++-------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index e8eec7c5047..7c9ee599e1b 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -23,13 +23,8 @@ azdev_test_result_dir = os.path.expanduser("~/.azdev/env_config/mnt/vss/_work/1/s/env") # src_branch = 'azure-cli-2.48.1-test' # target_branch = 'dev' -# src_branch = os.environ.get('SRC_BRANCH', None) -# refs/remotes/pull/24765/merge -# target_branch = f'refs/remotes/pull/{pull_request_number}/merge' -PR_SRC_BRANCH = os.environ.get('PR_SRC_BRANCH', None) -PR_TARGET_BRANCH = os.environ.get('PR_TARGET_BRANCH', None) -print(f'PR_SRC_BRANCH: {PR_SRC_BRANCH}') -print(f'PR_TARGET_BRANCH: {PR_TARGET_BRANCH}') +src_branch = os.environ.get('PR_TARGET_BRANCH', None) +target_branch = 'merged_pr' base_meta_path = '~/_work/1/base_meta' diff_meta_path = '~/_work/1/diff_meta' output_path = '~/_work/1/output_meta' @@ -55,38 +50,15 @@ def get_diff_meta_files(): - cmd = ['git', 'rev-parse', '--abbrev-ref', 'HEAD'] + cmd = ['git', 'checkout', '-b', target_branch] print(cmd) subprocess.run(cmd) cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) - out = subprocess.run(cmd, capture_output=True) - print(out.stdout) - cmd = ['git', 'checkout', 'dev'] - print(cmd) subprocess.run(cmd) - cmd = ['git', 'rev-parse', '--abbrev-ref', 'HEAD'] + cmd = ['azdev', 'command-change', 'meta-export', '--src', src_branch, '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] print(cmd) subprocess.run(cmd) - cmd = ['git', 'rev-parse', 'HEAD'] - print(cmd) - subprocess.run(cmd) - - # cmd = ['git', 'branch', '--show-current'] - # print(cmd) - # subprocess.run(cmd) - # cmd = ['git', 'rev-parse', 'HEAD'] - # print(cmd) - # subprocess.run(cmd) - # cmd = ['git', 'checkout', src_branch] - # print(cmd) - # subprocess.run(cmd) - # cmd = ['git', 'checkout', target_branch] - # print(cmd) - # subprocess.run(cmd) - # cmd = ['azdev', 'command-change', 'meta-export', '--src', 'dev', '--tgt', target_branch, '--repo', get_cli_repo_path(), '--meta-output-path', diff_meta_path] - # print(cmd) - # subprocess.run(cmd) def get_base_meta_files(): From 18c3c059568bc38fdae8221e8fb9b70c7603d96f Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 19:37:29 +0800 Subject: [PATCH 56/68] update --- scripts/ci/breaking_change_test.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index 7c9ee599e1b..b45a4767e03 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -53,6 +53,12 @@ def get_diff_meta_files(): cmd = ['git', 'checkout', '-b', target_branch] print(cmd) subprocess.run(cmd) + cmd = ['git', 'checkout', src_branch] + print(cmd) + subprocess.run(cmd) + cmd = ['git', 'checkout', target_branch] + print(cmd) + subprocess.run(cmd) cmd = ['git', 'rev-parse', 'HEAD'] print(cmd) subprocess.run(cmd) From 0ff8716fcc4097a04591d63a2a5e03b410d6a2b2 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Wed, 17 May 2023 19:42:57 +0800 Subject: [PATCH 57/68] update --- scripts/ci/breaking_change_test.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/ci/breaking_change_test.py b/scripts/ci/breaking_change_test.py index b45a4767e03..a3a76e15cfb 100644 --- a/scripts/ci/breaking_change_test.py +++ b/scripts/ci/breaking_change_test.py @@ -71,6 +71,9 @@ def get_base_meta_files(): cmd = ['git', 'checkout', src_branch] print(cmd) subprocess.run(cmd) + cmd = ['git', 'rev-parse', 'HEAD'] + print(cmd) + subprocess.run(cmd) cmd = ['azdev', 'setup', '--cli', get_cli_repo_path()] print(cmd) subprocess.run(cmd) @@ -166,10 +169,10 @@ def main(): if pull_request_number != '$(System.PullRequest.PullRequestNumber)': logger.info("Start breaking change test ...\n") get_diff_meta_files() - # get_base_meta_files() - # meta_diff() - # pipeline_result = get_pipeline_result() - # save_pipeline_result(pipeline_result) + get_base_meta_files() + meta_diff() + pipeline_result = get_pipeline_result() + save_pipeline_result(pipeline_result) if __name__ == '__main__': From ee79cd6925ffaf796b5fe1fb4eb4bc9b6920dbc8 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 12:10:39 +0800 Subject: [PATCH 58/68] Empty From d0bc7b2ecfc1d6fb7b7b93f75c3688af69570fea Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 12:20:03 +0800 Subject: [PATCH 59/68] Empty From bcf47371667467589144d756162e9a039956e7c8 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 12:46:41 +0800 Subject: [PATCH 60/68] Empty From 0fe01f922aa80e0f3f910e88021145d21229f7b8 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 13:38:04 +0800 Subject: [PATCH 61/68] Empty From e4db27298a9a40d8d2227af00e7bdd197d872adb Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 13:48:36 +0800 Subject: [PATCH 62/68] Empty From acd9bd1002936f3e2f170d09c81172f9c6182809 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 14:33:23 +0800 Subject: [PATCH 63/68] Empty From 07f73504fe9da6f37733770c4ec9b4984c269404 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 14:50:45 +0800 Subject: [PATCH 64/68] Empty From 9cc22e50cb062ce4b7d9ff43a7b15b49d4498b9f Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 15:00:00 +0800 Subject: [PATCH 65/68] Empty From 7ea302bfad488d0a1f5394e9d1879a6781651f9c Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 15:43:02 +0800 Subject: [PATCH 66/68] Empty From ba70cc3d60bb648e1dfbebecff717d48eeead275 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 16:16:41 +0800 Subject: [PATCH 67/68] Empty From 1b58b1db4edaeeb5192b9d99cd35cf52f5eb2721 Mon Sep 17 00:00:00 2001 From: ZelinWang Date: Thu, 18 May 2023 16:39:43 +0800 Subject: [PATCH 68/68] Empty