builds/misc/templates/build-packages.yaml (439 lines of code) (raw):
parameters:
- name: build_single
type: string
default: ''
- name: linux_packages
type: object
default:
- os:
container: redhat/ubi8:latest
identity: platform:el8
iotedge: redhat8
targets:
- arch: amd64
identity: iot-identity-service/packages/el8/amd64
iotedged: edgelet/target/rpmbuild/RPMS/x86_64
- os:
container: redhat/ubi9:latest
identity: platform:el9
iotedge: redhat9
targets:
- arch: amd64
identity: iot-identity-service/packages/el9/amd64
iotedged: edgelet/target/rpmbuild/RPMS/x86_64
- os:
container: mcr.microsoft.com/mirror/docker/library/debian:bullseye
identity: debian:11
iotedge: debian11
targets:
- arch: amd64
identity: iot-identity-service/packages/debian11/amd64
iotedged: edgelet/target/release
- arch: arm32v7
identity: iot-identity-service/packages/debian11/arm32v7
iotedged: edgelet/target/armv7-unknown-linux-gnueabihf/release
- arch: aarch64
identity: iot-identity-service/packages/debian11/aarch64
iotedged: edgelet/target/aarch64-unknown-linux-gnu/release
- os:
container: mcr.microsoft.com/mirror/docker/library/debian:bookworm
identity: debian:12
iotedge: debian12
targets:
- arch: amd64
identity: iot-identity-service/packages/debian12/amd64
iotedged: edgelet/target/release
- arch: arm32v7
identity: iot-identity-service/packages/debian12/arm32v7
iotedged: edgelet/target/armv7-unknown-linux-gnueabihf/release
- arch: aarch64
identity: iot-identity-service/packages/debian12/aarch64
iotedged: edgelet/target/aarch64-unknown-linux-gnu/release
- os:
container: mcr.microsoft.com/mirror/docker/library/ubuntu:20.04
identity: ubuntu:20.04
iotedge: ubuntu20.04
targets:
- arch: amd64
identity: iot-identity-service/packages/ubuntu2004/amd64
iotedged: edgelet/target/release
- arch: arm32v7
identity: iot-identity-service/packages/ubuntu2004/arm32v7
iotedged: edgelet/target/armv7-unknown-linux-gnueabihf/release
- arch: aarch64
identity: iot-identity-service/packages/ubuntu2004/aarch64
iotedged: edgelet/target/aarch64-unknown-linux-gnu/release
- os:
container: mcr.microsoft.com/mirror/docker/library/ubuntu:22.04
identity: ubuntu:22.04
iotedge: ubuntu22.04
targets:
- arch: amd64
identity: iot-identity-service/packages/ubuntu2204/amd64
iotedged: edgelet/target/release
- arch: arm32v7
identity: iot-identity-service/packages/ubuntu2204/arm32v7
iotedged: edgelet/target/armv7-unknown-linux-gnueabihf/release
- arch: aarch64
identity: iot-identity-service/packages/ubuntu2204/aarch64
iotedged: edgelet/target/aarch64-unknown-linux-gnu/release
- os:
container: mcr.microsoft.com/mirror/docker/library/ubuntu:24.04
identity: ubuntu:24.04
iotedge: ubuntu24.04
targets:
- arch: amd64
identity: iot-identity-service/packages/ubuntu2404/amd64
iotedged: edgelet/target/release
- arch: arm32v7
identity: iot-identity-service/packages/ubuntu2404/arm32v7
iotedged: edgelet/target/armv7-unknown-linux-gnueabihf/release
- arch: aarch64
identity: iot-identity-service/packages/ubuntu2404/aarch64
iotedged: edgelet/target/aarch64-unknown-linux-gnu/release
stages:
################################################################################
- stage: CheckBuildPackages
################################################################################
displayName: Check For Source Code Changes
pool:
name: $(pool.linux.name)
demands:
- ImageOverride -equals agent-aziotedge-ubuntu-22.04-msmoby
dependsOn: []
jobs:
- job: check_source_change_edgelet
displayName: Check Source Changes Edgelet (changes ARE in builds or edgelet)
steps:
- bash: |
git log -m -1 --name-only --first-parent --pretty="" | egrep -i '^(builds|scripts|edgelet)'
if [[ $? == 0 ]]; then
echo "Detected changes inside builds or edgelet folders"
echo "##vso[task.setvariable variable=EDGELETCHANGES;isOutput=true]TRUE"
fi
displayName: Check changes in edgelet sources
name: check_files
################################################################################
- stage: BuildPackages
################################################################################
displayName: Build Packages
dependsOn: CheckBuildPackages
condition: |
and(
succeeded(), or(
not('${{ parameters['build_single'] }}'),
eq(dependencies.CheckBuildPackages.outputs['check_source_change_edgelet.check_files.EDGELETCHANGES'], 'true')
)
)
jobs:
################################################################################
# DEB/RPM packages for Linux distros
################################################################################
- ${{ each build in parameters.linux_packages }}:
- ${{ each target in build.targets }}:
- ${{ if or(not(parameters.build_single), eq(format('{0}:{1}', build.os.iotedge, target.arch), parameters.build_single)) }}:
- job: linux_${{ replace(build.os.iotedge, '.', '') }}_${{ target.arch }}
displayName: Linux ${{ build.os.iotedge }} ${{ target.arch }}
pool:
name: $(pool.linux.name)
demands:
- ImageOverride -equals agent-aziotedge-ubuntu-22.04-msmoby
variables:
arch: ${{ target.arch }}
os.container: ${{ build.os.container }}
os.identity: ${{ build.os.identity }}
os.iotedge: ${{ build.os.iotedge }}
target.identity: ${{ target.identity }}
target.iotedged: ${{ target.iotedged }}
steps:
- bash: |
BASE_VERSION=`cat $BUILD_SOURCESDIRECTORY/edgelet/version.txt`
VERSION="$BASE_VERSION~$BUILD_BUILDNUMBER"
echo "Version: $VERSION"
echo "##vso[task.setvariable variable=VERSION;]$VERSION"
echo "##vso[task.setvariable variable=PACKAGE_ARCH;]$(arch)"
echo "##vso[task.setvariable variable=PACKAGE_OS;]$(os.iotedge)"
displayName: Set Version
- bash: |
set -xeuo pipefail
identity_commit=$(
sed -nE \
's/^source = "git\+https:\/\/github\.com\/Azure\/iot-identity-service\?branch=main#([0-9a-fA-F]+)"$/\1/p' \
edgelet/Cargo.lock | head -n 1
)
git clone https://github.com/Azure/iot-identity-service.git
pushd iot-identity-service
git checkout "$identity_commit"
git submodule update --init --recursive .
packageVersion=$(
grep "PACKAGE_VERSION:" .github/workflows/packages.yaml \
| awk '{print $2}' \
| tr -d "'" \
| tr -d '"'
)
docker run --rm \
-v "$(Build.SourcesDirectory)/iot-identity-service:/src" \
-e 'ARCH=$(arch)' \
-e 'OS=$(os.identity)' \
-e "PACKAGE_VERSION=$packageVersion" \
-e "PACKAGE_RELEASE=1" \
--privileged \
'$(os.container)' \
'/src/ci/package.sh'
popd
displayName: Create aziot-identity packages
- task: CopyFiles@2
displayName: Copy aziot-identity packages to artifact staging
inputs:
SourceFolder: $(target.identity)
Contents: |
*.deb
*.ddeb
*.rpm
!*-debugsource-*.rpm
!*-devel-*.rpm
!*.src.rpm
TargetFolder: '$(build.artifactstagingdirectory)/aziot-identity'
- task: PublishBuildArtifacts@1
displayName: Publish aziot-identity artifacts
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)/aziot-identity'
ArtifactName: 'aziot-identity-$(os.iotedge)-$(arch)'
- bash: sudo rm -rf iot-identity-service
displayName: Clean up iot-identity-service
- script: edgelet/build/linux/package.sh
displayName: Create aziot-edge packages
- task: CopyFiles@2
displayName: Copy aziot-edge packages to artifact staging
inputs:
SourceFolder: $(target.iotedged)
Contents: |
*.deb
*.ddeb
*.rpm
!*-debugsource-*.rpm
TargetFolder: '$(build.artifactstagingdirectory)/iotedged'
- task: PublishBuildArtifacts@1
displayName: Publish iotedged artifacts
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)/iotedged'
ArtifactName: 'iotedged-$(os.iotedge)-$(arch)'
################################################################################
- job: snap
################################################################################
displayName: Snap
condition: and(succeeded(), not('${{ parameters['build_single'] }}'))
strategy:
matrix:
amd64:
arch: amd64
pool: $(pool.linux.name)
image: agent-aziotedge-ubuntu-22.04
aarch64:
arch: aarch64
pool: $(pool.linux.arm.name)
image: agent-aziotedge-ubuntu-22.04-arm64
pool:
name: $(pool)
demands:
- ImageOverride -equals $(image)
steps:
- bash: |
set -xeuo pipefail
sudo snap refresh
sudo snap install snapcraft --classic
lxd init --minimal
displayName: Set up build environment for snaps
- bash: |
set -xeuo pipefail
identity_commit=$(
sed -nE \
's/^source = "git\+https:\/\/github\.com\/Azure\/iot-identity-service\?branch=main#([0-9a-fA-F]+)"$/\1/p' \
edgelet/Cargo.lock | head -n 1
)
git clone https://github.com/Azure/iot-identity-service.git
pushd iot-identity-service
git checkout "$identity_commit"
git submodule update --init --recursive .
SNAPCRAFT_BUILD_INFO=1 snapcraft --use-lxd
popd
displayName: Create aziot-identity packages
- task: CopyFiles@2
displayName: Copy aziot-identity packages to artifact staging
inputs:
Contents: '*.snap'
SourceFolder: '$(build.sourcesdirectory)/iot-identity-service'
TargetFolder: '$(build.artifactstagingdirectory)/aziot-identity'
- task: PublishBuildArtifacts@1
displayName: Publish aziot-identity artifacts
inputs:
ArtifactName: 'aziot-identity-snap-$(arch)'
PathtoPublish: '$(build.artifactstagingdirectory)/aziot-identity'
- bash: sudo rm -rf iot-identity-service
displayName: Clean up iot-identity-service
- bash: |
set -xeuo pipefail
SNAPCRAFT_BUILD_INFO=1 snapcraft --use-lxd
displayName: Create aziot-edge packages
- task: CopyFiles@2
displayName: Copy aziot-edge packages to artifact staging
inputs:
Contents: '*.snap'
SourceFolder: '$(build.sourcesdirectory)'
TargetFolder: '$(build.artifactstagingdirectory)/iotedged'
- task: PublishBuildArtifacts@1
displayName: Publish iotedged artifacts
inputs:
ArtifactName: 'iotedged-snap-$(arch)'
PathtoPublish: '$(build.artifactstagingdirectory)/iotedged'
################################################################################
- job: azurelinux
################################################################################
displayName: Azure Linux
condition:
and(
succeeded(),
or(eq(variables['build.linux.mariner'], ''), eq(variables['build.linux.mariner'], true))
)
timeoutInMinutes: 90
strategy:
matrix:
2.0-amd64:
agent-pool: $(pool.linux.name)
agent-image: agent-aziotedge-ubuntu-22.04-msmoby
arch: amd64
os: mariner
os_id: cm
os_version: 2
release_tag: 2.0-stable
target.identity: iot-identity-service/packages/mariner2/amd64
target.iotedged: builds/mariner2/out/RPMS/x86_64
2.0-aarch64:
agent-pool: $(pool.linux.arm.name)
agent-image: agent-aziotedge-ubuntu-22.04-arm64-msmoby
arch: aarch64
os: mariner
os_id: cm
os_version: 2
release_tag: 2.0-stable
target.identity: iot-identity-service/packages/mariner2/aarch64
target.iotedged: builds/mariner2/out/RPMS/aarch64
3.0-amd64:
agent-pool: $(pool.linux.name)
agent-image: agent-aziotedge-ubuntu-22.04-msmoby
arch: amd64
os: azurelinux
os_id: azl
os_version: 3
release_tag: 3.0-stable
target.identity: iot-identity-service/packages/azurelinux3/amd64
target.iotedged: builds/azurelinux3/out/RPMS/x86_64
3.0-aarch64:
agent-pool: $(pool.linux.arm.name)
agent-image: agent-aziotedge-ubuntu-22.04-arm64-msmoby
arch: aarch64
os: azurelinux
os_id: azl
os_version: 3
release_tag: 3.0-stable
target.identity: iot-identity-service/packages/azurelinux3/aarch64
target.iotedged: builds/azurelinux3/out/RPMS/aarch64
pool:
name: $(agent-pool)
demands:
- ImageOverride -equals $(agent-image)
- DiskSizeGiB -equals 100 # EFLOW requires ~85GB to build the edgelet artifacts
- WorkFolder -equals /mnt/storage/_work
steps:
- bash: |
BASE_VERSION=`cat $BUILD_SOURCESDIRECTORY/edgelet/version.txt`
VERSION="$BASE_VERSION~$BUILD_BUILDNUMBER" # Give deb format here; let Makefile convert to rpm format
echo "##vso[task.setvariable variable=VERSION;]$VERSION"
echo "##vso[task.setvariable variable=PACKAGE_ARCH;]$(arch)"
echo "PACKAGE_OS=$(os)"
echo "##vso[task.setvariable variable=OSVERSION;]$(os_version)"
azurelinux_arch=$(arch)
if [ $azurelinux_arch == "amd64" ]; then
azurelinux_arch="x86_64"
fi
echo "##vso[task.setvariable variable=AZURELINUX_ARCH;]$azurelinux_arch"
displayName: Set Version
- bash: |
set -xeuo pipefail
identity_commit=$(
sed -nE \
's/^source = "git\+https:\/\/github\.com\/Azure\/iot-identity-service\?branch=main#([0-9a-fA-F]+)"$/\1/p' \
edgelet/Cargo.lock | head -n 1
)
git clone https://github.com/Azure/iot-identity-service.git
pushd iot-identity-service
git checkout "$identity_commit"
git submodule update --init --recursive .
packageVersion=$(
grep "PACKAGE_VERSION:" .github/workflows/packages.yaml \
| awk '{print $2}' \
| tr -d "'" \
| tr -d '"'
)
docker run --rm \
-v "$(Build.SourcesDirectory)/iot-identity-service:/src" \
-e "ARCH=$PACKAGE_ARCH" \
-e "OS=$OS:$OSVERSION" \
-e "PACKAGE_VERSION=$packageVersion" \
-e "PACKAGE_RELEASE=1" \
--privileged \
'mcr.microsoft.com/mirror/docker/library/ubuntu:22.04' \
'/src/ci/package.sh'
popd
# aziot-edge package script expects to query the version from the identity package in the root source directory
os_dirs='$(os)$(os_version)/$(arch)'
os_suffix='$(os_id)$(os_version).$(AZURELINUX_ARCH)'
sudo cp iot-identity-service/packages/$os_dirs/aziot-identity-service-$packageVersion-1.$os_suffix.rpm .
displayName: Create aziot-identity packages
- task: CopyFiles@2
displayName: Copy aziot-identity build logs to artifact staging
inputs:
SourceFolder: iot-identity-service/AzureLinux-Build/build/logs/pkggen/rpmbuilding
Contents: |
**/*.rpm.log
TargetFolder: '$(build.artifactstagingdirectory)/aziot-identity'
condition: succeededOrFailed()
- task: CopyFiles@2
displayName: Copy aziot-identity packages to artifact staging
inputs:
SourceFolder: $(target.identity)
Contents: |
*.rpm
!*-devel-*.rpm
TargetFolder: '$(build.artifactstagingdirectory)/aziot-identity'
condition: succeededOrFailed()
- task: PublishBuildArtifacts@1
displayName: Publish aziot-identity artifacts
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)/aziot-identity'
ArtifactName: 'aziot-identity-$(os)$(os_version)-$(arch)'
- bash: sudo rm -rf iot-identity-service
displayName: Clean up iot-identity-service
condition: succeededOrFailed()
- bash: |
docker run --rm \
-v "$(Build.SourcesDirectory):/src" \
-e "ARCH=$arch" \
-e "OS=$OS" \
-e "AZURELINUX_RELEASE=$RELEASE_TAG" \
-e "ARCH=$AZURELINUX_ARCH" \
-e "VERSION=$VERSION" \
--privileged \
'mcr.microsoft.com/mirror/docker/library/ubuntu:22.04' \
'/src/edgelet/build/linux/package-mariner.sh'
displayName: Create aziot-edge packages
- task: CopyFiles@2
displayName: Copy aziot-edge build logs to artifact staging
inputs:
SourceFolder: builds/$(os)$(os_version)/build/logs/pkggen/rpmbuilding
Contents: |
**/*.rpm.log
TargetFolder: '$(build.artifactstagingdirectory)/iotedged'
condition: succeededOrFailed()
- task: CopyFiles@2
displayName: Copy aziot-edge packages to artifact staging
inputs:
SourceFolder: $(target.iotedged)
Contents: |
aziot-edge-*.rpm
TargetFolder: '$(build.artifactstagingdirectory)/iotedged'
condition: succeededOrFailed()
- task: PublishBuildArtifacts@1
displayName: Publish iotedged artifacts
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)/iotedged'
ArtifactName: 'iotedged-$(os)$(os_version)-$(arch)'
condition: succeededOrFailed()