mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-14 20:58:09 +00:00
316 lines
13 KiB
YAML
316 lines
13 KiB
YAML
#
|
|
# Copyright 2021 Ettus Research, a National Instruments Brand
|
|
#
|
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
#
|
|
trigger:
|
|
branches:
|
|
include:
|
|
- master
|
|
paths:
|
|
include:
|
|
- .ci/docker
|
|
- .ci/uhd-build-docker-container.yml
|
|
pr:
|
|
branches:
|
|
include:
|
|
- master
|
|
paths:
|
|
include:
|
|
- .ci/docker
|
|
- .ci/uhd-build-docker-container.yml
|
|
|
|
schedules:
|
|
- cron: "0 18 * * SAT"
|
|
displayName: Weekly Docker Build master branch
|
|
branches:
|
|
include:
|
|
- master
|
|
always: true
|
|
|
|
parameters:
|
|
- name: build_linux
|
|
type: boolean
|
|
displayName: Build Linux images
|
|
default: true
|
|
- name: build_windows
|
|
type: boolean
|
|
displayName: Build Windows images
|
|
default: true
|
|
|
|
variables:
|
|
- template: uhd-pipeline-vars.yml
|
|
- ${{ if parameters.build_linux }}:
|
|
- name: linuxDockerImages
|
|
value:
|
|
"{'Fedora-39-builder':{'buildOSName':'fedora39','dockerImageName':'uhd-builder-fedora39'},
|
|
'Fedora-40-builder':{'buildOSName':'fedora40','dockerImageName':'uhd-builder-fedora40'},
|
|
'Fedora-41-builder':{'buildOSName':'fedora41','dockerImageName':'uhd-builder-fedora41'},
|
|
'Ubuntu-1804-builder':{'buildOSName':'ubuntu1804','dockerImageName':'uhd-builder-ubuntu1804'},
|
|
'Ubuntu-2004-builder':{'buildOSName':'ubuntu2004','dockerImageName':'uhd-builder-ubuntu2004'},
|
|
'Ubuntu-2204-builder':{'buildOSName':'ubuntu2204','dockerImageName':'uhd-builder-ubuntu2204'},
|
|
'Ubuntu-2404-builder':{'buildOSName':'ubuntu2404','dockerImageName':'uhd-builder-ubuntu2404'}}"
|
|
- ${{ else }}:
|
|
- name: linuxDockerImages
|
|
value:
|
|
- ${{ if parameters.build_windows }}:
|
|
- name: winDockerImages
|
|
value:
|
|
"{'VS2019-x64-py310-builder':{'buildOSName':'win-vs19-v142-x64-py310','dockerImageName':'uhd-builder-vs2019-v142-x64-py310','cmakeCompiler':'Visual Studio 16 2019','cmakeArch':'x64','vsArch':'x64','vsYear':'2019','pythonVersion':'python310'},
|
|
'VS2019-x64-py312-builder':{'buildOSName':'win-vs19-v142-x64-py312','dockerImageName':'uhd-builder-vs2019-v142-x64-py312','cmakeCompiler':'Visual Studio 16 2019','cmakeArch':'x64','vsArch':'x64','vsYear':'2019','pythonVersion':'python312'},
|
|
'VS2022-x64-py310-builder':{'buildOSName':'win-vs22-v143-x64-py310','dockerImageName':'uhd-builder-vs2022-v143-x64-py310','cmakeCompiler':'Visual Studio 17 2022','cmakeArch':'x64','vsArch':'x64','vsYear':'2022','pythonVersion':'python310'},
|
|
'VS2022-x64-py312-builder':{'buildOSName':'win-vs22-v143-x64-py312','dockerImageName':'uhd-builder-vs2022-v143-x64-py312','cmakeCompiler':'Visual Studio 17 2022','cmakeArch':'x64','vsArch':'x64','vsYear':'2022','pythonVersion':'python312'}}"
|
|
- ${{ else }}:
|
|
- name: winDockerImages
|
|
value:
|
|
|
|
- name: ubuntuDebDockerImages
|
|
# Match with Ubuntu images in linuxDockerImages
|
|
value:
|
|
"{'Ubuntu-1804-builder':{'buildOSName':'ubuntu1804','dockerImageName':'uhd-builder-ubuntu1804','ubuntuReleaseName':'bionic'},
|
|
'Ubuntu-2004-builder':{'buildOSName':'ubuntu2004','dockerImageName':'uhd-builder-ubuntu2004','ubuntuReleaseName':'focal'},
|
|
'Ubuntu-2204-builder':{'buildOSName':'ubuntu2204','dockerImageName':'uhd-builder-ubuntu2204','ubuntuReleaseName':'jammy'},
|
|
'Ubuntu-2404-builder':{'buildOSName':'ubuntu2404','dockerImageName':'uhd-builder-ubuntu2404','ubuntuReleaseName':'noble'}}"
|
|
|
|
- name: macOSBuilders
|
|
value:
|
|
"{'macOS-15-x64':{'buildOSName':'macOS-15-x64', 'macOSVersionDemand':'15', 'macOSArchDemand': 'X64'}}"
|
|
|
|
- name: sourcePackageBuilders
|
|
# Match with one of the Ubuntu images in linuxDockerImages
|
|
value:
|
|
"{'Ubuntu-2004-builder':{'buildOSName':'ubuntu2004','dockerImageName':'uhd-builder-ubuntu2004','ubuntuReleaseName':'focal'}}"
|
|
|
|
- name: fedoraRpmDockerImages
|
|
# Match with Fedora images in linuxDockerImages
|
|
value:
|
|
"{'Fedora-39-builder':{'buildOSName':'fedora39','dockerImageName':'uhd-builder-fedora39','fedoraReleaseName':'39'},
|
|
'Fedora-40-builder':{'buildOSName':'fedora40','dockerImageName':'uhd-builder-fedora40','fedoraReleaseName':'40'},
|
|
'Fedora-41-builder':{'buildOSName':'fedora41','dockerImageName':'uhd-builder-fedora41','fedoraReleaseName':'41'}}"
|
|
|
|
- name: winDockerImagesPythonBuild
|
|
# Match with one of the images in winDockerImages
|
|
value:
|
|
"{}"
|
|
|
|
- ${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
|
|
- name: dockerImagePrefix
|
|
value: 'rnd-docker-ci/ni/rfsdr/'
|
|
- ${{ else }}:
|
|
- name: dockerImagePrefix
|
|
value: 'rnd-docker-pre/ni/rfsdr/'
|
|
|
|
jobs:
|
|
- job: set_uhd_docker_image_version
|
|
displayName: Set UHD Docker Image Version
|
|
pool:
|
|
name: Drivers-NIBuildFarm-RFMIBUILD
|
|
demands:
|
|
- agent.os -equals Linux
|
|
steps:
|
|
- checkout: self
|
|
clean: true
|
|
- script: |
|
|
cd $(Build.SourcesDirectory)
|
|
uhd_version_major=$(sed -nE "s/^set\(UHD_VERSION_MAJOR\s+([0-9]+)\)/\1/p" host/cmake/Modules/UHDVersion.cmake)
|
|
uhd_version_api=$(sed -nE "s/^set\(UHD_VERSION_API\s+([0-9]+)\)/\1/p" host/cmake/Modules/UHDVersion.cmake)
|
|
uhd_version_abi=$(sed -nE "s/^set\(UHD_VERSION_ABI\s+([0-9]+)\)/\1/p" host/cmake/Modules/UHDVersion.cmake)
|
|
if [[ -z $uhd_version_major || -z $uhd_version_api || -z $uhd_version_abi ]]
|
|
then
|
|
echo "Error parsing UHDVersion.cmake for UHD Version"
|
|
exit 1
|
|
fi
|
|
|
|
uhd_docker_image_version=${uhd_version_major}.${uhd_version_api}.${uhd_version_abi}_$(Build.BuildNumber)
|
|
echo "Using UHD version string: $uhd_docker_image_version"
|
|
echo "##vso[task.setvariable variable=uhdDockerImageVersion;isOutput=true;]$uhd_docker_image_version"
|
|
name: set_uhd_version
|
|
|
|
- job: build_image_linux
|
|
dependsOn: set_uhd_docker_image_version
|
|
displayName: Build Docker Image
|
|
variables:
|
|
uhdDockerImageVersion: $[ dependencies.set_uhd_docker_image_version.outputs['set_uhd_version.uhdDockerImageVersion'] ]
|
|
pool:
|
|
name: Drivers-NIBuildFarm-RFMIBUILD
|
|
demands:
|
|
- agent.os -equals Linux
|
|
- docker
|
|
condition: and(succeeded(), ${{ parameters.build_linux }})
|
|
strategy:
|
|
matrix: $[ variables.linuxDockerImages ]
|
|
steps:
|
|
- checkout: self
|
|
clean: true
|
|
- task: Docker@2
|
|
displayName: Build Image
|
|
inputs:
|
|
command: 'build'
|
|
Dockerfile: '$(Build.SourcesDirectory)/.ci/docker/$(dockerImageName).Dockerfile'
|
|
${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
|
|
containerRegistry: rnd-docker-niartifacts-sdr-ci-publish
|
|
${{ else }}:
|
|
containerRegistry: rnd-docker-niartifacts-pre-publish
|
|
repository: '$(dockerImagePrefix)$(dockerImageName)'
|
|
tags: $(uhdDockerImageVersion)
|
|
arguments: --no-cache --pull
|
|
- task: Docker@2
|
|
displayName: Push Image
|
|
inputs:
|
|
command: 'push'
|
|
${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
|
|
containerRegistry: rnd-docker-niartifacts-sdr-ci-publish
|
|
${{ else }}:
|
|
containerRegistry: rnd-docker-niartifacts-pre-publish
|
|
repository: '$(dockerImagePrefix)$(dockerImageName)'
|
|
tags: $(uhdDockerImageVersion)
|
|
|
|
- job: test_image_linux
|
|
displayName: Test Docker Image
|
|
dependsOn:
|
|
- build_image_linux
|
|
- set_uhd_docker_image_version
|
|
variables:
|
|
uhdDockerImageVersion: $[ dependencies.set_uhd_docker_image_version.outputs['set_uhd_version.uhdDockerImageVersion'] ]
|
|
pool:
|
|
name: Drivers-NIBuildFarm-RFMIBUILD
|
|
demands:
|
|
- agent.os -equals Linux
|
|
- docker
|
|
strategy:
|
|
matrix: $[ variables.linuxDockerImages ]
|
|
container:
|
|
image: "$(dockerImagePrefix)$(dockerImageName):$(uhdDockerImageVersion)"
|
|
${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
|
|
endpoint: rnd-docker-niartifacts-ci-readonly
|
|
${{ else }}:
|
|
endpoint: rnd-docker-niartifacts-pre-readonly
|
|
workspace:
|
|
clean: outputs
|
|
steps:
|
|
- checkout: self
|
|
clean: true
|
|
- script: |
|
|
cd $(Build.BinariesDirectory)
|
|
mkdir -p uhddev/build
|
|
cd uhddev/build
|
|
cmake $(Build.SourcesDirectory)/host
|
|
displayName: Test image with cmake uhd
|
|
- script: |
|
|
cd $(Build.BinariesDirectory)
|
|
mkdir -p uhddev/build-ninja
|
|
cd uhddev/build-ninja
|
|
cmake -G Ninja $(Build.SourcesDirectory)/host
|
|
displayName: Test image with cmake ninja uhd
|
|
|
|
- job: build_image_win
|
|
dependsOn: set_uhd_docker_image_version
|
|
displayName: Build Docker Image Windows
|
|
timeoutInMinutes: 120
|
|
variables:
|
|
uhdDockerImageVersion: $[ dependencies.set_uhd_docker_image_version.outputs['set_uhd_version.uhdDockerImageVersion'] ]
|
|
pool:
|
|
name: Drivers-NIBuildFarm-RFMIBUILD
|
|
demands:
|
|
- agent.os -equals Windows_NT
|
|
- docker
|
|
condition: and(succeeded(), ${{ parameters.build_windows }})
|
|
strategy:
|
|
matrix: $[ variables.winDockerImages ]
|
|
steps:
|
|
- checkout: self
|
|
clean: true
|
|
- task: Docker@2
|
|
displayName: Build Image
|
|
inputs:
|
|
command: 'build'
|
|
Dockerfile: '$(Build.SourcesDirectory)/.ci/docker/$(dockerImageName).Dockerfile'
|
|
${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
|
|
containerRegistry: rnd-docker-niartifacts-sdr-ci-publish
|
|
${{ else }}:
|
|
containerRegistry: rnd-docker-niartifacts-pre-publish
|
|
repository: '$(dockerImagePrefix)$(dockerImageName)'
|
|
tags: $(uhdDockerImageVersion)
|
|
buildContext: $(Build.SourcesDirectory)
|
|
arguments: --no-cache --pull
|
|
- task: Docker@2
|
|
displayName: Push Image
|
|
inputs:
|
|
command: 'push'
|
|
${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
|
|
containerRegistry: rnd-docker-niartifacts-sdr-ci-publish
|
|
${{ else }}:
|
|
containerRegistry: rnd-docker-niartifacts-pre-publish
|
|
repository: '$(dockerImagePrefix)$(dockerImageName)'
|
|
tags: $(uhdDockerImageVersion)
|
|
|
|
- job: test_image_win
|
|
displayName: Test Docker Image Windows
|
|
timeoutInMinutes: 90
|
|
dependsOn:
|
|
- build_image_win
|
|
- set_uhd_docker_image_version
|
|
variables:
|
|
uhdDockerImageVersion: $[ dependencies.set_uhd_docker_image_version.outputs['set_uhd_version.uhdDockerImageVersion'] ]
|
|
pool:
|
|
name: Drivers-NIBuildFarm-RFMIBUILD
|
|
demands:
|
|
- agent.os -equals Windows_NT
|
|
- docker
|
|
strategy:
|
|
matrix: $[ variables.winDockerImages ]
|
|
container:
|
|
image: "$(dockerImagePrefix)$(dockerImageName):$(uhdDockerImageVersion)"
|
|
options: --cpu-count 6 --memory 12G
|
|
${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
|
|
endpoint: rnd-docker-niartifacts-ci-readonly
|
|
${{ else }}:
|
|
endpoint: rnd-docker-niartifacts-pre-readonly
|
|
workspace:
|
|
clean: outputs
|
|
steps:
|
|
- checkout: self
|
|
clean: true
|
|
- script: |
|
|
mkdir c:\uhddev\build
|
|
cd c:\uhddev\build
|
|
cmake $(Build.SourcesDirectory)/host ^
|
|
-DVCPKG_TARGET_TRIPLET=uhd-$(vsArch)-windows-static-md ^
|
|
-DCMAKE_TOOLCHAIN_FILE=%VCPKG_INSTALL_DIR%\scripts\buildsystems\vcpkg.cmake ^
|
|
-DVCPKG_INSTALLED_DIR=c:\uhd-vcpkg\vcpkg_installed ^
|
|
-DVCPKG_MANIFEST_DIR=c:\uhd-vcpkg ^
|
|
-G "$(cmakeCompiler)" -A $(cmakeArch)
|
|
displayName: Test image with cmake uhd
|
|
- script: |
|
|
cd c:\uhddev\build
|
|
"C:\Program Files (x86)\Microsoft Visual Studio\$(vsYear)\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" $(vsArch)
|
|
displayName: Load Visual C++ Env
|
|
|
|
- job: export_build_number
|
|
dependsOn: set_uhd_docker_image_version
|
|
displayName: Export Image List to Artifacts
|
|
variables:
|
|
uhdDockerImageVersion: $[ dependencies.set_uhd_docker_image_version.outputs['set_uhd_version.uhdDockerImageVersion'] ]
|
|
pool:
|
|
name: Drivers-NIBuildFarm-RFMIBUILD
|
|
demands: sh
|
|
steps:
|
|
- checkout: none
|
|
- script: |
|
|
cd $(Build.ArtifactStagingDirectory)
|
|
touch $(UHDPipelineDockerImageArtifactName)
|
|
echo "$(uhdDockerImageVersion)" > $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.dockerImagePrefix }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.linuxDockerImages }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.winDockerImages }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.ubuntuDebDockerImages }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.macOSBuilders }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.sourcePackageBuilders }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.fedoraRpmDockerImages }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
echo "${{ variables.winDockerImagesPythonBuild }}" >> $(UHDPipelineDockerImageArtifactName)
|
|
displayName: Generate created image list
|
|
- task: PublishPipelineArtifact@1
|
|
inputs:
|
|
targetPath: $(Build.ArtifactStagingDirectory)
|
|
artifactName: $(UHDPipelineDockerImageArtifactName)
|
|
displayName: Upload image list artifact
|