ci: Integrate SBOM generation for installer packages

- Created a step templates in the private repo ettus-rts
  to encapsulate steps for SBOM generation for installer packages,
  enabling internal dependency and vulnerability tracking.
This commit is contained in:
Marian Koop 2025-11-13 12:33:24 +01:00 committed by mkoop-ni
parent ca5de0773b
commit d5bc1942ce
2 changed files with 68 additions and 6 deletions

View File

@ -28,6 +28,9 @@ parameters:
values:
- 'Internal'
- 'files.ettus.com (Public)'
- name: create_sbom
type: boolean
default: true
jobs:
- job: build_uhd_installer_${{ parameters.toolset }}
@ -82,32 +85,75 @@ jobs:
#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'
# 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
- ${{ if eq(parameters.toolset, 'fedora_rpm') }}:
- template: steps-build-uhd-installer-fedora-rpm.yml
parameters:
uhdSrcDir: $(Build.SourcesDirectory)
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
- ${{ if eq(parameters.toolset, 'ubuntu_deb') }}:
- template: steps-build-uhd-installer-ubuntu-deb.yml
parameters:
uhdSrcDir: $(Build.SourcesDirectory)
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
ubuntuReleaseName: $(ubuntuReleaseName)
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
- ${{ if and(eq(parameters.toolset, 'msbuild'), eq(parameters.installer, 'nsis')) }}:
- template: steps-build-uhd-installer-msbuild-nsis.yml
parameters:
uhdSrcDir: $(Build.SourcesDirectory)
uhdSrcDir: $(uhdSrcDir)
uhdBuildDir: c:\uhddev\build
uhdInstallerDir: c:\uhddev-installer
uhdInstallerDir: $(Build.BinariesDirectory)\uhddev-installer
uhdImageDir: c:\uhd-images
uhdVcpkgManifestDir: c:\uhd-vcpkg
uhdReleaseBinaries: ${{ parameters.releaseBinaries }}
@ -120,8 +166,21 @@ jobs:
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
uhdBuildPythonAPI: True
vsArch: $(vsArch)
vsYear: $(vsYear)
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.BinariesDirectory)/uhddev-installer'
artifactName: 'uhddev-$(buildOSName)-${{ parameters.toolset }}-${{ parameters.installer }}-installer'
artifactName: 'uhddev-$(buildOSName)-${{ parameters.toolset }}-${{ parameters.installer }}-installer-run$(System.JobAttempt)'
displayName: Upload uhd installer artifact
condition: or(succeeded(), failed())

View File

@ -28,7 +28,7 @@ parameters:
default: 'smoke'
- name: create_sbom
type: boolean
displayName: Create SBOM for filesystem images
displayName: Create SBOMs
default: true
- name: build_sdk
type: boolean
@ -481,6 +481,7 @@ stages:
toolset: ubuntu_deb
installer: deb
cmake_args: ${{ parameters.cmake_args }}
create_sbom: ${{ parameters.create_sbom }}
- stage: build_uhd_installer_stage_fedora
displayName: Build UHD Installers Fedora
@ -493,6 +494,7 @@ stages:
installer: rpm
cmake_args: ${{ parameters.cmake_args }}
releaseBinaries: ${{ parameters.release_binaries }}
create_sbom: ${{ parameters.create_sbom }}
- stage: build_uhd_installer_stage_win
displayName: Build UHD Installers Windows
@ -516,6 +518,7 @@ stages:
fpga_imgs_source: 'files.ettus.com'
${{ else }}:
fpga_imgs_source: 'Internal'
create_sbom: ${{ parameters.create_sbom }}
- ${{ if parameters.release_binaries }}:
- template: job-uhd-build-installer-signing.yml
parameters: