Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
171 changes: 55 additions & 116 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -629,8 +629,8 @@ jobs:

displayName: 'Test Yum Package'

- job: BuildUbuntuPackages
displayName: Build Ubuntu Packages
- job: BuildDebPackages
displayName: Build Deb Packages

dependsOn: BuildPythonWheel
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual'))
Expand All @@ -639,82 +639,83 @@ jobs:
strategy:
matrix:
Xenial:
deb_system: ubuntu
distro: xenial
Trusty:
deb_system: ubuntu
distro: trusty
Bionic:
deb_system: ubuntu
distro: bionic
Eoan:
deb_system: ubuntu
distro: eoan
Focal:
deb_system: ubuntu
distro: focal
steps:
- task: DownloadPipelineArtifact@1
displayName: 'Download Build Artifacts'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/pypi'
artifactName: pypi

- task: Bash@3
displayName: 'Build Ubuntu $(distro) Package'
inputs:
targetType: 'filePath'
filePath: scripts/release/debian/pipeline.sh
env:
DISTRO: $(distro)
DISTRO_BASE_IMAGE: ubuntu:$(distro)

- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: debian'
inputs:
TargetPath: $(Build.ArtifactStagingDirectory)
ArtifactName: ubuntu-$(distro)

- job: BuildDebianPackages
displayName: Build Debian Packages

dependsOn: BuildPythonWheel
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual'))
pool:
vmImage: 'ubuntu-16.04'
strategy:
matrix:
Jessie:
deb_system: debian
distro: jessie
Stretch:
deb_system: debian
distro: stretch
Buster:
distro: 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 Debian $(distro) Package'
displayName: 'Build $(deb_system) $(distro) Package'
inputs:
targetType: 'filePath'
filePath: scripts/release/debian/pipeline.sh
env:
DISTRO: $(distro)
DISTRO_BASE_IMAGE: debian:$(distro)
DISTRO_BASE_IMAGE: $(deb_system):$(distro)

- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: debian'
inputs:
TargetPath: $(Build.ArtifactStagingDirectory)
ArtifactName: debian-$(distro)
ArtifactName: $(deb_system)-$(distro)

- job: TestDebPackages
displayName: Test Deb Packages

dependsOn:
- BuildUbuntuPackages
- BuildDebianPackages
- BuildDebPackages
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'Manual'))
strategy:
matrix:
Xenial:
deb_system: ubuntu
distro: xenial
Trusty:
deb_system: ubuntu
distro: trusty
Bionic:
deb_system: ubuntu
distro: bionic
Eoan:
deb_system: ubuntu
distro: eoan
Focal:
deb_system: ubuntu
distro: focal
Jessie:
deb_system: debian
distro: jessie
Stretch:
deb_system: debian
distro: stretch
Buster:
deb_system: debian
distro: buster
pool:
vmImage: 'ubuntu-16.04'
steps:
Expand All @@ -725,86 +726,24 @@ jobs:
artifactName: metadata

- task: DownloadPipelineArtifact@1
displayName: 'Download Debian:Stretch Build'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: debian-stretch

- task: DownloadPipelineArtifact@1
displayName: 'Download Debian:Buster Build'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: debian-buster

- task: DownloadPipelineArtifact@1
displayName: 'Download Debian:Jessie Builds'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: debian-jessie

- task: DownloadPipelineArtifact@1
displayName: 'Download Ubuntu:Bionic Builds'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: ubuntu-bionic

- task: DownloadPipelineArtifact@1
displayName: 'Download Ubuntu:Xenial Builds'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: ubuntu-xenial

- task: DownloadPipelineArtifact@1
displayName: 'Download Ubuntu:Trusty Builds'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: ubuntu-trusty

- task: DownloadPipelineArtifact@1
displayName: 'Download Ubuntu:Eoan Builds'
displayName: 'Download $(deb_system):$(distro) Build'
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: ubuntu-eoan
artifactName: $(deb_system)-$(distro)

- task: DownloadPipelineArtifact@1
displayName: 'Download Ubuntu:Focal Builds'
- task: Bash@3
displayName: 'Test $(deb_system) $(distro) Package'
env:
DISTRO: $(distro)
DISTRO_BASE_IMAGE: $(deb_system):$(distro)
inputs:
TargetPath: '$(Build.ArtifactStagingDirectory)/debian'
artifactName: ubuntu-focal

- bash: |
set -exv

CLI_VERSION=`cat $SYSTEM_ARTIFACTSDIRECTORY/metadata/version`

DISTROS=(jessie stretch xenial trusty)
BASE_IMAGES=(debian:jessie debian:stretch ubuntu:xenial ubuntu:trusty)

# Distros that don't require libssl1.1
for i in ${!DISTROS[@]}; do
echo "== Test debian package on ${DISTROS[$i]} =="

DEB_FILE=$SYSTEM_ARTIFACTSDIRECTORY/debian/azure-cli_$CLI_VERSION-1~${DISTROS[$i]}_all.deb

docker pull ${BASE_IMAGES[$i]}

docker run --rm -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts ${BASE_IMAGES[$i]} /bin/bash -c "apt-get update && apt-get install -y apt-transport-https && dpkg -i /mnt/artifacts/azure-cli_$CLI_VERSION-1~${DISTROS[$i]}_all.deb && time az self-test && time az --version && sleep 5"
done

# Distros that do require libssl1.1
DISTROS=(bionic buster eoan focal)
BASE_IMAGES=(ubuntu:bionic debian:buster ubuntu:eoan ubuntu:focal)

for i in ${!DISTROS[@]}; do
echo "== Test debian package on ${DISTROS[$i]} =="

DEB_FILE=$SYSTEM_ARTIFACTSDIRECTORY/debian/azure-cli_$CLI_VERSION-1~${DISTROS[$i]}_all.deb

docker pull ${BASE_IMAGES[$i]}

docker run --rm -v $SYSTEM_ARTIFACTSDIRECTORY/debian:/mnt/artifacts ${BASE_IMAGES[$i]} /bin/bash -c "apt-get update && apt-get install -y libssl1.1 apt-transport-https && dpkg -i /mnt/artifacts/azure-cli_$CLI_VERSION-1~${DISTROS[$i]}_all.deb && time az self-test && time az --version && sleep 5"
done
displayName: 'Bash Script'
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"
Expand Down
33 changes: 33 additions & 0 deletions scripts/release/debian/test_deb_in_docker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash

# This script should be run in a ubuntu/debian docker.
set -exv

export USERNAME=azureuser

apt update
apt install -y apt-transport-https git

# The distros that need libssl1.1
case ${DISTRO} in
bionic|buster|eoan|focal) apt install -y libssl1.1;;
*) :;;
esac

dpkg -i /mnt/artifacts/azure-cli_$CLI_VERSION-1~${DISTRO}_all.deb

time az self-test
time az --version

cd /azure-cli/
/opt/az/bin/python3 -m pip install wheel
ln -sf /opt/az/bin/python3 /usr/bin/python
./scripts/ci/build.sh

/opt/az/bin/python3 -m pip install pytest
/opt/az/bin/python3 -m pip install pytest-xdist

find /azure-cli/artifacts/build -name "azure_cli_testsdk*" | xargs /opt/az/bin/python3 -m pip install --upgrade --ignore-installed
find /azure-cli/artifacts/build -name "azure_cli_fulltest*" | xargs /opt/az/bin/python3 -m pip install --upgrade --ignore-installed --no-deps

/opt/az/bin/python3 /azure-cli/scripts/release/debian/test_deb_package.py
27 changes: 27 additions & 0 deletions scripts/release/debian/test_deb_package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import os
import sys
import subprocess

root_dir = '/opt/az/lib/python3.6/site-packages/azure/cli/command_modules'
mod_list = [mod for mod in sorted(os.listdir(root_dir)) if os.path.isdir(os.path.join(root_dir, mod)) and mod != '__pycache__']

pytest_base_cmd = '/opt/az/bin/python3 -m pytest -x -v --boxed -p no:warnings --log-level=WARN'
pytest_parallel_cmd = '{} -n auto'.format(pytest_base_cmd)

for mod_name in mod_list:
if mod_name in ['botservice', 'network']:
exit_code = subprocess.call(['{} --junit-xml /azure_cli_test_result/{}.xml --pyargs azure.cli.command_modules.{}'.format(pytest_base_cmd, mod_name, mod_name)], shell=True)
else:
exit_code = subprocess.call(['{} --junit-xml /azure_cli_test_result/{}.xml --pyargs azure.cli.command_modules.{}'.format(pytest_parallel_cmd, mod_name, mod_name)], shell=True)
if exit_code == 5:
print('No tests found for {}'.format(mod_name))
elif exit_code != 0:
sys.exit(exit_code)

exit_code = subprocess.call(['{} --junit-xml /azure_cli_test_result/azure-cli-core.xml --pyargs azure.cli.core'.format(pytest_parallel_cmd)], shell=True)
sys.exit(exit_code)