Skip to content

Commit a80f848

Browse files
committed
fix: #23915 podman build is not parsing sbom command line arguments
Signed-off-by: Alex Guidi <aguidi@redhat.com>
1 parent 94e77af commit a80f848

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

cmd/podman/common/build.go

+20
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"os"
88
"path/filepath"
9+
"slices"
910
"strings"
1011
"syscall"
1112
"time"
@@ -514,6 +515,24 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *Buil
514515
}
515516
}
516517

518+
var sbomScanOptions []buildahDefine.SBOMScanOptions
519+
if c.Flag("sbom").Changed || c.Flag("sbom-scanner-command").Changed || c.Flag("sbom-scanner-image").Changed || c.Flag("sbom-image-output").Changed || c.Flag("sbom-merge-strategy").Changed || c.Flag("sbom-output").Changed || c.Flag("sbom-image-output").Changed || c.Flag("sbom-purl-output").Changed || c.Flag("sbom-image-purl-output").Changed {
520+
sbomScanOption, err := parse.SBOMScanOptions(c)
521+
if err != nil {
522+
return nil, err
523+
}
524+
if !slices.Contains(sbomScanOption.ContextDir, contextDir) {
525+
sbomScanOption.ContextDir = append(sbomScanOption.ContextDir, contextDir)
526+
}
527+
for _, abc := range additionalBuildContext {
528+
if !abc.IsURL && !abc.IsImage {
529+
sbomScanOption.ContextDir = append(sbomScanOption.ContextDir, abc.Value)
530+
}
531+
}
532+
sbomScanOption.PullPolicy = pullPolicy
533+
sbomScanOptions = append(sbomScanOptions, *sbomScanOption)
534+
}
535+
517536
opts := buildahDefine.BuildOptions{
518537
AddCapabilities: flags.CapAdd,
519538
AdditionalTags: tags,
@@ -570,6 +589,7 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *Buil
570589
Runtime: podmanConfig.RuntimePath,
571590
RuntimeArgs: runtimeFlags,
572591
RusageLogFile: flags.RusageLogFile,
592+
SBOMScanOptions: sbomScanOptions,
573593
SignBy: flags.SignBy,
574594
SignaturePolicyPath: flags.SignaturePolicy,
575595
Squash: flags.Squash,

test/e2e/build_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -972,4 +972,19 @@ RUN ls /dev/test1`, CITEST_IMAGE)
972972
session.WaitWithDefaultTimeout()
973973
Expect(session).Should(ExitWithError(1, `building at STEP "RUN --mount=type=cache,target=/test,z cat /test/world": while running runtime: exit status 1`))
974974
})
975+
It("podman build with sbom flags", func() {
976+
podmanTest.AddImageToRWStore(ALPINE)
977+
session := podmanTest.Podman([]string{"build", "-t", "sbom-img", "--sbom-output=localsbom.txt", "--sbom-purl-output=localpurl.txt", "--sbom-image-output=/root/sbom.txt", "--sbom-image-purl-output=/root/purl.txt",
978+
"--sbom-scanner-image=alpine", "--sbom-scanner-command=/bin/sh -c 'echo SCANNED ROOT {ROOTFS} > {OUTPUT}'", "--sbom-scanner-command=/bin/sh -c 'echo SCANNED BUILD CONTEXT {CONTEXT} > {OUTPUT}'",
979+
"--sbom-merge-strategy=cat", "build/basicalpine"})
980+
981+
session.WaitWithDefaultTimeout()
982+
Expect(session).Should(ExitCleanly())
983+
984+
session = podmanTest.Podman([]string{"run", "--rm", "sbom-img", "ls", "/root"})
985+
session.WaitWithDefaultTimeout()
986+
Expect(session).Should(ExitCleanly())
987+
Expect(session.OutputToString()).To(ContainSubstring("purl.txt"))
988+
Expect(session.OutputToString()).To(ContainSubstring("sbom.txt"))
989+
})
975990
})

0 commit comments

Comments
 (0)