uhd/.ci/templates/job-uhd-build-installer.yml
2026-10-05 16:43:49 +02:00

209 lines
9.0 KiB
YAML

parameters:
- name: 'toolset'
type: string
values:
- fedora_rpm
- make
- msbuild
- ubuntu_deb
- name: 'installer'
type: string
values:
- rpm # fedora_rpm
- tar # make
- nsis # msbuild
- deb # ubuntu_deb
- name: 'cmake_args'
type: string
default: " "
- name: releaseBinaries
type: boolean
default: false
# In this job, we always use uhd_images_downloader to get FPGA images, never
# the pipeline. This variable only controls if we use files.ettus.com or our
# internal server.
- name: fpga_imgs_source
type: string
default: 'Internal'
values:
- 'Internal'
- 'files.ettus.com (Public)'
- name: create_sbom
type: boolean
default: true
jobs:
- job: build_uhd_installer_${{ parameters.toolset }}
displayName: ${{ parameters.toolset }} UHD installer
dependsOn: get_latest_uhd_docker
${{ if contains(parameters.toolset, 'msbuild') }}:
timeoutInMinutes: 150
${{ else }}:
timeoutInMinutes: 120
variables:
# Need to use list format to support inclusion of variable groups.
# Variable group used by .ci/templates/steps-windows-sbom.yml@ettus-rts
- group: meta-ettus-vars
# Variable group needed for code signing (signtool-p4-path)
- ${{ if eq(parameters.toolset, 'msbuild') }}:
- group: sdr-pipeline-vars
# Docker vars from job-get-latest-uhd-docker.yml
- name: dockerBuildNumber
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerBuildNumber'] ]
- name: dockerImagePrefix
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImagePrefix'] ]
- name: dockerImageMatrixLin
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixLin'] ]
- name: dockerImageMatrixWin
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixWin'] ]
- name: dockerImageMatrixUbuntuDeb
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixUbuntuDeb'] ]
- name: macOSBuilders
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.macOSBuilders'] ]
- name: dockerImageMatrixSourcePackageBuilders
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixSourcePackageBuilders'] ]
- name: dockerImageMatrixFedoraRpm
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixFedoraRpm'] ]
pool:
name: Drivers-NIBuildFarm-RFMIBUILD
demands:
- docker
- ${{ if contains(parameters.toolset, 'msbuild') }}:
- Agent.OS -equals Windows_NT
- large_disk -equals 1
- high_disk_io -equals 1
- high_cpu_per_thread -equals 1
- cpu_host_type -equals Intel_x86-64-v4
- ${{ if not(contains(parameters.toolset, 'msbuild')) }}:
- Agent.OS -equals Linux
workspace:
clean: outputs
strategy:
${{ if and(eq(parameters.toolset, 'make'), eq(parameters.installer, 'tarball')) }}:
matrix: $[ variables.dockerImageMatrixLin ]
${{ if and(eq(parameters.toolset, 'msbuild'), eq(parameters.installer, 'nsis')) }}:
matrix: $[ variables.dockerImageMatrixWin ]
${{ if and(eq(parameters.toolset, 'ubuntu_deb'), eq(parameters.installer, 'deb')) }}:
matrix: $[ variables.dockerImageMatrixUbuntuDeb ]
${{ if and(eq(parameters.toolset, 'fedora_rpm'), eq(parameters.installer, 'rpm')) }}:
matrix: $[ variables.dockerImageMatrixFedoraRpm ]
container:
image: '$(dockerImagePrefix)$(DockerImageName):$(dockerBuildNumber)'
${{ if eq(parameters.toolset, 'msbuild') }}:
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
${{ if eq(parameters.toolset, 'ubuntu_deb') }}:
#pbuilder requires access to /proc
options: --privileged
steps:
# Job uses template which causes self checkout to result in different values
# for $(Build.SourcesDirectory) due to single vs multiple repositories use.
# Switching to use manual path definition $(Pipeline.Workspace)/s/<RepoName>
# for consistent behavior to avoid
# $(Pipeline.Workspace)/s vs $(Pipeline.Workspace)/s/<RepoName>).
# Custom path now includes <RepoName>, which is now hardcoded, rather than
# use name from git repo (avoids problem when building from public uhd repo).
# Checkout path needs to be defined relative to $(Pipeline.Workspace).
- checkout: self
clean: true
path: 's/uhddev'
retryCountOnTaskFailure: 3
timeoutInMinutes: 10
# Need to use OS specific steps because predefined variable
# (i.e. $(Pipeline.Workspace) on Linux is treated as runtime shell expansion,
# but actually handled by Azure and the quotes ensure correct, delayed variable
# expansion. On Windows variables are exanded before script runs, and
# using quotes results in leading or trailing quotes in the variable value.
- script: |
echo "##vso[task.setvariable variable=uhdSrcDir]$(Pipeline.Workspace)/s/uhddev"
condition: eq( variables['Agent.OS'], 'Linux' )
displayName: 'Define uhdSrcDir variable (Linux)'
- script: |
echo ##vso[task.setvariable variable=uhdSrcDir]$(Pipeline.Workspace)\s\uhddev
condition: eq( variables['Agent.OS'], 'Windows_NT' )
displayName: 'Define uhdSrcDir variable (Windows)'
- download: uhd_build_docker_container
- template: .ci/templates/steps-setup.yml@ettus-rts
- ${{ if eq(parameters.toolset, 'fedora_rpm') }}:
- template: steps-install-nib310rio-dev.yml
- template: steps-build-uhd-installer-fedora-rpm.yml
parameters:
uhdSrcDir: $(uhdSrcDir)
uhdBuildDir: $(Build.BinariesDirectory)/uhddev/build
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
fedoraReleaseName: $(fedoraReleaseName)
releaseBinaries: ${{ parameters.releaseBinaries }}
cmake_args: ${{ parameters.cmake_args }}
- ${{ if parameters.create_sbom }}:
- template: .ci/templates/steps-linux-sbom.yml@ettus-rts
parameters:
toolset: ${{ parameters.toolset }}
installer: ${{ parameters.installer }}
sbomComponentList: 'uhd libuhd libboost libusb'
buildOSName: $(buildOSName)
osReleaseName: $(fedoraReleaseName)
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
releaseBinaries: ${{ parameters.releaseBinaries }}
- ${{ if eq(parameters.toolset, 'ubuntu_deb') }}:
- template: steps-install-nib310rio-dev.yml
- template: steps-build-uhd-installer-ubuntu-deb.yml
parameters:
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
ubuntuReleaseName: $(ubuntuReleaseName)
nib310rioDebPackageDir: $(Pipeline.Workspace)/nib310rio_kernel_packages/nib310rio-deb-packages
cmake_args: ${{ parameters.cmake_args }}
- ${{ if parameters.create_sbom }}:
- template: .ci/templates/steps-linux-sbom.yml@ettus-rts
parameters:
toolset: ${{ parameters.toolset }}
installer: ${{ parameters.installer }}
sbomComponentList: 'uhd libuhd'
buildOSName: $(buildOSName)
osReleaseName: $(ubuntuReleaseName)
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
releaseBinaries: ${{ parameters.releaseBinaries }}
- ${{ if and(eq(parameters.toolset, 'msbuild'), eq(parameters.installer, 'nsis')) }}:
- template: steps-build-uhd-installer-msbuild-nsis.yml
parameters:
uhdSrcDir: $(uhdSrcDir)
uhdBuildDir: c:\uhddev\build
uhdInstallerDir: $(Build.BinariesDirectory)\uhddev-installer
uhdImageDir: c:\uhd-images
uhdVcpkgManifestDir: c:\uhd-vcpkg
uhdReleaseBinaries: ${{ parameters.releaseBinaries }}
uhdBuildPythonAPI: True
${{ if contains(parameters.fpga_imgs_source, 'Internal') }}:
uhdImagesDownloaderExtraArgs: '-b $(InternalFileServerUrl)'
cmakeCompiler: $(cmakeCompiler)
cmakeArch: $(cmakeArch)
vsArch: $(vsArch)
vsYear: $(vsYear)
cleanTargetFolder: False
cmake_args: ${{ parameters.cmake_args }}
- ${{ if parameters.create_sbom }}:
- template: .ci/templates/steps-windows-sbom.yml@ettus-rts
parameters:
sbomComponentList: ''
buildOSName: $(buildOSName)
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)\uhddev-installer
uhdBuildDir: c:\uhddev\build
uhdVcpkgManifestDir: c:\uhd-vcpkg
releaseBinaries: ${{ parameters.releaseBinaries }}
uhdBuildPythonAPI: True
vsArch: $(vsArch)
vsYear: $(vsYear)
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.BinariesDirectory)/uhddev-installer'
artifactName: 'uhddev-$(buildOSName)-${{ parameters.toolset }}-${{ parameters.installer }}-installer'
displayName: Upload uhd installer artifact