Skip to content

Commit 6d4b01b

Browse files
authored
Fix SBoM generation (#15578)
1 parent e0be52d commit 6d4b01b

File tree

4 files changed

+27
-13
lines changed

4 files changed

+27
-13
lines changed

Diff for: eng/common/core-templates/steps/generate-sbom.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ steps:
3838
PackageName: ${{ parameters.packageName }}
3939
BuildDropPath: ${{ parameters.buildDropPath }}
4040
PackageVersion: ${{ parameters.packageVersion }}
41-
ManifestDirPath: ${{ parameters.manifestDirPath }}
41+
ManifestDirPath: ${{ parameters.manifestDirPath }}/$(ARTIFACT_NAME)
4242
${{ if ne(parameters.IgnoreDirectories, '') }}:
4343
AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}'
4444

Diff for: eng/common/generate-sbom-prep.ps1

+14-6
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,26 @@ Param(
44

55
. $PSScriptRoot\pipeline-logging-functions.ps1
66

7+
# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly
8+
# with their own overwriting ours. So we create it as a sub directory of the requested manifest path.
9+
$ArtifactName = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM"
10+
$SafeArtifactName = $ArtifactName -replace '["/:<>\\|?@*"() ]', '_'
11+
$SbomGenerationDir = Join-Path $ManifestDirPath $SafeArtifactName
12+
13+
Write-Host "Artifact name before : $ArtifactName"
14+
Write-Host "Artifact name after : $SafeArtifactName"
15+
716
Write-Host "Creating dir $ManifestDirPath"
17+
818
# create directory for sbom manifest to be placed
9-
if (!(Test-Path -path $ManifestDirPath))
19+
if (!(Test-Path -path $SbomGenerationDir))
1020
{
11-
New-Item -ItemType Directory -path $ManifestDirPath
12-
Write-Host "Successfully created directory $ManifestDirPath"
21+
New-Item -ItemType Directory -path $SbomGenerationDir
22+
Write-Host "Successfully created directory $SbomGenerationDir"
1323
}
1424
else{
1525
Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder."
1626
}
1727

1828
Write-Host "Updating artifact name"
19-
$artifact_name = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" -replace '["/:<>\\|?@*"() ]', '_'
20-
Write-Host "Artifact name $artifact_name"
21-
Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$artifact_name"
29+
Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$SafeArtifactName"

Diff for: eng/common/generate-sbom-prep.sh

+11-6
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,24 @@ done
1414
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
1515
. $scriptroot/pipeline-logging-functions.sh
1616

17+
18+
# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts.
19+
artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM"
20+
safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}"
1721
manifest_dir=$1
1822

19-
if [ ! -d "$manifest_dir" ] ; then
20-
mkdir -p "$manifest_dir"
21-
echo "Sbom directory created." $manifest_dir
23+
# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly
24+
# with their own overwriting ours. So we create it as a sub directory of the requested manifest path.
25+
sbom_generation_dir="$manifest_dir/$safe_artifact_name"
26+
27+
if [ ! -d "$sbom_generation_dir" ] ; then
28+
mkdir -p "$sbom_generation_dir"
29+
echo "Sbom directory created." $sbom_generation_dir
2230
else
2331
Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder."
2432
fi
2533

26-
artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM"
2734
echo "Artifact name before : "$artifact_name
28-
# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts.
29-
safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}"
3035
echo "Artifact name after : "$safe_artifact_name
3136
export ARTIFACT_NAME=$safe_artifact_name
3237
echo "##vso[task.setvariable variable=ARTIFACT_NAME]$safe_artifact_name"

Diff for: eng/common/templates-official/job/job.yml

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ jobs:
1616
parameters:
1717
PackageVersion: ${{ parameters.packageVersion }}
1818
BuildDropPath: ${{ parameters.buildDropPath }}
19+
ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom
1920
publishArtifacts: false
2021

2122
# publish artifacts

0 commit comments

Comments
 (0)