зеркало из https://github.com/microsoft/azure-cli.git
915 строки
25 KiB
YAML
915 строки
25 KiB
YAML
resources:
|
|
- repo: self
|
|
|
|
trigger:
|
|
batch: true
|
|
branches:
|
|
include:
|
|
- '*'
|
|
|
|
pr:
|
|
branches:
|
|
include:
|
|
- '*'
|
|
|
|
jobs:
|
|
- job: CheckPullRequestTitle
|
|
displayName: "Check the Format of Pull Request Title"
|
|
condition: and(succeeded(), in(variables['System.PullRequest.TargetBranch'], 'dev', 'release'))
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
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')
|
|
if [ "$(System.PullRequest.TargetBranch)" != "release" ] && echo $title | grep -iqF hotfix:; then
|
|
echo "Hotfix PR should target release branch."
|
|
exit 1
|
|
fi
|
|
[[ $title =~ ^(\[.*\]|\{.*\}).* ]] && exit 0
|
|
echo "Pull Request title should follow https://aka.ms/submitAzPR"
|
|
exit 1
|
|
|
|
- job: RejectPullRequestToMasterBranch
|
|
displayName: "Reject Pull Request To Master Branch"
|
|
condition: and(succeeded(), eq(variables['System.PullRequest.TargetBranch'], 'master'))
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- bash: |
|
|
echo "Reject pull request directly to master branch"
|
|
exit 1
|
|
|
|
- job: CredScan
|
|
displayName: "Credential Scan"
|
|
pool:
|
|
vmImage: "windows-2019"
|
|
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'
|
|
- task: ms-codeanalysis.vss-microsoft-security-code-analysis-devops.build-task-postanalysis.PostAnalysis@1
|
|
displayName: 'Post Analysis'
|
|
inputs:
|
|
AllTools: false
|
|
BinSkim: false
|
|
CredScan: true
|
|
RoslynAnalyzers: false
|
|
TSLint: false
|
|
ToolLogsNotFoundAction: 'Standard'
|
|
|
|
- job: ExtractMetadata
|
|
displayName: Extract Metadata
|
|
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
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:
|
|
vmImage: 'ubuntu-20.04'
|
|
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3'
|
|
inputs:
|
|
versionSpec: 3.x
|
|
|
|
- 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-10.14'
|
|
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3'
|
|
inputs:
|
|
versionSpec: 3.x
|
|
|
|
- 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:
|
|
vmImage: 'vs2017-win2016'
|
|
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3'
|
|
inputs:
|
|
versionSpec: 3.9
|
|
|
|
- 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:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3.9'
|
|
inputs:
|
|
versionSpec: 3.9
|
|
- 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:
|
|
vmImage: 'vs2017-win2016'
|
|
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: 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:
|
|
vmImage: 'vs2017-win2016'
|
|
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()
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: Bash@3
|
|
displayName: 'Bash Script'
|
|
inputs:
|
|
targetType: 'filePath'
|
|
filePath: scripts/release/docker/pipeline.sh
|
|
|
|
|
|
- task: PublishPipelineArtifact@0
|
|
displayName: 'Publish Artifact: docker image'
|
|
inputs:
|
|
TargetPath: $(Build.ArtifactStagingDirectory)
|
|
ArtifactName: docker
|
|
|
|
- job: TestDockerImage
|
|
displayName: Test Docker Image
|
|
|
|
dependsOn: BuildDockerImage
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
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: 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:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3.9'
|
|
inputs:
|
|
versionSpec: 3.9
|
|
|
|
|
|
- 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: PublishPipelineArtifact@0
|
|
displayName: 'Publish Artifact: pypi'
|
|
inputs:
|
|
TargetPath: $(Build.ArtifactStagingDirectory)
|
|
ArtifactName: pypi
|
|
|
|
- job: TestPythonWheel
|
|
displayName: Test Python Wheels
|
|
|
|
dependsOn: BuildPythonWheel
|
|
condition: succeeded()
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
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.6 =="
|
|
docker run \
|
|
--rm -v $PYPI_FILES:/mnt/pypi python:3.6 \
|
|
/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.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.8 =="
|
|
docker run \
|
|
--rm -v $PYPI_FILES:/mnt/pypi python:3.8 \
|
|
/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"
|
|
|
|
displayName: 'Test pip Install'
|
|
|
|
- job: TestCore
|
|
displayName: Unit Test for Core
|
|
timeoutInMinutes: 10
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
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:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
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:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
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: AutomationTest
|
|
displayName: Automation Test (Profile Latest)
|
|
timeoutInMinutes: 120
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
steps:
|
|
- template: .azure-pipelines/templates/automation_test.yml
|
|
parameters:
|
|
pythonVersion: '$(python.version)'
|
|
profile: 'latest'
|
|
|
|
- job: AutomationTest20200901
|
|
displayName: Automation Test (Profile 2020-09-01)
|
|
timeoutInMinutes: 120
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
steps:
|
|
- template: .azure-pipelines/templates/automation_test.yml
|
|
parameters:
|
|
pythonVersion: '$(python.version)'
|
|
profile: '2020-09-01-hybrid'
|
|
|
|
- job: AutomationTest20190301
|
|
displayName: Automation Test (Profile 2019-03-01)
|
|
timeoutInMinutes: 120
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
steps:
|
|
- template: .azure-pipelines/templates/automation_test.yml
|
|
parameters:
|
|
pythonVersion: '$(python.version)'
|
|
profile: '2019-03-01-hybrid'
|
|
|
|
- job: AutomationTest20180301
|
|
displayName: Automation Test (Profile 2018-03-01)
|
|
timeoutInMinutes: 120
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
steps:
|
|
- template: .azure-pipelines/templates/automation_test.yml
|
|
parameters:
|
|
pythonVersion: '$(python.version)'
|
|
profile: '2018-03-01-hybrid'
|
|
|
|
- job: TestExtensionsLoading
|
|
displayName: Test Extensions Loading
|
|
condition: succeeded()
|
|
timeoutInMinutes: 20
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Python38:
|
|
python.version: '3.8'
|
|
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:
|
|
vmImage: 'ubuntu-20.04'
|
|
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.6 \
|
|
/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: 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-10.14'
|
|
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-10.14'
|
|
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: BuildYumPackage
|
|
displayName: Build Yum Package
|
|
|
|
dependsOn: BuildPythonWheel
|
|
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule'))
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: Bash@3
|
|
displayName: 'Build Rpm Package'
|
|
inputs:
|
|
targetType: 'filePath'
|
|
filePath: scripts/release/rpm/pipeline.sh
|
|
|
|
|
|
- task: PublishPipelineArtifact@0
|
|
displayName: 'Publish Artifact: yum'
|
|
inputs:
|
|
TargetPath: $(Build.ArtifactStagingDirectory)
|
|
ArtifactName: yum
|
|
|
|
- job: TestYumPackage
|
|
displayName: Test Yum Package
|
|
|
|
dependsOn: BuildYumPackage
|
|
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule'))
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
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)/yum'
|
|
artifactName: yum
|
|
|
|
|
|
- bash: |
|
|
set -ex
|
|
|
|
CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version`
|
|
YUM_NAME=azure-cli-$CLI_VERSION-1.el7.x86_64.rpm
|
|
YUM_FILE=$SYSTEM_ARTIFACTSDIRECTORY/yum/$YUM_NAME
|
|
|
|
echo "== Test yum package on CentOS =="
|
|
|
|
docker pull centos:centos8
|
|
docker run --rm -e YUM_NAME=$YUM_NAME -v $SYSTEM_ARTIFACTSDIRECTORY/yum:/mnt/yum -v $(pwd):/azure-cli centos:centos8 /bin/bash "/azure-cli/scripts/release/rpm/test_rpm_in_docker.sh"
|
|
|
|
displayName: 'Test Yum Package'
|
|
|
|
- job: BuildDebPackages
|
|
displayName: Build Deb Packages
|
|
|
|
dependsOn: BuildPythonWheel
|
|
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule'))
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
strategy:
|
|
matrix:
|
|
Xenial:
|
|
deb_system: ubuntu
|
|
distro: xenial
|
|
Trusty:
|
|
deb_system: ubuntu
|
|
distro: trusty
|
|
Bionic:
|
|
deb_system: ubuntu
|
|
distro: bionic
|
|
Focal:
|
|
deb_system: ubuntu
|
|
distro: focal
|
|
Groovy:
|
|
deb_system: ubuntu
|
|
distro: groovy
|
|
Jessie:
|
|
deb_system: debian
|
|
distro: jessie
|
|
Stretch:
|
|
deb_system: debian
|
|
distro: stretch
|
|
Buster:
|
|
deb_system: debian
|
|
distro: buster
|
|
steps:
|
|
- task: DownloadPipelineArtifact@1
|
|
displayName: 'Download Build Artifacts'
|
|
inputs:
|
|
TargetPath: '$(Build.ArtifactStagingDirectory)/pypi'
|
|
artifactName: pypi
|
|
|
|
- task: Bash@3
|
|
displayName: 'Build $(deb_system) $(distro) Package'
|
|
inputs:
|
|
targetType: 'filePath'
|
|
filePath: scripts/release/debian/pipeline.sh
|
|
env:
|
|
DISTRO: $(distro)
|
|
DISTRO_BASE_IMAGE: $(deb_system):$(distro)
|
|
|
|
- task: PublishPipelineArtifact@0
|
|
displayName: 'Publish Artifact: debian'
|
|
inputs:
|
|
TargetPath: $(Build.ArtifactStagingDirectory)
|
|
ArtifactName: $(deb_system)-$(distro)
|
|
|
|
- job: TestDebPackages
|
|
displayName: Test Deb Packages
|
|
|
|
dependsOn:
|
|
- BuildDebPackages
|
|
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual', 'Schedule'))
|
|
strategy:
|
|
matrix:
|
|
Focal:
|
|
deb_system: ubuntu
|
|
distro: focal
|
|
Buster:
|
|
deb_system: debian
|
|
distro: buster
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: DownloadPipelineArtifact@1
|
|
displayName: 'Download Metadata'
|
|
inputs:
|
|
TargetPath: '$(Build.ArtifactStagingDirectory)/metadata'
|
|
artifactName: metadata
|
|
|
|
- task: DownloadPipelineArtifact@1
|
|
displayName: 'Download $(deb_system):$(distro) Build'
|
|
inputs:
|
|
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
|
|
artifactName: $(deb_system)-$(distro)
|
|
|
|
- task: Bash@3
|
|
displayName: 'Test $(deb_system) $(distro) Package'
|
|
env:
|
|
DISTRO: $(distro)
|
|
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"
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3.9'
|
|
inputs:
|
|
versionSpec: 3.9
|
|
- template: .azure-pipelines/templates/azdev_setup.yml
|
|
- bash: |
|
|
set -ev
|
|
. env/bin/activate
|
|
azdev style
|
|
|
|
- job: CheckHeaders
|
|
displayName: "Check License, History, and DocMap"
|
|
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3.9'
|
|
inputs:
|
|
versionSpec: 3.9
|
|
- 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:
|
|
Python36:
|
|
python.version: '3.6'
|
|
Python38:
|
|
python.version: '3.8'
|
|
Python39:
|
|
python.version: '3.9'
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
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:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3.9'
|
|
inputs:
|
|
versionSpec: 3.9
|
|
- template: .azure-pipelines/templates/azdev_setup.yml
|
|
- bash: |
|
|
set -ev
|
|
. env/bin/activate
|
|
python scripts/ci/service_name.py
|
|
if [[ "$(System.PullRequest.TargetBranch)" != "" ]]; then
|
|
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: VerifySphinxDocumentGenerator
|
|
displayName: "Verify Sphinx Document Generator"
|
|
pool:
|
|
vmImage: 'ubuntu-20.04'
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
displayName: 'Use Python 3.9'
|
|
inputs:
|
|
versionSpec: 3.9
|
|
- bash: pip install --upgrade pip wheel
|
|
displayName: "Install pip and wheel"
|
|
- bash: ./scripts/ci/test_ref_doc.sh
|
|
displayName: "Verify Sphinx Document Generator"
|